CLI tool
xufuji456/FFmpegAndroid avatar
xufuji456/FFmpegAndroid

FFmpegAndroid wraps FFmpeg in four Android sample apps and explains itself in doc files

FFmpeg-based video cropping, watermarking, transcoding, encoding/decoding and GIF conversion; local FFmpeg push streaming with H264/RTMP live streaming; OpenGL filter effects and video capture. Includes an audio/video learning roadmap, knowledge summaries and streaming protocols.

5,897 stars1,368 forksCLicense varies

At a glance

What is it?
A C project on a Gradle skeleton with app/, Live/, NextPlayer/ and CameraFilter/ at the top level. Useful as a map of the FFmpeg, JNI, RTMP and OpenGL corners of Android, useless as something you can install.
Who is it for?
Adopt FFmpegAndroid if you want a worked map of the FFmpeg, JNI, RTMP and OpenGL corners of Android and you are willing to build the native library yourself for each ABI. Do not adopt it as a dependency: no released binary, no LICENSE file, no published coordinates.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • xufuji456/FFmpegAndroid5,897 ★ · +27
Star history
Repository2026-09-232026-11-14
xufuji456/FFmpegAndroid5.9k5.9k

27 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Four top-level apps sit on one Gradle skeleton

The top level lists .gitignore, build.gradle, gradle.properties, gradlew and settings.gradle, which is the ordinary Android module skeleton, and then four directory names that read like four separate demos: app/, Live/, NextPlayer/ and CameraFilter/. Nothing states how they relate, whether one depends on another, or whether four modules are declared in settings.gradle. The primary language is recorded as C, so the code worth reading is native rather than Kotlin or Java, and gradlew exists for the Android side of that code. engine/ is the one directory whose name points at where FFmpeg gets called from, yet its contents go undescribed, and extra/ and shell/ are equally unexplained. picture/ is likewise undescribed.

doc/ carries the explanation, README.md only carries the links

README.md is a link list. Eight of its links land inside doc/ on the master branch: FFmpeg_compile_shell.md for the build script, FFmpeg_command_line.md for command line use, FFmpeg_sourcecode.md for source analysis, JNI_develop_practice.md for the native bridge, multimedia_knowledge.md, player_framework.md, multimedia_protocol.md and multimedia_work.md. The single outside link is the official FFmpeg site at ffmpeg.org. That distribution matters when you are deciding whether to adopt anything here, because the substance is Markdown rather than a published interface. What you can take from this repository is knowledge and starting code. There is no API surface documented anywhere that another application could depend on.

code
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/FFmpeg_compile_shell.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/FFmpeg_command_line.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/FFmpeg_sourcecode.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/JNI_develop_practice.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/multimedia_knowledge.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/player_framework.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/multimedia_protocol.md
https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/multimedia_work.md

Read in README order, the first four cover compile, then command line, then source analysis, then JNI and NDK.

No release, no LICENSE file, and nothing to depend on

There are no GitHub releases, and the top level has no LICENSE file beside README.md, so the licensing terms are not stated anywhere in the tree. There is also no Maven or Gradle coordinate, no AAR, and no prebuilt binary in the listing. The name invites questions about apks and downloads, and the honest answer is that this repository answers none of them, because the tree holds sources and a build script rather than an artifact. Getting FFmpeg onto a phone means running the native build yourself from doc/FFmpeg_compile_shell.md, wiring the bridge described in doc/JNI_develop_practice.md, and choosing your own ABI set along the way. That is the real cost of entry, and it is why this reads as study notes rather than as a library you link from a build file.

Live/ promises RTMP and H264 push and then stops talking

The project credits itself with local push streaming plus real time live streaming over H264 and RTMP, and that one sentence is the whole of what is said about the Live/ directory. No push URL example, no bitrate or resolution table, no audio track configuration, no reconnect or drop handling, no sample server, and no note about which FFmpeg build options that path requires. The protocol paragraph above it reads as a syllabus rather than a design: RTP, RTMP, RTCP and RTSP as transport protocols, HLS and DASH as streaming application protocols, SDP, ICE, NAT and STUN for WebRTC, H264, HEVC and VVC as codecs, mp4 as the container, C11 and C20 as language standards. Read doc/multimedia_protocol.md before assuming any of it is wired into Live/.

CameraFilter/ is where OpenGL effects meet the capture path

The description pairs OpenGL filter effects with video capture, and CameraFilter/ is the directory that pairing points at. Not one shader, GL context version, surface type or filter list appears in the README, so the available effects cannot be enumerated from it, and there is no way to tell from the outside whether the filters are applied during preview, during recording, or afterwards on the encoded stream. Camera work on Android is precisely where the native side and the Java side have to meet, which makes doc/JNI_develop_practice.md, the README's JNI and NDK development link, the obvious place to start on that boundary. The remaining named jobs, cropping, watermarking, GIF conversion and transcoding, are attached to no directory in the listing at all, so which module implements them is something you answer by opening the code.

Four README headings have nothing underneath them

The file closes with four headings that carry no content: audio and video basics, advanced audio and video growth, open source audio and video libraries, and joining the group to learn FFmpeg. Whatever was meant to sit under them was never committed. That gap is not cosmetic, because those are the headings that would have said who the project is for and which libraries it covers. The work directions paragraph does admit it is one person's own summary of areas that include live streaming, short video, streaming backends, video and music players, audio and video algorithms, editing and image processing. Read the whole map as a private curriculum, and do not plan coverage against it.

Start at doc/FFmpeg_compile_shell.md, since nothing runs before the native library builds

The reading order the tree itself suggests begins with the compile script, because the Java side has nothing to call until FFmpeg exists for your ABI. After that comes doc/JNI_develop_practice.md for the bridge, then doc/FFmpeg_command_line.md for what the built binary can do, then doc/player_framework.md, which covers ijkplayer architecture and may not describe the NextPlayer/ directory at all. The last push on the default master branch was on 2026-10-26. What you can verify before touching any of it is the shape of the tree:

code
.gitignore
CameraFilter/
Live/
NextPlayer/
app/
build.gradle
doc/
engine/
extra/
gradle.properties
gradle/
gradlew
picture/
settings.gradle
shell/

Compare that against the doc list. Anything you expected to find, a build script under shell/, the native sources under engine/ or extra/, is your first hour of reading, and the README will not save you from it.

Editorial conclusion

Adopt FFmpegAndroid if you want a worked map of the FFmpeg, JNI, RTMP and OpenGL corners of Android and you are willing to build the native library yourself for each ABI. Do not adopt it as a dependency: no released binary, no LICENSE file, no published coordinates. Before you spend time on it, open doc/FFmpeg_compile_shell.md and confirm the script still builds the FFmpeg version your NDK can compile.

Frequently asked questions

Can I run FFmpeg on Android with this project, or do I need a prebuilt APK?

This repository is the Android side of that question, written in C and credited with cropping, watermarking, transcoding, encoding and decoding, GIF conversion, plus local and RTMP push. There is no release and no prebuilt binary in the listing, so the native library has to be built by you.

How do I install FFmpegAndroid on a device?

The README has no install steps. It points at doc/FFmpeg_compile_shell.md for the FFmpeg build script and doc/JNI_develop_practice.md for the JNI and NDK work, so the sequence is a native build per ABI followed by an app build rather than a download. No dependency coordinates are published, so nothing here plugs into another project as a library.

How do I use FFmpegAndroid once it builds?

doc/FFmpeg_command_line.md covers command line use, doc/FFmpeg_sourcecode.md walks the source, and doc/player_framework.md describes ijkplayer architecture. The sample apps sit in app/, Live/, NextPlayer/ and CameraFilter/. Which of them implements cropping, watermarking or GIF conversion is not stated.

What is FFmpegAndroid and why does it wrap FFmpeg?

The repository is an FFmpeg based Android project whose stated jobs are video cropping, watermarking, transcoding, encoding and decoding, GIF conversion, H264 and RTMP live push, and OpenGL filter effects and video capture. Alongside the code it carries a personal study path over multimedia protocols, formats and work directions.

What is an alternative to FFmpegAndroid on Android?

Nothing is named as a substitute. The README points outward to the official FFmpeg documentation and inward to ijkplayer architecture notes, and doc/multimedia_work.md lists work areas rather than projects. Any comparison has to start from the fact that this tree ships no released binary and no published coordinate.

Official sources

  1. Issues
  2. README
  3. xufuji456/FFmpegAndroid on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/xufuji456-ffmpegandroid.svg)](https://hysenlabs.com/projects/xufuji456-ffmpegandroid)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/xufuji456-ffmpegandroid.svg)](https://hysenlabs.com/projects/xufuji456-ffmpegandroid)

Was this useful?