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.so
とlibcrypto.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.