download.savannah.gnu.org and ftpmirror.gnu.org (which share one front host) intermittently time out from the GitHub runners, which has already broken the freetype and libiconv steps. Route the affected dependencies around that host: - freetype is now fetched via git (gitlab.freedesktop.org, pinned tag VER-2-14-1) like the other git dependencies, instead of a savanna tarball that no longer has a working host. - libiconv now tries several independent GNU mirrors, the first one that serves it winning. - gettar() generalizes to accept a list of fallback URLs so any future tarball dependency can name its mirrors too.
mpv-natives
Self-built libmpv native binaries for jlibmpv, the Java/JNA wrapper library.
Why this repository exists
jlibmpv is 100% MIT and deliberately does not bundle any native binaries.
The build here targets mpv's LGPL-2.1-or-later license path (-Dgpl=false,
ffmpeg without --enable-gpl), so the resulting libmpv can be embedded into
arbitrary — including closed-source — applications that load it in-process via
JNA, without the GPL's copyleft obligations reaching into their code. End
users who want a drop-in native they can point mpv.libmpv.path at (or that a
RemoteNativeLocator can download) find them here, as versioned GitHub
release assets.
- Pinned version: mpv
v0.41.0— the exact client API (131077) the jlibmpv JNA bindings are validated against. A libmpv update means bumpingMPV_REF(and the affected dependency pins) inci/versions.env— the single source of truth for every version in this repository. - Build source: the mpv source tree is checked out at that tag by
GitHub Actions and built with the vendored scripts in
ci/(build-libmpv-mingw64.sh,build-libmpv-macos.sh,build-libmpv-linux.sh). No mpv source or third-party binaries are stored in this repository.
Releases
Each platform produces a single self-contained library file plus a combined
checksums.txt (SHA-256) for verification. Assets are published by pushing a
tag of the form v<mpv-version> (e.g. v0.41.0), which triggers
release.yml:
| Asset | Contents |
|---|---|
mpv-natives-windows-x86_64-<ver>.dll |
libmpv-2.dll (all dependencies statically linked, mingw64 build) |
mpv-natives-macos-universal-<ver>.dylib |
libmpv.dylib (universal arm64 + x86_64, all dependencies statically linked) |
mpv-natives-linux-x86_64-<ver>.so |
libmpv.so (all dependencies statically linked, native x86_64 build) |
Each native is fully self-contained: every dependency (ffmpeg, libass, libplacebo, harfbuzz, freetype, fribidi, …) is statically linked into the single library together with the C/C++ runtime where needed. The library depends only on the platform's system libraries, so there is no dependency closure to ship alongside it — jlibmpv loads it at runtime via JNA and never compiles against it, so no public headers are shipped.
Audio is the one area deliberately left to the OS stack: on Linux the
PipeWire / Pulse / ALSA libraries are linked dynamically (mirroring CoreAudio
on macOS and WASAPI on Windows), and mpv auto-probes them in the order
pipewire → pulse → alsa. On Linux the self-built libmpv.so additionally
removes the need for the distribution package (libmpv1), which lags behind in
codec support (dav1d/AV1, x264/x265): the pinned ffmpeg 8.0.1 guarantees the
full codec set on any recent glibc distribution.
How to use with jlibmpv
-
Download the release asset for your platform (a single library file).
-
Point jlibmpv at it:
-Dmpv.libmpv.path=/path/to/mpv-natives-<platform>-<ver>.<ext>.Or let a
RemoteNativeLocatorfetch it — the download URL is deterministic from (platform, mpv version):https://github.com/kirbylink/mpv-natives/releases/download/v<ver>/mpv-natives-<platform>-<ver>.<ext>where
<platform>iswindows-x86_64/macos-universal/linux-x86_64and<ext>isdll/dylib/sorespectively.
Building
Builds run on GitHub Actions. There is nothing to build locally.
- A pull request runs the three per-platform builds as the check.
- A
v*tag builds all three and publishes the GitHub Release. - Manual runs are available in the Actions tab.
License
The release artifacts are built from mpv on its LGPL-2.1-or-later path
(-Dgpl=false) and from FFmpeg without --enable-gpl, so the resulting
libmpv is LGPL-2.1-or-later (the ffmpeg libraries inside are likewise
LGPL, with BSD-licensed components such as dav1d). Distributing an
application that loads one of these libraries is fine under any license;
the LGPL only requires that the user be able to replace the library with a
different build (which is exactly what mpv.libmpv.path allows) and that
you keep the library's license and source-available terms for the library
itself. If you use a GPL distribution instead, the GPL's obligations apply.
The build scripts and workflows in this repository are MIT-licensed. See LICENSE for the repository's license terms.