Skip to content
 
 

Repository files navigation

FFmpegKit (community rebuild)

A community-maintained rebuild of arthenica/ffmpeg-kit for Android and iOS.

Table of contents

About

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 GPL licensing obligations, no GPL-licensed libraries (e.g. x264, x265, xvidcore, vid.stab) are enabled and no -gpl packages are published. Everything here is built under LGPL 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.

Usage

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.

iOS (CocoaPods)

# 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.

Android (Gradle)

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.

React Native

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-ffmpegkit
import { 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.

Packages

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, iconv is provided by the system, so libiconv listed above applies to the Android builds only.

Package size

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: .xcframework device slice (arm64). Your final app-download size after store compression/thinning will be smaller.

See more here: https://github.com/maitrungduc1410/ffmpeg-kit/releases

Android

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

iOS

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

Releasing

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 on main, or pin a specific build run to publish from.
  • source_repo — optional; owner/repo to 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 a CLONE_REPO_TOKEN secret — a PAT that can read that repo's Actions (a classic PAT with public_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 tag android-<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.

About

A community-maintained rebuild of arthenica/ffmpeg-kit for Android, iOS and React Native. 16KB page support

Topics

Resources

Code of conduct

Contributing

Stars

10 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages