feat(windows): mpv plays audio on Windows, with libmpv shipped in the installer
libmpv on Windows (DR-237): - The builder image carries zhongfly's LGPL libmpv-2.dll, pinned by asset name and sha256, plus an MSVC mpv.lib generated from the DLL's own mpv_* exports (the archive ships only a MinGW .dll.a). LGPL, not the GPL builds: no x264/x265, mpv -Dgpl=false; FFmpeg is version3, so LGPL-3.0. THIRD_PARTY_NOTICES.md records it. - build-windows-cross.sh stages both files into src-tauri/windows-libs/; build.rs links mpv.lib from there and tauri.windows.conf.json bundles the DLL beside jellytau.exe from there, with the licence texts under licenses/. One directory, so the DLL shipped is the one linked. - Workflows move to builder image 2026.09.1. Windows audio: - MpvBackend replaces WebviewAudioBackend on Windows (ao=wasapi), so volume, EQ, normalization and gapless work there as on Linux. Local files are passed to mpv as native paths, not file:// URLs. Fixes found on the way: - player_play_item decided "does the backend render video" with cfg!(not(linux)), true on Windows, while get_player_status sent Windows video to the <video> element. With mpv as the backend that would decode every film's soundtrack twice. All three callers now ask video_renders_natively() (UT-273). - confine_queued_path rebuilt paths with PathBuf::push, so on Windows a queued `downloads/x` was stored as `downloads\x`, no longer the spelling the app built. It now keeps the caller's separator (UT-205, which only ever ran on Linux, failed under Windows). Verified: jellytau.exe imports libmpv-2.dll; the full unit suite cross-compiled for Windows passes under wine against the shipped DLL (943/943, including the mpv injection and TLS tests); the NSIS installer contains the DLL and licence texts. Not yet run on real Windows hardware.
This commit is contained in:
@@ -186,6 +186,42 @@ RUN . $HOME/.cargo/env && \
|
||||
cargo cyclonedx --version && \
|
||||
mdbook --version
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# libmpv for Windows (DR-237) — the Windows build links it and ships the DLL.
|
||||
#
|
||||
# zhongfly/mpv-winbuild's **LGPL** dev build: libmpv-2.dll with FFmpeg compiled
|
||||
# in, built `-Dgpl=false` with no x264/x265 and no --enable-gpl (its
|
||||
# compile-lgpl-libmpv.patch). FFmpeg keeps --enable-version3, so the DLL is
|
||||
# LGPL-3.0: the installer ships the licence texts and keeps the DLL a separate,
|
||||
# replaceable file — THIRD_PARTY_NOTICES.md. Not the default (GPL) asset from
|
||||
# the same release, and not shinchiro's, which is GPL-3.0 only.
|
||||
#
|
||||
# Pinned by asset name *and* sha256: GitHub prunes old releases from that repo,
|
||||
# so a rebuild after pruning fails loudly here rather than quietly taking a
|
||||
# newer build. To bump, change all three values.
|
||||
#
|
||||
# The archive ships a MinGW import library (libmpv.dll.a); the MSVC target needs
|
||||
# `mpv.lib`, generated from the DLL's own mpv_* exports so it cannot name a
|
||||
# symbol the DLL lacks. Output: $LIBMPV_WIN_DIR/{libmpv-2.dll,mpv.lib,include}.
|
||||
ENV LIBMPV_WIN_RELEASE=2026-09-24-2a4eb8067c \
|
||||
LIBMPV_WIN_ASSET=mpv-dev-lgpl-x86_64-20260924-git-2a4eb8067c.7z \
|
||||
LIBMPV_WIN_SHA256=f89c6195e13bfce3e8c0cc5d7f5d889ebdcf12184a41c8288360f5acd1e7306c \
|
||||
LIBMPV_WIN_DIR=/opt/libmpv-win64
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends libarchive-tools \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& wget -q "https://github.com/zhongfly/mpv-winbuild/releases/download/${LIBMPV_WIN_RELEASE}/${LIBMPV_WIN_ASSET}" \
|
||||
-O /tmp/mpv-dev.7z \
|
||||
&& echo "${LIBMPV_WIN_SHA256} /tmp/mpv-dev.7z" | sha256sum -c - \
|
||||
&& mkdir -p "$LIBMPV_WIN_DIR" \
|
||||
&& bsdtar -xf /tmp/mpv-dev.7z -C "$LIBMPV_WIN_DIR" libmpv-2.dll include \
|
||||
&& rm /tmp/mpv-dev.7z \
|
||||
&& { echo "LIBRARY libmpv-2.dll"; echo "EXPORTS"; \
|
||||
llvm-readobj --coff-exports "$LIBMPV_WIN_DIR/libmpv-2.dll" \
|
||||
| awk '/Name: mpv_/ { print " " $2 }'; } > "$LIBMPV_WIN_DIR/mpv.def" \
|
||||
&& llvm-lib /def:"$LIBMPV_WIN_DIR/mpv.def" /out:"$LIBMPV_WIN_DIR/mpv.lib" /machine:x64 \
|
||||
&& test "$(grep -c '^ mpv_' "$LIBMPV_WIN_DIR/mpv.def")" -ge 50 \
|
||||
&& ls -la "$LIBMPV_WIN_DIR"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENTRYPOINT ["/bin/bash"]
|
||||
|
||||
Reference in New Issue
Block a user