A community-maintained rebuild of
arthenica/ffmpeg-kitfor Android and iOS.
The original ffmpeg-kit by Arthenica has been officially retired — the project is no longer maintained and all of its previously released prebuilt binaries are being removed from the package registries.
Because our applications still depend on it, this repository rebuilds and republishes the binaries so they remain installable.
A few important notes:
- No GPL builds. To avoid
GPLlicensing obligations, noGPL-licensed libraries (e.g.x264,x265,xvidcore,vid.stab) are enabled and no-gplpackages are published. Everything here is built underLGPL v3.0. - FFmpeg version. Currently built against FFmpeg 8.1. Earlier lines (7.1, 6.0) remain available as pinned / LTS releases.
- Platforms. Only Android and iOS are supported and published.
Replace min with whichever package (min, https, audio, video, full) you need.
For the full API (running commands, sessions, callbacks, FFprobe, etc.) see the per-platform guides.
# Podfile
pod 'ffmpeg-mobile-min', '~> 8.1'
# pod 'ffmpeg-mobile-https', '~> 8.1'
# pod 'ffmpeg-mobile-audio', '~> 8.1'
# pod 'ffmpeg-mobile-video', '~> 8.1'
# pod 'ffmpeg-mobile-full', '~> 8.1'See apple/README.md for the iOS API.
Published to Maven Central under the io.github.maitrungduc1410 group.
dependencies {
implementation 'io.github.maitrungduc1410:ffmpeg-kit-min:8.1.2'
// implementation 'io.github.maitrungduc1410:ffmpeg-kit-https:8.1.2'
// implementation 'io.github.maitrungduc1410:ffmpeg-kit-audio:8.1.2'
// implementation 'io.github.maitrungduc1410:ffmpeg-kit-video:8.1.2'
// implementation 'io.github.maitrungduc1410:ffmpeg-kit-full:8.1.2'
}See android/README.md for the Android API.
For React Native apps, use the @mtd1410/react-native-ffmpegkit package. It is built
for the New Architecture (TurboModule + Codegen) and wraps the same prebuilt binaries published here.
npm install @mtd1410/react-native-ffmpegkitimport { FFmpegKit, ReturnCode } from '@mtd1410/react-native-ffmpegkit';
FFmpegKit.execute('-i file1.mp4 -c:v mpeg4 file2.mp4').then(async (session) => {
const returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)) {
// SUCCESS
}
});See react-native/README.md for installation, selecting a package variant,
and the full JavaScript API usage.
Use the latest published version; the examples above may not reflect the most recent release.
There are five packages, each enabling a different set of external and system libraries. Pick the smallest one that includes the features you need.
| min | https | audio | video | full | |
|---|---|---|---|---|---|
| external libraries | - | openssl | lame libilbc libvorbis opencore-amr opus shine soxr speex twolame vo-amrwbenc |
dav1d fontconfig freetype fribidi kvazaar libass libiconv libtheora libvpx libwebp snappy zimg |
dav1d fontconfig freetype fribidi kvazaar lame libass libiconv libilbc libtheora libvorbis libvpx libwebp libxml2 opencore-amr openssl opus shine snappy soxr speex twolame vo-amrwbenc zimg |
| android system libraries | zlib MediaCodec |
||||
| ios system libraries | bzip2 AudioToolbox AVFoundation iconv VideoToolbox zlib |
||||
- On
iOS,iconvis provided by the system, solibiconvlisted above applies to theAndroidbuilds only.
Approximate size each variant adds to your app per platform and FFmpeg version. Pick the smallest variant that has the features you need. Numbers are uncompressed unless noted.
Measurement basis — Android: per-ABI native libs from the
.aar(arm64-v8a); iOS:.xcframeworkdevice slice (arm64). Your final app-download size after store compression/thinning will be smaller.
See more here: https://github.com/maitrungduc1410/ffmpeg-kit/releases
| Variant | v6.0.6 | v7.1.5 | v8.1.2 |
|---|---|---|---|
min |
13.4 MB | 14.3 MB | 14.7 MB |
https |
15.5 MB | 16.4 MB | 16.9 MB |
audio |
18.4 MB | 19.3 MB | 19.7 MB |
video |
21.6 MB | 22.5 MB | 23 MB |
full |
25.4 MB | 26.2 MB | 26.7 MB |
| Variant | v6.0.6 | v7.1.5 | v8.1.2 |
|---|---|---|---|
min |
68 MB | 72.8 MB | 75.2 MB |
https |
78.2 MB | 82.9 MB | 85.5 MB |
audio |
76.3 MB | 81 MB | 83.4 MB |
video |
91.9 MB | 96.4 MB | 98.8 MB |
full |
109 MB | 113 MB | 116 MB |
For maintainers. The platform builds run automatically on push (
android build scripts/ios build scripts) and upload their artifacts. Releasing is a separate, manual step that reuses those artifacts — nothing is rebuilt.
Run Actions → publish → Run workflow and set:
release_version— e.g.6.0.6(used for the release tags, the CocoaPods version, and the Maven version).publish_ios/publish_android— toggle either platform on/off.ios_build_run_id/android_build_run_id— optional; leave blank to use the latest successful build onmain, or pin a specific build run to publish from.source_repo— optional;owner/repoto pull the prebuilt artifacts from instead of this repo (e.g. a clone repo where CI runs the long builds, so the main repo only spends quota on publishing). Requires aCLONE_REPO_TOKENsecret — a PAT that can read that repo's Actions (a classic PAT withpublic_repo, or a fine-grained PAT created under the source repo's owner with Actions: Read). Leave blank to use this repo.
What it does:
- GitHub Releases — iOS xcframework zips on tag
ios-<version>(consumed by CocoaPods), Android.aars on tagandroid-<version>(direct-download mirror). - CocoaPods — pushes the five
ffmpeg-mobile-*podspecs to trunk. - Maven Central — publishes the five
io.github.maitrungduc1410:ffmpeg-kit-*artifacts.
Required repository secrets: COCOAPODS_TRUNK_TOKEN (iOS) and MAVEN_CENTRAL_USERNAME, MAVEN_CENTRAL_PASSWORD, GPG_SIGNING_KEY, GPG_SIGNING_KEY_ID, GPG_SIGNING_PASSWORD (Android). Optionally CLONE_REPO_TOKEN when source_repo is used.