macOSでAndroid用FFmpegをソースからビルドする
このページではAndroid用のFFmpegの設定とビルド方法を説明します。Android用のコンパイルはクロスコンパイルであり、ホストシステムとしてmacOSを使用することを前提としています。必要な手順は以下の通りです:
- 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 をビルドするには、以下のツールとパッケージが必要です:
- Homebrew
- Homebrewパッケージ(yasm)。
また、Android NDK、SDK、JDKのインストールと設定も必要です。これらのツールのセットアップ方法については、「Getting Started with Qt for Android」を参照してください。
Homebrewのインストール
Homebrewをインストールするには、以下を実行してください:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Homebrewパッケージのインストール
HomebrewパッケージYasmをインストールするには、以下を実行します:
brew install yasm
環境変数の設定
この部分は厳密には必要ありませんが、configureコマンドをもう少しすっきり短くするのに役立ちます。
以下のコマンドは、Andorid SDKが~/Library/Android/sdk
、Android NDKのバージョンが26.1.10909125であると仮定しています。
export ANDROID_NDK_ROOT=~/Library/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=darwin-x86_64 --target-os=android \ --enable-cross-compile --arch=${ARCH} --cpu=${CPU} \ --enable-jni --enable-mediacodec \ --sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot \ --sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/ \ --cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \ --cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \ --strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-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.