1. 程式人生 > 其它 >基於android的ffmpeg的編譯

基於android的ffmpeg的編譯

我首先百度了一下 然後參考 https://www.jianshu.com/p/feab970fd74c

#你自己的NDK路徑。
export ANDROID_NDK=/home/cc/data/cc/Android/Sdk/ndk/23.0.7344513
# 設定你的android平臺編譯器的版本
# export SYSROOT=$ANDROID_NDK/platforms/android-14/arch-arm/
export SYSROOT=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
#編譯使用的toolchain
export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64
export CPU=aarch64
# export CPU=armv8-a
export ANDROID_NATIVE_API_LEVEL=android21
# 這個是輸出的路徑
export PREFIX=$(pwd)/android/$CPU
# export ADDI_CFLAGS="-marm"
export ADDI_CFLAGS=""
./configure --target-os=linux \
--prefix=$PREFIX --arch=$CPU \
--disable-doc \
--enable-shared \
--disable-static \
--disable-x86asm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/$CPU-linux-$ANDROID_NATIVE_API_LEVEL- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"

make clean
make 
make install

遇到了錯誤

libavdevice/v4l2.c:135:9: error: assigning to 'int (*)(int, unsigned long, ...)' from incompatible type '<overloaded function type>'
        SET_WRAPPERS();

參考 https://github.com/tanersener/mobile-ffmpeg/issues/48

#你自己的NDK路徑。
export ANDROID_NDK=/home/cc/data/cc/Android/Sdk/ndk/23.0.7344513
# 設定你的android平臺編譯器的版本
# export SYSROOT=$ANDROID_NDK/platforms/android-14/arch-arm/
export SYSROOT=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
#編譯使用的toolchain
export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64
export CPU=aarch64
# export CPU=armv8-a
export ANDROID_NATIVE_API_LEVEL=android21
# 這個是輸出的路徑
export PREFIX=$(pwd)/android/$CPU
# export ADDI_CFLAGS="-marm"
export ADDI_CFLAGS="-DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"
./configure --target-os=linux \
--prefix=$PREFIX --arch=$CPU \
--disable-doc \
--enable-shared \
--disable-static \
--disable-x86asm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/$CPU-linux-$ANDROID_NATIVE_API_LEVEL- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
--disable-indev=v4l2

錯誤

libavcodec/hevc_mvs.c:368:23: error: use of undeclared identifier 'y0000000'

參考 https://www.jianshu.com/p/484db5ec733f
解決就是替換 libavcodec/aaccoder.c 中的 B0 成 其他名字(我改成了 aaccoder_B0)