概要
FFmpeg は、非常に強力なオーディオおよびビデオ処理ツールのセットです。オーディオおよびビデオの分野では間違いなくベテランです。FFmpeh を中心に、オーディオおよびビデオ コーデック、トリミング、スプライシングなどの操作を実行できます。今日のトピックは、NDK を使用してクロスコンパイルを教え、Android で使用するための so ファイルを生成することです。
私のコンパイル環境:
- FFmpeg v3.0.11 (以前に最新バージョン 3.3.4 をテストしましたが、コンパイルに失敗しました)
- マックOS
- NDK アンドロイド-ndk-r14b
- Androidスタジオ3.1
FFmpegのソースコードをダウンロードする
FFmpeg 公式 Web サイトのダウンロード: www.ffmpeg.org/download.ht…
Git を使用してgit clone git.ffmpeg.org/ffmpeg.git ffmpegをダウンロードすることもできます
配置脚本
デフォルトでコンパイルされる so ライブラリのバージョン番号は .so 以降であり、Android はそれを認識できないため、configure ファイルを変更する必要があります
sublime を使用して構成を開きます (約 3305 行)
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='?(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
上記の行を次のように直接変更します。
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
build_android.shを構成する
このファイルは FFmpeg ルート ディレクトリに手動で作成する必要があり、新しい .sh ファイルが sublime で直接作成されます。インターネット上には多くのスクリプトがあり、そのほとんどは直接使用できますが、NDK ディレクトリの変更には注意してください。以下に、参考のために変更されたスクリプトを提供します
# ndk环境
export NDK=/Users/CH/Learn/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-14/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CPU=armv7-a
# 要保存动态库的目录,这里保存在源码根目录下的android/armv7-a
export PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
function build_android
{
./configure
--target-os=linux
--prefix=$PREFIX \
--enable-cross-compile \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
# 不确定自己上面的目录或者环境有没有错误时
# 可以先注释一下下面两个命令
# make
# make install
}
build_android
スクリプトを実行する
スクリプトのルート ディレクトリを入力します。スクリプトを初めて実行する場合は、次のように権限が不十分であることを確認するメッセージが表示される場合があります。
アクセス拒否
以下に権限を付与します。
chmod 777 build_android.sh
そして再実行してください
./build_android.sh
ここで、スクリプトファイルの環境設定が正常であれば、警告が表示されますが、無視して実行を続けます。
make
約 15 分後、実行が終了します。ルート ディレクトリに設定した出力ディレクトリの下に、次に示すように .so ファイルとヘッダー ファイルの 2 つのフォルダーが表示されます。
ヒント
1回のコンパイルに10分ほどかかるため、./build_androidを実行して構成に問題がないことを確認してからmake、makeinstallを実行してみてください。必ず環境を確認し、ディレクトリに問題がなければmakeを実行してください。
質問
1. ./build_android.sh を実行すると、次のエラーが報告されます:
nasm/yasm が見つからないか、古すぎます。機能不全のビルドには --disable-x86asm を使用してください。
これは、アセンブリ ツール yasm をインストールして
実行していないことを意味します。端末上で直接
brew install yasm
インストールの準備
2. 出力ディレクトリに報告されるエラーはおおよそ次のとおりです
そのようなファイルまたはディレクトリはありません: エラー 127
これは、出力ディレクトリが見つからないことを意味します。システムの下に出力ディレクトリを構築しないようにしてください。もう 1 つのポイントは、出力ディレクトリを手動で読み取りおよび書き込みに設定するのが最善であるということです (ただし、すでに読み取りおよび書き込みが可能になっている可能性もあります~)。
3. FFpmeg の新しいバージョンはコンパイルに失敗します
現在、最新バージョン 3.4.2 はコンパイル プロセス中に動作しません。現在 3.0.11 を使用しています。
4. androidstudio でダウンロードした ndk は使用しないことをお勧めします
公式 Web サイトにアクセスして、ndk を手動でダウンロードします (私は android-ndk-r14b を使用しています)
。developer.android.google.cn/ndk /downloa…概要
コンパイルプロセス中は辛抱強く我慢する必要があります~特に、C や Linux を知らない私のような人は、ただ空のあらゆる種類の Google を眺めているだけです。次の記事では、so パッケージを Android に統合する方法について説明します。
元の クロスコンパイル - Mac 環境は NDK を使用して FFmpeg をコンパイルします - プログラマーが求めた
★記事末尾の名刺では、オーディオ・ビデオ開発学習教材(FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs)やオーディオ・ビデオ学習ロードマップ等を無料で受け取ることができます。
下記参照!