Skip to content

Re-pin Android to 8.1.3.1 and move the umbrella to 8.1.3.1 - #11

Merged
sbokatuk merged 3 commits into
masterfrom
bump/android-8.1.3.1
Oct 30, 2026
Merged

sbokatuk merged 3 commits into
masterfrom
bump/android-8.1.3.1

Conversation

@sbokatuk

@sbokatuk sbokatuk commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

Closes #10

Re-pins FFmpegKit.Net.*.Android from 8.1.2.5 to 8.1.3.1, which moves Android to FFmpeg 8.1.3 and brings the SIGXCPU freeze fix. iOS (8.1.2.3) and Mac (8.1.2.2) stay on FFmpeg 8.1.2.

As the maintainer decided on 2026-10-30, the umbrella becomes 8.1.3.1 (FFmpegVersion 8.1.3, FFmpegKitBindingRevision 1), and the release note states the FFmpeg version per platform. Merging this PR is the release: it adds docs/release-notes/8.1.3.1.md.

API changes: none.

Worth checking in review

  • samples/FFmpegKit.Net.Sample: net9 Microsoft.Maui.Controls goes from 9.0.30 to 9.0.120. This is outside the F2 brief and has its own commit. Under version-policy rule 3 it goes in this change, because the net9.0-ios18.0 sample gate cannot pass without it. On 9.0.30 the app never draws a frame on an iOS 26 simulator: the main thread spins in UIKit layout under -[UITabBarController _updateLayoutForStatusBarAndInterfaceOrientation], before any page or FFmpeg code runs. The published 8.1.2.3 hangs the same way, so this PR did not cause it. CI only builds the sample, so it never showed up. The package's own net9 Controls floor stays at 9.0.30.
  • .github/copilot-instructions.md: the rule "a new FFmpeg line changes FFmpegVersion and all three pins" no longer matches the decision above, so it is rewritten.

Test report — FFmpegKit.Net 8.1.3.1-local.20261030153311

Toolchain: Xcode 26.0.1 for both bands, .NET SDK 9.0.320 and 10.0.403. Workloads: SDK 9 ios/macos 26.0.9783, android 35.0.105, maui 9.0.120; SDK 10 android 36.1.118, with net10.0-ios26.0/net10.0-macos26.0 built by the 26.0.11017 SDK packs. iOS simulator: iOS 26.0.1 (the CI line). Android emulator: API 35 arm64. net8 builds used an unprivileged pack root with the 8.0.33 Mono and AOT packs.

Gate Target TFM Result Evidence
Baseline origin/master, Full only both SDK bands PASS packed cleanly; the full 8-variant baseline was not run, because G1 passed
G1 pack all 8 variants, client + Maui net8, net9, net10 PASS 16 nupkgs + 16 snupkgs; every client nuspec pins Android [8.1.3.1], iOS [8.1.2.3], Mac [8.1.2.2]; licences MIT AND LGPL-3.0-only / MIT AND GPL-3.0-only as expected
G2 unit tests/FFmpegKit.Net.UnitTests net9.0 PASS 45/45
G2 package tests/FFmpegKit.Net.PackageTests net9.0 PASS 9/9
G3 Full Android emulator API 35 net10.0-android36.0 PASS FFMPEGKIT_E2E_DONE PASS passed=11 failed=0, 3 runs of 3; ffmpeg version n8.1.3
G3 Video Android emulator API 35 net10.0-android36.0 PASS FFMPEGKIT_E2E_DONE PASS passed=11 failed=0; ffmpeg version n8.1.3
G3 Full iOS simulator 26.0.1 net10.0-ios26.0 PASS 11 checks, FFMPEGKIT_E2E_DONE PASS; ffmpeg version n8.1.2
G3 Full iOS simulator 26.0.1 net9.0-ios18.0 PASS 11 checks, FFMPEGKIT_E2E_DONE PASS; ffmpeg version n8.1.2
G3 Full macOS host net10.0-macos26.0 PASS 11 checks, FFMPEGKIT_E2E_DONE PASS; ffmpeg version n8.1.2
G4 sample Android emulator API 35 net10.0-android36.0 PASS 3 rounds of resize, grayscale, audio: 9 of 9 Success in 0.1s! … (108,521 / 100,870 / 27,731 bytes), one PID, no ANR
G4 sample, forced GC Android emulator API 35 net10.0-android36.0 PASS same 9 conversions with GC.Collect() every second from a local test file: 104 collections, no freeze
G4 negative control Android emulator API 35, published 8.1.2.3 net10.0-android36.0 froze, as expected same forced-GC test, on Android binding 8.1.2.5 and FFmpeg n8.1.2: collections stop at #18, FFmpeg starts one second later, no result after 90 s
G4 sample Android emulator API 35 net9.0-android35.0 PASS 3 of 3 Success (extra run, because the pin changed)
G4 sample, before the pin fix iOS simulator 26.0.1 net9.0-ios18.0 FAIL app hangs before first frame; same on published 8.1.2.3, see above
G4 sample iOS simulator 26.0.1 net9.0-ios18.0 PASS this branch: Success in 0.1s! … (109,957 bytes), (104,435 bytes), Success in 0s! … (27,731 bytes)
G4 sample iOS simulator 26.0.1 net10.0-ios26.0 PASS extra run: probe 320x240, 3s, mpeg4, resize Success in 0.1s! … (109,957 bytes)
G4 regression iOS and macOS PASS iOS sample above against the published 8.1.2.3 binding; macOS by the host test, its only coverage
G6 PR CI all jobs net8, net10 PASS 14 jobs in run 41061377449: pack, validate, sample builds, Android emulator, iOS simulator and macOS host smoke tests, beta publish. Copilot review: no open issues
G7 consumer Android emulator API 35 net10.0-android PASS clean dotnet new maui outside the repo, FFmpegKit.Net.Full.Maui 8.1.3-beta.11.26 restored from nuget.org with Android 8.1.3.1: Success in 0s! (46,623 bytes), ffmpeg version n8.1.3, IFFmpegKit injected, 10 forced collections after FFmpeg, app alive
G7 consumer iOS simulator 27.0, Xcode 27.1 net10.0-ios (SDK iphonesimulator27.1) PASS same app, with iOS 8.1.2.3: Success in 0s! (49,001 bytes), ffmpeg version n8.1.2, 10 forced collections
Extra Android emulator API 35 net8.0-android34.0 PASS sample, 3 of 3 Success (CI only builds this head)
Extra iOS simulator 26.0.1 net8.0-ios18.0 FAIL, not a gate sample hangs before first frame with the same stack as net9 did. Controls 8.0.100 is the newest 8.0.x, so a pin cannot fix it. master has the same pin, and this PR does not change it

Not run locally: other variants on devices (Audio, FullGpl, Https, HttpsGpl, Min, MinGpl), which go through the same client code and were all run on the Android binding in sbokatuk/FFmpegKit.Android#23; net8 and net9 device tests on Android; any physical device. CI covers Video on net8 and net10.

The forced-GC test matters because the sample's conversions take 0.1 s and allocate little: in the plain run, the last garbage collection in the log came before the first conversion, so that run alone proves nothing about the freeze.

🤖 Generated with Claude Code

sbokatuk and others added 3 commits October 30, 2026 16:12
FFmpegKit.Android 8.1.3.1 moves Android to FFmpeg 8.1.3 and fixes a
freeze: FFmpeg's SIGXCPU handler left Mono's threads suspended after a
collection. Consumers of this umbrella only get that fix through the pin.

iOS and Mac stay on FFmpeg 8.1.2, so one FFmpegVersion can no longer
describe every platform. Per the maintainer's decision it now follows
the newest FFmpeg any pin ships, and the revision restarts at 1. Rewrite
the props comment and the agent rule that assumed all pins move
together, and refresh the version examples in the docs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With Microsoft.Maui.Controls 9.0.30 the sample never draws its first
frame on an iOS 26 simulator: the main thread spins in a UIKit layout
loop under Shell's tab bar controller, before any page or FFmpeg code
runs. The published 8.1.2.3 hangs the same way, so the gate on
net9.0-ios18.0 could not pass whatever this release changes. 9.0.120,
the newest 9.0.x, starts and converts. Only the sample moves; the
package's own net9 Controls floor stays at 9.0.30.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
States the FFmpeg version per platform, because Android (8.1.3) and iOS
and Mac (8.1.2) no longer share one, and carries the SIGXCPU freeze fix.
Merging this note is the release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 30, 2026 13:12

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

No active review issues remain for the Android binding update and related sample, versioning, and release-documentation changes.

No open issues 🎉

What changed in this PR

Updates the FFmpegKit.Net umbrella to 8.1.3.1, bringing Android’s FFmpeg 8.1.3 update and freeze fix through the binding dependency. iOS and macOS remain on FFmpeg 8.1.2, with no public API changes. The added release note triggers release on merge.

Changes:

  • Updates the exact Android binding pin and matching package-test expectation.
  • Raises the sample’s net9 MAUI Controls dependency to 9.0.120 to address the reported iOS 26 startup hang.
  • Documents independent platform versions and refreshes build examples and release notes.
File Description
tests/​FFmpegKit.Net.PackageTests/​Packages.cs Updates the expected Android binding version.
samples/​FFmpegKit.Net.Sample/​FFmpegKit.Net.Sample.csproj Raises net9 MAUI Controls and explains the workaround.
README.md Clarifies how package versions reflect differing platform FFmpeg versions.
docs/​release-notes/​8.1.3.1.md Adds platform versions, Android fixes and reported validation.
docs/​BUILD.md Refreshes package and device-test command examples.
Directory.Build.props Sets umbrella version 8.1.3.1 and the Android binding pin.
build/​BuildNugets.sh Updates usage comments, including the Mac pin example.
.github/​copilot-instructions.md Aligns versioning guidance and examples with independent platform updates.

Review effort: Balanced

@sbokatuk
sbokatuk merged commit d4934f2 into master Oct 30, 2026
15 checks passed
@sbokatuk
sbokatuk deleted the bump/android-8.1.3.1 branch October 30, 2026 14:34

This branch was successfully deployed

1 active deployment
nuget.org — fe387404 Deployed Oct 30, 2026 by sbokatuk via publish beta to nuget.org #26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update FFmpegKit.Net.Full.Android to 8.1.3.1

2 participants