ffmpeg是c语言的库,主要作用是对音视频进行编解码等操作。是android进阶必须要掌握的一门技术。通过使用ffmpeg可以提高对android ndk的认识和熟练度。第一步当然就是编译ffmpeg编译为android可以使用的.so文件。
第一步:下载ffmpeg
第二步:修改config文件,这个文件在下载的ffmpeg文件下。
将以下内容
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)'
替换的原因是编译后的文件会在.so后面追加动态库的版本号,而这样的文件android是不能识别的。
第三步:下载好ndk,本次编译时基于ffmpeg-3.1.1 ndk-r10e的版本。
第四步:配置.sh脚本文件,以下亲测可以编译成功。
#!/bin/bash
#ndk路径
NDK=/Users/zhoukai/Documents/android-ndk-r10e
#版本号
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one(){
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
make
make install
等待…
最后在ffmpeg文件下回有一个android文件夹,android中有一个include文件夹里面存放的是头文件,lib下存放的就是所需要的.so库了。
最后感谢各路网站资料的支持!