You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Javernaut 22e16fdfcb Passing desired ABIs as an argument 5 years ago
images README.md update 5 years ago
scripts Passing desired ABIs as an argument 5 years ago
tools/docker Docker integration 5 years ago
.gitignore Printing stats about text relocations presence 5 years ago
.travis.yml Using 18 as the API level to build libaom with encoder 5 years ago
README.md Docker integration 5 years ago
ffmpeg-android-maker.sh Passing desired ABIs as an argument 5 years ago

README.md

ffmpeg-android-maker

Build Status Android Weekly #378 Android Weekly #396

Here is a script that downloads the source code of FFmpeg library and assembles it for Android. The script produces shared libraries (*.so files) as well as header files (*.h files). The output structure is represented in the image.

The script also produces ffmpeg and ffprobe executables that can be used in Android's terminal directly or can even be embedded into an Android app. They can be found in build directory after the successful build.

The main focus of ffmpeg-android-maker is to prepare shared libraries for seamless integration into an Android project. The script prepares the output directory that is meant to be used. And it's not the only thing this project does.

By default this script downloads and builds the FFmpeg 4.2.2, but the version can be overridden.

The details of how this script is implemented are described in this series of posts:

The WIKI contains a lot of useful information.

Customization

The actual content of output directory depends on how the FFmpeg was configured before assembling. The master branch of ffmpeg-android-maker builds 'vanilla' version of FFmpeg. This means all default components and shared libraries are built (according to the image).

The what-the-codec branch contains certain customizations in build scripts of FFmpeg and certain external libraries. These customizations are meant to be an example of how this project can be tuned to obtain the only functionality that is actually needed. What is actually customized can be seen here.

The WhatTheCodec Android app uses only a subset of FFmpeg's functionality, so the redundant parts are not even compiled. This gives much smaller output binaries.

Supported Android ABIs

  • armeabi-v7a (with NEON)
  • arm64-v8a
  • x86
  • x86_64

Supported host OS

On macOS or Linux just execute the ffmpeg-android-maker.sh script in terminal. Please follow the instructions in Requirements section.

It is also possible to execute this script on a Windows machine with MSYS2. You also need to install specific packages to it: make, git, diffutils and tar. The script supports both 32-bit and 64-bit versions of Windows. Also see Prerequisites section for necessary software.

Since v2.0.0 the MSYS2 support is temporary absent.

Since v2.1.1 the Windows support is done with Docker tool. Check this WIKI page for more info.

Requirements

The script expects to use at least Android NDK r19 (both r20 and r21 also work ok).

Before the script is executed you have to define two environment variables:

  • ANDROID_SDK_HOME - path to your Android SDK
  • ANDROID_NDK_HOME - path to your Android NDK

Certain external libraries require additional software to be installed:

  • libaom requires the 'cmake;3.10.2.4988404' package to be installed via Android SDK.
  • For libdav1d building you also need to install ninja and meson tools.

Note that if you don't need these external libraries then you also don't need to install the additional software. These external libraries are not built by default.

Features

Add an arbitrary external library that FFMpeg supports to the building process. Just specify how the source code needs to be downloaded and how to perform the build operation. More about this is here.

Setting your own FFmpeg version and origin. You can actually override the version of FFmpeg used by the script. See details here.

Test your script in a cloud. This repository has CI integration and you can use it too for your own configurations. See details here.

Text relocations monitoring. After an assembling is finished you can look into stats/text-relocations.txt file. This file lists all *.so files that were built and reports if any of them has text relocations. If you don't see any mentioning of 'TEXTREL' in the file, you are good. Otherwise, you will see exact binaries that have this problem. The Travis CI build will automatically fail if text relocations occur.