Repository navigation
Bump the older tracks to FFmpegKit 7.1.7 and 6.0.4 - #24
Merged
Merged
Conversation
Both are respins of an FFmpeg these tracks already ship: libavcodec.so still reports n7.1.5 and n6.1.6, so packages stay on 7.1.5.x and 6.1.6.x. A respin has to replace its row in native-versions.tsv. Both columns must be unique and the lookup stops at the first match, so an appended row would keep resolving the old .aar. That means 7.1.6 and 6.0.3 can no longer be built from main, though their tags still resolve through the file as it stood at the tag and their baselines stay for comparison. The file was described as append-only, which a respin can't honour, so the rule is now one row per FFmpeg version and never drop a track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merging these tags and publishes both packages, so they say what a consumer of 7.1.5.4 or 6.1.6.4 most needs to know: five variants of those packages can't load FFmpeg on API 31, and every variant that loads freezes at the next garbage collection. Both failures were run against the published packages, so the notes describe what was seen rather than what upstream reports. Upstream's claims stay attributed, and the one that could not be confirmed here says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
The older-version procedure omits explicit version arguments, causing verification to fail on missing 8.x artifacts and packaging to target 8.x instead of the selected track.
1 open issue
What changed in this PR
Updates the Android binding’s older tracks to FFmpegKit 6.0.4 and 7.1.7, preparing package releases 6.1.6.5 and 7.1.5.5 while leaving the 8.x default unchanged.
Changes:
- Replaces the older native-version mappings and adds checksum baselines for both releases.
- Adds release notes covering native fixes, inherited binding changes, and verification limits.
- Updates documentation, examples, and comments to reflect the new mappings and respin policy.
| File | Description |
|---|---|
tests/FFmpegKit.Android.PackageTests/NativeVersionMapTests.cs |
Updates the mapping-policy comment; assertions are unchanged. |
src/FFmpegKit.Android/Jars/FetchJars.sh |
Corrects the dependency declaration comment. |
src/FFmpegKit.Android/FFmpegKit.Android.csproj |
Corrects the embedded-dependency comment. |
src/FFmpegKit.Android/BuildNugets.sh |
Updates the older-track usage example. |
README.md |
Refreshes version tables and build examples. |
docs/release-notes/7.1.5.5.md |
Documents the 7.x release and verification results. |
docs/release-notes/6.1.6.5.md |
Documents the 6.x release and verification results. |
build/update-checksums.sh |
Updates the checksum-generation example. |
build/native-versions.tsv |
Replaces older-track mappings and records prior pairs. |
build/checksums/7.1.7.sha256 |
Adds checksums for eight AARs and two dependency jars. |
build/checksums/6.0.4.sha256 |
Adds checksums for eight AARs and two dependency jars. |
.github/workflows/build.yml |
Updates the native-version input description only. |
.github/instructions/native-versions.instructions.md |
Clarifies respin mapping and older-track adoption. |
.github/copilot-instructions.md |
Refreshes mapping and release examples. |
Review effort: Balanced
| 4. **Then** bump `FFmpegVersion` and `FFmpegKitNativeVersion` in `Directory.Build.props` (both, together — they are different schemes) and fetch: `./src/FFmpegKit.Android/Jars/FetchJars.sh <ffmpegkit version>`. | ||
| 3. **Add the mapping row** to `build/native-versions.tsv`: `<ffmpeg>\t<ffmpegkit>`, tab-separated, keeping the existing comment header. There is one row per FFmpeg version, because the lookup stops at the first match and a test requires both columns to be unique. A new FFmpeg gets a new row. A respin of the same FFmpeg replaces that row: note the old pair in the header comment, keep its checksum baseline, and say in the release note that the old FFmpegKit release can no longer be built from `main`. Existing tags are unaffected, because a release reads the file as it stood at its tag. Never drop a track. | ||
| 4. **Then**, if this is the default line, bump `FFmpegVersion` and `FFmpegKitNativeVersion` in `Directory.Build.props` (both, together — they are different schemes). Older lines leave the props alone. Either way, fetch: `./src/FFmpegKit.Android/Jars/FetchJars.sh <ffmpegkit version>`. | ||
| 5. Verify and pack: `./src/FFmpegKit.Android/Jars/FetchJars.sh --verify`, then `./src/FFmpegKit.Android/BuildNugets.sh`, then `dotnet test tests/FFmpegKit.Android.PackageTests` (it asserts the mapping and the props agree). |
build/notify-parents.sh keeps one open issue per package and matches any v tag, so releasing 7.1.5.5 or 6.1.6.5 would comment on FFMpegKit.Net#10, which is about 8.1.3.1, and retitle it to the older version. Anyone following that issue would be told to move the umbrella down a major. The parent pins the default track, so release.yml now runs that job only when the tag's FFmpeg is the FFmpegVersion in the tag's own Directory.Build.props. That follows the default by itself, with no list of versions to maintain. It lives in release.yml because notify-parents.* are kept byte-identical across the repositories, and this is the only one publishing parallel tracks on one tag prefix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Bumps the two older tracks to their newest upstream releases. Both are respins of an FFmpeg these tracks already ship (read from
libavcodec.soin all 8 variants on both ABIs), so the packages move to their next binding revision.7.*n7.1.57.1.6→7.1.77.1.5.4→7.1.5.56.*n6.1.66.0.3→6.0.46.1.6.4→6.1.6.5Merging this publishes both packages to nuget.org. It needs the maintainer's go-ahead.
Before you merge
pr.ymlpasses nonative-version, so G6 packs and tests 8.x only, andrelease.ymlruns withverify: false. The local gate below is the only verification of7.1.7and6.0.4.x86_64was not run on any device. Local emulators and the Pixel are arm64, and CI'sx86_64emulator only sees 8.x. Per ELF analysis, thex86_64builds of7.1.6/6.0.3have the defect inAudiotoo, and7.1.7/6.0.4are clean.-betabuilds to nuget.org, as every PR does. It doesn't publish 7.x or 6.x betas.auto-release.ymlloops over added notes, and each tag gets its ownrelease-<tag>concurrency group. The three July tags were pushed, not dispatched.Why this release matters
Both failures below were run against the published packages from nuget.org, in the repo's device test app.
Min,MinGpl,Https,HttpsGplVideoFullUnsatisfiedLinkError: dlopen failed: can't enable GNU RELRO protection for ".../libswresample.so": Out of memory. All 5 variants on both lines fail this way, and only the first device check passes, because it doesn't run FFmpeg.PT_GNU_RELROends past the lastPT_LOADin those builds. It is specific to the Android version; only API 31, 35 and 37 were tried. The linker test also ran all 8 variants of all 4 versions on API 31: the same 5 variants fail, as the ELF analysis predicted, and all 160 libraries of7.1.7and6.0.4pass.SIGXCPUhazard fixed in Bump FFmpegKit to 8.1.9 (FFmpeg n8.1.3) and fix the SIGXCPU freeze #23, now seen on these lines for the first time. The fix reaches them throughmain.What changed
build/native-versions.tsv: rows replaced, as the maintainer approved ("Yes, replace rows"), because both columns must be unique and the lookup stops at the first match. The old pairs are recorded in the header comment.7.1.6and6.0.3can no longer be built frommain. Their tags still resolve through the file as it stood at the tag, the packages stay on nuget.org, and their checksum baselines stay in the repo.native-versions.instructions.mdandNativeVersionMapTests.cs: one row per FFmpeg version, a respin replaces its row, never drop a track.build/checksums/7.1.7.sha256and6.0.4.sha256. All 16.aardigests match both Maven's sidecars and an independent download, and thesmart-exceptiondigests match the8.1.9baseline..pomwording corrected:7.1.7and6.0.4also declaresmart-exception.Directory.Build.propsstays on the 8.x default.release.yml:notify-parentsnow runs only for the default track.build/notify-parents.shkeeps one open issue per package and matches anyvtag, so without this7.1.5.5and6.1.6.5would comment on FFMpegKit.Net#10 (about8.1.3.1) and retitle it to the older version, telling the umbrella to move down a major. Theversionjob compares the tag's FFmpeg withFFmpegVersionin the tag's ownDirectory.Build.props, so it follows the default by itself. The check is inrelease.ymlbecausenotify-parents.*are kept byte-identical across 17 repositories, and those are unchanged.resolvestep givesfalseforv7.1.5.5,v6.1.6.5andv8.1.2.6, andtrueforv8.1.3.x. The real script with a stubghconfirmed the comment and retitle.release.ymldoesn't run on a PR, so this first runs on GitHub at the release. A hand-runworkflow_dispatchofnotify-parents.ymlbypasses the check.release.yml:179still says6.0.3.2. It was already stale, and it's release automation.API changes
classes.jaris byte-identical in all 16 old/new pairs, so the Java API diff is empty andMetadata.xmlis unchanged. JNI exports stay at 14.7.1.5.4/6.1.6.4, from8.1.2.5:FFmpegKitConfig.DisableLogCallback(),DisableStatisticsCallback(), nullable annotations on the hand-written additions, and theFFMPEGKIT001/FFMPEGKIT002build warnings. All are in the notes.Test report — 7.1.5.5-local.20261030145239 and 6.1.6.5-local.20261030153509
Toolchain: .NET 8.0.427 / 9.0.320 / 10.0.403, Android workloads 34 / 35 / 36. net8 used the 8.0.33 mono packs through
DOTNETSDK_WORKLOAD_PACK_ROOTS(protocol §0), each verified against nuget.org's catalog hash.Devices:
ffmpegkit_e2e(arm64, API 35),noolite_tv(Android TV image, arm64, API 31, booted read-only) and a Pixel 10 (Android 17, API 37, 4 KB pages, Russian locale).Results are the same for both lines. The preflight pack of unmodified
mainwas clean.FFMPEGKIT_E2E_DONE PASSFull,VideoFull,VideoMin,MinGpl,Https,HttpsGpl,Videoffmpeg=n7.1.5/ffmpeg=n6.1.6in all 25 runs per linedrawtextVideo,Full,FullGpl; PixelVideoNo such filter: 'drawtext'on publishedFullandVideo8.1.2.5There are no
SKIPPEDchecks: nothing here needs credentials.Not verified:
x86_64on a device, and Android versions other than API 31, 35 and 37.reports progress while encodingpasses in every run.-filter_complexcrash. A graph naming an unknown filter returned an error on the published packages too, so the old crash didn't reproduce. The notes say so.The hand checks ran from a scratch copy of
SmokeTests.cs, so no test code from them is in this PR. Nothing in the smoke tests coversdrawtextor asserts the FFmpeg version.🤖 Generated with Claude Code