FFmpeg 编译简单上手
转载注明出处lennasu
前言:
关于音视频开发我们需要准备的知识就是要先学习ffmpeg框架的学习,对于Android开发者而言,我们需要把FFmpeg源码编译成.so文件,导入到我们的工程中,才能引用到框架中的方法对音视频进行处理。在这方面的专家雷大佬中国传媒大学博士,大家可以访问他的博客,只可惜,天怒英才,才26岁的大佬就离开了我们。在这里致敬我们心中的大神,愿天堂没有代码。
准备资料
1.准备环境(linux,mac)建议不要在windows上编译,很麻烦,还需要去搭建环境,可以安装虚拟机编译。以下选择用mac系统进行编译。
2.下载ffmpeg源码,我编译的是4.1.3版本的ffmpeg
3.下载ndk,建议不需要下载最新版的ndk . 本文使用的r17c版本
修改ffmpeg配置文件
1.修改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)'
保存好就ok
ndk 环境配置
打开终端使用命令:open ~/.bash_profile 即可打开环境变量配置,到这一步应该没问题。
编写脚本文件
脚本的作用就是把ffmpeg源码打包成我们需要的.so文件,供我们的Android项目调用。
新建一个在ffmpeg文件夹下新建android_build.sh文件。
#!/bin/bash
ADDI_CFLAGS="-marm"
API=19
PLATFORM=arm-linux-androideabi
CPU=armv7-a
#自己本地的ndk路径。
NDK=/Users/deqiangsu/develop/ndk/android-ndk-r17c
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64
#自己指定一个输出目录,用来放生成的文件的。
OUTPUT=/Users/deqiangsu/develop/ffmpeg/ffmpeg-3.3.9
function build
{
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build
复制上面的脚本代码到我们新建的文件中,打开终端,到ffmpeg文件下使用命令就可以进行编译
命令: ./android_build.sh