LinuxでAndroid用FFmpegをソースからビルドする

このページでは、Android用のFFmpegの設定とビルド方法について説明します。Android用のコンパイルはクロスコンパイルであり、ホストシステムとしてLinuxを使用することを前提としています。必要な手順は以下の通りです:

  • FFmpegのソースコードを入手する。
  • 必要な依存関係をインストールする。
  • コマンドラインからFFmpegを設定する。
  • 開発用ライブラリをビルドする。

FFmpegソースコードの入手

FFmpegのソースコードは以下の方法で入手できます:

  • FFmpegのダウンロードページからダウンロードする。
  • gitからクローンする。例えば、このコマンドはFFmpegソースのバージョン7.1.1を~/ffmpeg にクローンします。
    git clone --branch n7.1.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg

Qt Multimedia のメインページに記載されているのと同じ FFmpeg バージョンを使用することをお勧めします。

以下の段落では、FFmpeg のソースコードを~/ffmpeg の下に保存することを前提としています。

前提条件

FFmpeg をビルドするには、以下のツールとパッケージが必要です:

  • Yasm
  • 選択したセキュリティバックエンド用の開発者パッケージ(以下を参照)。

また、Android NDK、SDK、JDKがインストールされ、設定されている必要があります。これらのツールのセットアップ方法については、「Getting Started with Qt for Android」を参照してください。

パッケージのインストール

必要なパッケージ(Yasm for FFmpeg を含む)をインストールするには、以下を実行します:

apt-get install yasm

さらに、セキュリティバックエンドを有効にする場合は、対応する開発者パッケージが必要です:

apt-get install libssl-dev

その他のバックエンドについては、関連するパッケージをインストールしてください:

  • OpenSSLの場合:libssl-dev
  • GnuTLSの場合:libgnutls-dev.
  • LibreSSL (libtls)の場合:libtls-dev.
  • MbedTLSの場合:libmbedtls-dev.

環境変数を設定する

この部分は厳密には必要ではありませんが、configureコマンドをすっきり短くするのに役立ちます。

以下のコマンドは、Andorid SDKが~/Android/sdk 、Android NDKのバージョンが26.1.10909125であると仮定しています。

export ANDROID_NDK_ROOT=~/Android/sdk/ndk/26.1.10909125

Qt for Android入門に記載されているNDKバージョンと同じものを使用することを推奨します。

ビルドするアーキテクチャはターゲットデバイスによって異なります:

  • aarch64 (ARM64-v8a):ほとんどの Android デバイス(64 ビット)で使用されています。
  • armv7 (armeabi-v7a):古い32ビットARMデバイス用。
  • x86:主にIntelプロセッサ上で動作するAndroidエミュレータ用。
  • x86_64:64ビットIntelベースのエミュレータまたは専用デバイス用。

アーキテクチャ固有の変数を設定します:

  • aarch64
    export ARCH=aarch64
    export TOOLCHAIN_ARCH=aarch64-linux-android
    export CPU=armv8-a
  • armv7
    export ARCH=armv7
    export TOOLCHAIN_ARCH=armv7a-linux-androideabi
    export CPU=armv7-a
  • x86
    export ARCH=x86
    export TOOLCHAIN_ARCH=i686-linux-android
    export CPU=i686
  • x86_64
    export ARCH=x86_64
    export TOOLCHAIN_ARCH=x86_64-linux-android
    export CPU=x86-64

FFmpegの設定とビルド

~/ffmpeg ディレクトリの中にbuild-android ディレクトリを作成し、そこに移動する:

mkdir ~/ffmpeg/build-android
cd ~/ffmpeg/build-android

FFmpegを設定するには、以下を実行します:

../configure --prefix=../install-android --disable-doc --enable-network --enable-shared \
    --host-os=linux-x86_64 --target-os=android \
    --enable-cross-compile --arch=${ARCH} --cpu=${CPU} \
    --enable-jni --enable-mediacodec \
    --sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
    --sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ \
    --cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \
    --cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \
    --strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip

--prefix 引数は、ビルド後にFFmpeg開発ライブラリがインストールされるパスを指定します。ドキュメントは必要ありませんが、ネットワーク機能は有効にしてください。FFmpegを静的ライブラリとしてビルドするには、--enable-shared オプションを省略します。

FFmpegをセキュリティバックエンドでビルドする場合、4つのオプションから選択できます(Linux用にビルドする場合と同じです)が、今のところOpenSSLだけがQtMultimedia メンテナによってテストされています。適切なオプションを選び、FFmpegの設定中に追加してください:

--enable-openssl # For OpenSSL
--enable-gnutls # For GnuTLS
--enable-libtls # For LibreSSL (libtls)
--enable-mbedtls # For MbedTLS

OpenSSLを使う場合は、FFmpegの設定中に以下のオプションを追加してください。(<ANDROID_OPENSSL_INCLUDE_DIR><ANDROID_OPENSSL_LIBS_DIR> を実際のパスに置き換えてください):

--extra-cflags=-I<ANDROID_OPENSSL_INCLUDE_DIR> --extra-ldflags=-L<ANDROID_OPENSSL_LIBS_DIR>

セキュリティバックエンドが含まれている場合、ターゲットプラットフォームに正しいライブラリがインストールされていることを確認するか、スタブを使用して、その配信について自分で注意する必要があります。リンクされる OpenSSL ライブラリは、libssl.solibcrypto.so という名前にする必要があります。バージョン管理用の接尾辞はつけません。ユーザーは、ライブラリがFFmpegがコンパイルされたOpenSSLヘッダーと同じABIバージョンであることを保証する必要があります。詳細については、Android用のOpenSSLサポートの追加を参照してください。

configure コマンドが終了したら、make コマンドを使用して FFmpeg をビルドしてインストールします。

make -j install

ビルドがエラーなしで完了すると、FFmpeg開発ライブラリが~/ffmpeg/install-android ディレクトリにインストールされます。Qt Multimedia をビルドした場合、このパスはQt Multimedia を設定する際に使用するFFMPEG_DIR 変数に格納されます。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.