足矣"/>
FFmpeg4.14 NDK编译教程一篇足矣
不想自己编译的 点这里下载即可
编译环境
ubuntu-16.04.6
ffmpeg-4.1.4
ndk-r14b
1.下载解压好文件后配置ndk环境
在配置ndk环境前执行以下命令
apt-get update
apt-get install yasm
apt-get install pkg-config
apt-get install make
apt-get install make
sudo apt-get install gcc
配置NDK环境
set NDK env
export NDK_HOME=/home/用户/ndk路径
export PATH= N D K H O M E : NDK_HOME: NDKHOME:PATH
source /etc/profile
2.打开FFmpeg的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)'
3.在FFmpeg文件中创建一个 build.sh 文件 编写文件的脚本
NDK 路径修改为自己的
#!/bin/bash
清空上次的编译
make clean
#填自己的NDK路径.
export NDK=/home/ffmpeg/ndk
function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \--prefix=$PREFIX \--enable-neon \--enable-hwaccels \--enable-gpl \--enable-postproc \--enable-shared \--enable-jni \--enable-mediacodec \--enable-decoder=h264_mediacodec \--disable-static \--disable-doc \--enable-ffmpeg \--disable-ffplay \--disable-ffprobe \--enable-avdevice \--disable-doc \--disable-symver \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv8-a
ARCH=arm64
CPU=armv8-a
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android#armv7-a
ARCH=arm
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android#x86
ARCH=x86
CPU=x86
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android#x86_64
ARCH=x86_64
CPU=x86-64
TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android
4.命令行切换到FFmpge目录下赋予脚本执行权限
chmod 777 build.sh
执行脚本进行编译
./build.sh
编译过程中遇到的错误
make install 时提示没有权限可以用sudo make install 即可
遇到的错误
error: request for member 's_addr' in something not a structure or unionmreqs.imr_multiaddr.s_addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;^
libavformat/udp.c:292:32: error: incompatible types when assigning to type '__be32' from type 'struct in_addr'mreqs.imr_interface= ((struct sockaddr_in *)local_addr)->sin_addr;^
libavformat/udp.c:294:32: error: request for member 's_addr' in something not a structure or unionmreqs.imr_interface.s_addr= INADDR_ANY;^
libavformat/udp.c:295:29: error: request for member 's_addr' in something not a structure or unionmreqs.imr_sourceaddr.s_addr = ((struct sockaddr_in *)&sources[i])->sin_addr.s_addr;
^
打开libavformat/udp.c 文件 注释掉 290行到295行这段代码
接下来耐心等待即可 啦啦啦
更多推荐
FFmpeg4.14 NDK编译教程一篇足矣
发布评论