This repository contains script(s) to build ffmpeg for android with RTMP (and OpenSSL) support.
- Install the Android NDK (tested with version r10).
- Ensure that cURL is installed.
- Ensure that pkg-config is installed.
- Clone this repository and
cdinto its directory.
- Look in
build/distfor the resulting libraries and executables.
- Look in
build/build.logif something goes wrong.
$ git clone email@example.com:cine-io/android-ffmpeg-with-rtmp.git $ cd android-ffmpeg-with-rtmp $ ./build.sh
The first time you run the script, it will try to find the location where
you've installed the NDK. It will also try to auto-detect your operating
system and architecture. This process might take a minute or two, so the
information will be saved into a configuration file called
.build-config.sh which will be used on subsequent executions of
The script is meant to be idempotent. However, should you want to start over from scratch, it's a simple matter of:
$ rm -rf src build .build-config.sh $ ./build.sh
ffmpeg with an Android app you will need to deploy the binaries along
with the libraries. Here's a listing of the
. ├── bin │ ├── ffmpeg │ ├── openssl │ └── ssltest └── lib ├── libavcodec-56.so ├── libavdevice-56.so ├── libavfilter-5.so ├── libavformat-56.so ├── libavutil-54.so ├── libcrypto.so ├── librtmp-1.so ├── libssl.so ├── libswresample-1.so └── libswscale-3.so
A simple way to deploy the binaries would be to archive (e.g. zip) these directories and copy the archive in a res/raw directory within the Android project. Then at runtime, unpack the archive into a directory accessible to the app and set the appropriate permissions, e.g. chmod 750 -R directory-name.
In order for the Android app to use the libraries the LD_LIBRARY_PATH must be set to the location where the libraries reside. For example:
// Change the permissions Runtime.getRuntime().exec("chmod -R 0750 "+ abspath).waitFor(); //... ProcessBuilder processBuilder = new ProcessBuilder(cmd); final Map<String, String> environment = processBuilder.environment(); environment.put("LD_LIBRARY_PATH", context.getDir("lib", 0).getAbsolutePath()); Process process = processBuilder.start(); //...