基于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)
基于android的ffmpeg的编译
基于android的ffmpeg的编译

上一篇:How to disable daily upgrade and clean on Ubuntu 16.04


下一篇:Ubuntu16.04静态编译OpenSSL与libcurl