Repository navigation
7.1.5.5
What's changed
FFmpeg stays on n7.1.5, now from FFmpegKit release 7.1.7 (previously 7.1.6). The FFmpeg version hasn't moved, so this is the next binding revision, 7.1.5.5. If you use the 7.* range, your next restore moves you onto it.
Update if you use 7.1.5.4: it has two bugs that can stop FFmpeg working in your app.
Fixed: FFmpeg fails to load on some Android versions
On an arm64 Android 12 (API 31) emulator, Min, MinGpl, Https, HttpsGpl and Video from 7.1.5.4 could not run any FFmpeg command. The first one threw:
java.lang.UnsatisfiedLinkError: dlopen failed: can't enable GNU RELRO protection for ".../libswresample.so": Out of memory
This has nothing to do with available memory. In those builds the library's RELRO segment ends past its last loaded segment, so Android's linker tries to protect memory that isn't mapped. Upstream traces this to NDK r26c and now builds with r27c.
All five variants now pass every device check on that emulator. Video from 7.1.5.4 did load on an API 35 emulator and on a Pixel 10 with Android 17, so whether you hit this depends on the Android version. Other versions were not tried. On x86_64, Audio carries the same defect as these five: Audio from 7.1.5.4 failed with the same error on an API 31 emulator.
Fixed: the app freezes after an FFmpeg command
An app on the default Mono runtime could freeze for good at the first garbage collection after it ran an FFmpeg command, usually ending in Android's "isn't responding" dialog. How soon that happened depended on how much the app allocated, so a small test app could run for a long time without showing it. A device check that forces collections after FFmpeg has run never finishes on 7.1.5.4, and passes on this release.
Mono on Android restarts the threads it stopped for a collection with SIGXCPU. FFmpeg installs its own SIGXCPU handler when a command runs, so the restart never reached Mono and those threads stayed suspended. FFmpeg also treats that signal as a request to stop.
The packages now call FFmpegKitConfig.IgnoreSignal(Signal.Sigxcpu) the first time you use FFmpegKit, FFmpegKitConfig or AsyncFFmpegExecuteTask, so you don't need to change any code. If you already make that call yourself, it is harmless and you can remove it. Your own Java code still has to make the call if it starts FFmpeg without going through those types.
Security
Upstream reports that FFmpegKit 7.1.7 backports fixes for two issues onto n7.1.5:
- CVE-2026-64830: VobSub demuxer, unbounded writes past
vobsub->q[]. - CVE-2026-64835: ADX decoder, channel state desync.
FFmpegKitConfig.FFmpegVersion reports n7.1.5 with or without them, so check the package version instead.
Native changes
drawtextis now inFull,FullGplandVideo. FFmpegKit built HarfBuzz but never enabled it, so FFmpeg silently left the filter out. A command usingdrawtextfailed on7.1.5.4withNo such filter: 'drawtext', and now renders text.- A
-filter_complexparse error no longer kills the process, according to upstream. This could not be confirmed here: a graph naming an unknown filter returned an error on both7.1.5.4and this release. MinandHttpsnow carrylibc++_shared.so, as the other variants already did. That adds about 1.7 MB onarm64-v8aand 1.5 MB onx86_64before compression.libc++_shared.sois now 16 KB-aligned, like every other library in the packages. Upstream notes that Google Play stops accepting updates without 16 KB support on 1 February 2027.
.NET API
The FFmpegKit update changes nothing here: classes.jar is byte-identical between FFmpegKit 7.1.6 and 7.1.7 in all eight variants.
7.1.5.4 came out before 8.1.2.5, so this release also picks up that release's binding changes:
FFmpegKitConfig.DisableLogCallback()andDisableStatisticsCallback()clear the global callbacks.- The hand-written additions now have nullable reference annotations, which can produce new compiler warnings in projects with nullable checks on.
- Every package now warns at build time:
FFMPEGKIT001whenSupportedOSPlatformVersionis below 24, andFFMPEGKIT002when a build includes 32-bit runtime identifiers. You can suppress either withNoWarn.
Target frameworks, arm64-v8a and x86_64, minSdkVersion 24 and licensing are unchanged.
FFmpegKit 7.1.6 can no longer be built from main
FFmpegKit 7.1.7 packages the same FFmpeg, and build/native-versions.tsv has one row per FFmpeg version, so it replaces 7.1.6 there. 7.1.5.4 stays on nuget.org, but it has none of the fixes above.
What was tested
Against the packed packages:
- An arm64 API 35 emulator and a Pixel 10 with Android 17: all eight variants on
net10.0-android36.0, plusFullandVideoonnet8.0-android34.0. Every device check passes, including the garbage collection check, andFFmpegKitConfig.FFmpegVersionreportsn7.1.5. - An arm64 API 31 emulator:
Min,MinGpl,Https,HttpsGplandVideoonnet10.0-android36.0. - The example app on both of the first two devices, on
net10.0-android36.0,net9.0-android35.0andnet8.0-android34.0: media probe, resize, grayscale and audio extraction, then playback of the result. drawtextinVideo,FullandFullGpl.- All 190 package tests.
x86_64 emulators ran a build of the same FFmpegKit 7.1.7 libraries after this release went out. Audio and Video on net8.0-android34.0 pass every device check on API 31 and 35, and the example app, which uses Full, completes a conversion on net10.0-android36.0 on API 35. Min, MinGpl, Https, HttpsGpl and FullGpl have not run on x86_64.
Full changelog: v8.1.3.1...v7.1.5.5
Native build
FFmpegKit 7.1.7, which packages FFmpeg n7.1.5 — the two version
numbers are not the same thing. Read from the shipped libavcodec.so.
Built from the upstream release v7.1.7 LTS Android (Free), published 2026-09-26.
Upstream's summary of that build:
Free tier of the 7.1 LTS line. Nine artifacts,
arm64-v8a+x86_64, built from FFmpegn7.1.5with the two CVE backports applied.Seven of the nine tiers could not be loaded before this release
On 7.1.6,
dlopenfailed before a single function was called:dlopen failed: can't enable GNU RELRO protection for ".../jni/x86_64/libswresample.so": Out of memoryIt was not a memory shortage.
PT_GNU_RELRO, rounded up to the 16 KB page size, extended past the lastPT_LOAD; the loader'smprotectcovered unmapped memory and answeredENOMEM. The cause was NDK r26c, whoselldrounds RELRO up tomax-page-sizewithout padding the finalLOAD. It only affected small libraries, sofullandfull-gplworked and it looked intermittent.
free,min,min-gpl,https,https-gpl,audioandvideowere affected. All nine tiers load in 7.1.7.The same NDK shipped
libc++_shared.soaligned on 4 KB, which would have failed on 16 KB-page devices — Google Play stops accepting updates without 16 KB support on 2027-02-01. Andfree,httpsandminshipped nolibc++_shared.soat all, whilelibffmpegkit.solinks against it unconditionally.Also in this release
drawtextis present infull,full-gplandvideo. Since FFmpeg 6.1 it depends on libharfbuzz, andconfiguredrops a filter silently when its flag is absent; harfbuzz was built and linked all along but--enable-libharfbuzzwas never passed.- A filtergraph parse error no longer kills the process.
init_complex_filtergraph()left anAVFilterInOut *uninitialised and freed it on the error path.- CVE-2026-64830 (vobsub) and CVE-2026-64835 (adx), backported to
n7.1.5.Toolchain
NDK r27c (
27.2.12479018), as on the 8.1 line. Do not go back: r26c produces libraries that cannot be loaded.Verification
Read from these artifacts, not from the build:
- every
.so:p_align16 KB andPT_GNU_RELROinside the lastPT_LOADlibc++_shared.sopresent in both ABIs of all nine- the pin, per ABI:
libavutil n7.1.5- 18 capability lists compared against 7.1.6 for the two tiers that could be loaded before: one difference,
drawtextadded; nothing removed- 189 acceptance checks (21 × 9 tiers) on a device: 0 failures. The 41 skipped are tiers genuinely without the encoder or filter involved, cross-checked against each artifact's own capability tables.
Packages
Targeting net8.0-android34.0, net9.0-android35.0 and net10.0-android36.0.
| Package | License | NuGet |
|---|---|---|
FFmpegKit.Net.Audio.Android |
MIT AND LGPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.Full.Android |
MIT AND LGPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.FullGpl.Android |
MIT AND GPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.Https.Android |
MIT AND LGPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.HttpsGpl.Android |
MIT AND GPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.Min.Android |
MIT AND LGPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.MinGpl.Android |
MIT AND GPL-3.0-only |
7.1.5.5 |
FFmpegKit.Net.Video.Android |
MIT AND LGPL-3.0-only |
7.1.5.5 |
dotnet add package FFmpegKit.Net.Video.Android --version 7.1.5.5
Licensing
The binding code is MIT, but the bundled native FFmpeg binaries are not.
The -gpl variants enable x264/x265/xvid/vidstab and are GPL-3.0; the rest
are LGPL-3.0. If your app is closed-source, use a non-GPL variant.
Each package ships the applicable texts under licenses/.