在Mac上编译FFMpeg并添加x264支持
之前写过一篇在Android Studio中使用cmake编译FFmpeg,主要是在为了在android中使用FFmpeg进行视频的编解码,在使用过程中,在编码h264是发生错误,查找原因是没有添加x264支持。现在编译能够进行h264编译的FFmpeg。
前期准备
1.可以在x264官网下载,也可以直接git clone http://git.videolan.org/git/x264.git x264
,我采用第二种
2.FFmpeg官网下载3.3.6版本,我使用3.3.3和3.4.2和git最新版本均有一些问题。
3.x264编译前修改一下configure文件:
找到所有的libx264.so.$API
修改为libx264-$API.so
(若不修改,生成的动态库为libx264.so.152,android无法识别),直接去掉.$API
我这儿会报错,是因为生成libx264.so
链接文件,导致冲突
4.修改FFmpeg的configure,由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android不能识别,所以需要修改。在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)'
编写编译脚本
1.x264的shell脚本:build_x264.sh
#!/bin/sh
NDK=/Users/zhangzhian/Documents/android-sdk-macosx/ndk-bundle
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$SYSROOT \
--host=arm-linux \
--enable-pic \
--enable-shared \
--enable-static \
--disable-cli
make
make install
}
CPU=arm
PREFIX=/usr/local
build_one
前面的NDK,SYSROOT,TOOLCHAIN替换为自己的路径,PREFIX为输出的路径
注意\后面不能有空格
放到x264的目录下
2.ffmpeg的shell脚本:build_android.sh
#!/bin/sh
NDK=/Users/zhangzhian/Documents/android-sdk-macosx/ndk-bundle
SYSROOT=$NDK/platforms/android-21/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-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--enable-gpl \
--enable-libx264 \
--enable-protocols \
--enable-muxer=mp4 \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -I/usr/local/include $ADDI_CFLAGS" \
--extra-ldflags="-L/usr/local/lib $ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=/usr/local
ADDI_CFLAGS="-marm"
build_one
前面的NDK,SYSROOT,TOOLCHAIN替换为自己的路径,PREFIX为输出的路径
–extra-cflags和–extra-ldflags中的-I/usr/local/include -L/usr/local/lib是x264的输出路径
放到FFmpeg的目录下
编译
1.x264
移动到x264目录下
添加可执行权限:sudo chmod +x build_x264.sh
开始执行./build_x264.sh
最后一步可能出现权限错误,然后sudo make install
,然后输入密码,即可。
编译成功后切换到 /usr/local目录下会看到include 和lib两个文件夹,为输出对应文件夹
2.FFmpeg
移动到FFmpeg目录下
添加可执行权限:sudo chmod +x build_android.sh
开始执行./build_android.sh
最后一步可能出现权限错误,然后sudo make install
,然后输入密码,即可。
编译成功后切换到 /usr/local目录中的include 和lib两个文件夹里会多出文件,为输出对应文件。
下图为成功编译的文件:
使用方法参考在Android Studio中使用cmake编译FFmpeg,类似
参考文件:
http://blog.csdn.net/qq_26093363/article/details/52645397