iOS视频编码库ffmpeg编译

近来研究视频编码在ios应用的实现,现在总结目前支持ios的视频编码库并不多,只有ffmpeg 比较广泛。其余的技术就是  neon 技术了,neon技术是应用汇编语言来进行编码(技术要求太高,神一般的人才可以用这技术)。
透过网络上资料,现在总结以下的编译方法:

首先确保mac下的终端能执行make这样的命令,不行的话需要单独安装.
安装办法参考:安装命令行工具

( 菜单Xcode >> Open Developer Tool >>More Developer Tools)


ios5,ios5.1:
  申明一下,我用的是xcode4.2/.4.3.2,ios sdk5.0/5.1,是在真机上运行ok,越狱的ios5.0 和ios5.1的iphone都可以播示例视频。我选择target是ios4.3也可以的。不过如果是4.1我就不清楚了,应为貌似ffmpeg不支持编译成armv6,有这么个说法:The armv6 arch doesn't seem to be working properly so you can force building via armv7 on your 3GS until we figure that out.



1. 到https://github.com/gabriel/ffmpeg-iphone-build下载ffmpeg-iphone-build
2.先将gas-preprocessor.pl拷贝到/usr/sbin/目录中。
3.到这里下载最新的ffmpeg:http://ffmpeg.org/download.html    或者命令行安装:git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

下载一个事例工程:git clone git://github.com/lajos/iFrameExtractor.git

然后到命令行下到ffmpeg的目录下,执行:
./configure \
--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/system \
--target-os=darwin \
--arch=arm \
--cpu=cortex-a8 \
--extra-cflags='-arch armv7' \
--extra-ldflags='-arch armv7' \
--enable-pic \
--enable-cross-compile \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-asm \
--disable-encoders \
--disable-decoders \
--enable-decoder=h264 \
--disable-doc

ios6.0:(由于路径不同,需要配置不同的路径)

export DEVRoot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export SDKRoot=$DEVRoot/SDKs/iPhoneOS5.1.sdk
export CC=$DEVRoot/usr/bin/llvm-gcc
 
./configure \
--cc=${CC} \
--as="gas-preprocessor.pl ${CC}" \
--sysroot=${SDKRoot} \
--enable-cross-compile \
--target-os=darwin \
--arch=arm \
--cpu=cortex-a8 \
--extra-cflags="-arch armv7" \
--extra-ldflags="-arch armv7 -isysroot ${SDKRoot}" \
--enable-pic \
--disable-doc \
--disable-ffplay \
--disable-ffserver \
--disable-gpl \
--disable-shared \
--enable-static \
--disable-mmx \
--disable-debug \
--enable-decoder=h264  \
--disable-asm



注意了,上面有--disable-asm \,这是没办法的,禁用了汇编,这样应该是会影响效率的,如果不禁用就编译不通过。谁有更好的办法不禁用,麻烦分享一下。
一般是ok的,如果提示permission deny,那就chmod 777 configure(这个情况是我同事在windows上改了这个文件

然后就make,完了再sudo make install一下
如果给代码做了修改,就先make clean,然后make一下

编译完了后在/usr/local/lib就是一些你用得上的.a文件,先拷贝到别的地方,比如:cp -rf lib* /src
编译完了后在/usr/local/include就是一些你用得上的.h头文件,先拷贝到别的地方,比如:cp -rf include* /src
然后把lib和include放到你的工程中,你可以在你的工程根目录下创建一个叫ffmpeg的文件夹,把lib和linclude里面的东西放进去
工程中制定head file path :"$(SRCROOT)/ffmpeg"   这样编译就可以通过了


如果出现编译失败返回错误码的情况,应分析具体的版本问题,可以尝试换ffmpeg版本 ,
http://ffmpeg.org/download.html 里面有不同的版本的源代码下载。
目前的最新版代码库支持mac10.7.4 ,xcode4.5

ffmpeg-0.8.12/ffmpeg-0.10.6 版支持10.7.0,xcode4.2

经过编译后发现
iFrameExtractor这demo测试出编码速度最高只能达到15帧左右,而且cpu占用也较高,多一行代码都会影响解码性能。综合评价,ffmpeg解码性能非常一般,本re短期内没有更好的方案了,或者可以选择自己研究h264视频编码开发编码库,或者 用  neon技术进行汇编解码。

你可能感兴趣的:(iOS视频编码库ffmpeg编译)