、Linux環境コンパイラ(ubuntu1604_64)
1)ソースFFmpegのダウンロード
https://ffmpeg.org/download.html
最新バージョン、ffmpegの-xxxtar.gzをダウンロードして、コマンドを抽出します。tar -xjvf ffmpegの-xxxtar.bz2
Gitリポジトリまたはプルダウン、gitのクローン "https://git.ffmpeg.org/ffmpeg.git" ffmpegの
2)NDKをダウンロード
https://developer.android.google.cn/ndk/downloads/index.html
あなたは、クリックしてダウンロードすることができ、端末を指定できますwgetの https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zipを
結局uzipコマンドでカレントディレクトリに抽出します。
このようr14bの少し下に下位バージョンであってもよいが、コンパイル時に問題があることが、私は時間をコンパイル17cとをダウンロードし、まだ問題を抱えて、後でそれらを一覧表示されます。
その後知りません、どのように編み物の最新試していません。
PS:管理を容易にするために、私は、ディレクトリを抽出するには良い場所です、例えば:
LS〜/ ffmpegの
アンドロイドNDK-r17c-ffmpegの-4.2.1
3)設定を変更
目的は、利用可能なので、Androidの動的ライブラリをコンパイルすることです。
1. ffmpegのディレクトリに移動します
CD〜/ ffmpegの/ ffmpegの-4.2.1 /
2. [変更のconfigure
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)'
このようにして生成され、動的ライブラリは、Androidプラットフォームを命名識別することができます。
3.スクリプトを作成しますbuild_android.sh
configureでは同じレベルのディレクトリには、スクリプトbuild_android.shを作成し、次の行を追加します。
#!/bin/bash
set -x
API=28
NDK=D:/NDK/android-ndk-r17c
SYSROOT=$NDK/platforms/android-$API/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function function_one
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-ffmpeg \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$NDK/sysroot/usr/include/arm-linux-androideabi -isysroot $NDK/sysroot -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" \
--enable-neon
make clean all
make
make install
}
CPU=armv7-a
PREFIX=$(pwd)/android/$CPU
function_one
設定が完了したら、777にbuild_android.sh権限を変更します。chmod 777 build_android.shを
次に、スクリプトを実行しbuild_android.sh:./build_android.sh
二、窓コンパイラ環境(win10)
1)ソースFFmpegのダウンロード
https://ffmpeg.org/download.html
2)NDKをダウンロード
https://developer.android.google.cn/ndk/downloads/index.html
3)MinGWのダウンロード
https://sourceforge.net/projects/mingw/files/
FFmpegのDNKと、ダウンロードやLinuxのような、MinGWのは、CMDを交換することです。あなたは、Linux環境のようなコマンドを実行することができます。
ダウンロードした後、それを解凍し、同じディレクトリに、例えば、私はDドライブに入れています。
4)システム構成パラメータ環境
マイコンピュータ - プロパティ - [システムの詳細設定 - 環境変数 - システム変数は--pathは、次のパスを追加します。
D:MinGWの\を\ bin
D:MinGWのを\ \ MSYS \ 1.0 \ binに
D:\ NDK \アンドロイド - NDK-r17c
すべての道を戻ります。勝利+ R、入力cmdは、ターミナルリコールを入力します。NDKビルドおよびコンフィギュレーションのgcc -v成功したことを確認するために入力されています。
5)設定を変更
Linuxのような1とffmpegのディレクトリを入力し、変更し、新しいbuild_android.shを設定
2.ディレクトリDに移動します:MinGWの\ \ MSYS \ 1.0、msys.batを開くにはダブルクリックして、あなたに、bashのLinuxのようなコマンドを実行することができます。
CDの/d/ffmpeg/ffmpeg-4.2.1
chmodの777 build_android.sh
./build_android.sh
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑上記のソースファイルと設定をダウンロードすることです↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓次は問題のコンパイル時に発生したソリューションです↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓
1.ヒントtype.hが見つかりません
/NDK/android-ndk-r17c/sysroot/usr/include/linux/types.h:21:23: fatal error: asm/types.h: No such file or directory
#include <asm/types.h>
--extra-CFLAGSでbuild_android.shにチェック=なし$ NDK / SYSROOT -isysroot追加はありません
2.変数名B0の問題をヒント
libavcodec/aaccoder.c: In function 'search_for_ms':
libavcodec/aaccoder.c:803:25: error: expected identifier or '(' before numeric constant
int B0 = 0, B1 = 0;
^
B0 libavcodecの/ aaccoder.cはB0に変更されているすべての変数
3.ヒントy0000000「宣言されていません
libavcodec/hevc_mvs.c: In function 'derive_spatial_merge_candidates':
libavcodec/hevc_mvs.c:208:15: error: 'y0000000' undeclared (first use in this function)
((y ## v) >> s->ps.sps->log2_min_pu_size))
YB0にB0のB0、XB0にXB0、YB0へ/ hevc_mvs.cファイルlibavcodecのすべての変数
4.変数名B0の問題をヒント
libavcodec/opus_pvq.c: In function 'quant_band_template':
libavcodec/opus_pvq.c:498:9: error: expected identifier or '(' before numeric constant
int B0 = blocks;
libavcodecの/ opus_pvq.cすべての変数は、B0のB0を変更しました
これらの基本的なエラーは、オーバー編のffmpeg-4.2.1アンドロイド\のARMv7-\ libに\でライブラリをプログラムした後、それは正常に経験することができます。
参考:
https://blog.csdn.net/qq_38261174/article/details/83210458