ffmpegのソースコードは、適用可能なAndroidプラットフォームライブラリでコンパイルされました

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/YxiaoqiR/article/details/102756536

、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

https://blog.csdn.net/qq_34902522/article/details/87879145

http://alientechlab.com/how-to-build-ffmpeg-for-android/

おすすめ

転載: blog.csdn.net/YxiaoqiR/article/details/102756536