[有图有真相]ffmepg在iOS上应用

说明,首先感谢smking,因为有这篇文档是在其一篇博客基础上完成的,可以说是站在巨人肩膀上了,在几乎没有iOS经验的情况的,ffmpeg是我接触的第三个技术调查。网上也有大量的文章说如何把ffmpeg移植到iOS上,结果总是问题多多,而ffmpeg的帮助也就那么点,真是很头痛,smking花了两个星期,我在smking的基础上用了4天时间,我认为smking可以让这个时间更短一些。所以,完全感受到作为新手的那种迷茫与无助,决心把将smking的博文改进,让更多人可以少走弯路。

原文参考:http://blog.csdn.net/smking/article/details/7325790

如需转载,请保留当前网址,至少对那些费劲把这些写下来并分享的朋友表示尊重,没有他们,这个世界会很落后的。

 

步骤如下:

1从https://github.com/yuvi/gas-preprocessor下载最新的gas-preprocessor.pl文件,(备用链接CSDN

  http://download.csdn.net/detail/knockheart/5528693)并把它置于$PATH所对应的文件夹下,如usr/sbin, 

  

如图Finder进入个人,上面就是要进入的文件路径。中间会提示输入密码,就是你的登陆密码。

提示:如果你没有看到这些隐藏文件,请先解决如何显示隐藏文件(参考博文CSDN http://blog.csdn.net/knockheart/article/details/9045633)。

  打开终端cd 到 usr/sbin目录,

 

  并添给其添加执行权限, 这里可以直接给予最高权限,输入命令 chmod 777 gas-preprocessor.pl

如下图:

2从ffmpeg的官网下载最新代码http://ffmpeg.org/download.html, 在这里任选一个下载,我当时是下载的就是图中被点击的这项(备用链接CSDN http://download.csdn.net/detail/knockheart/5529485)。

[有图有真相]ffmepg在iOS上应用_第1张图片

3下载iFrameExtractor这个项目从gitclone git://github.com/lajos/iFrameExtractor.git, 有可能不能下载, 因为国内公司一般都做了限制, 可以在网上去搜, 很多这个工程, 差别不大,不影响使用ffmpeg(备用下载CSDNhttp://download.csdn.net/detail/knockheart/5529635).

然后把下载下来的ffmpeg(FFmpeg-master同理)放在iFrameExtractor项目的文件夹下,如下结构:

[有图有真相]ffmepg在iOS上应用_第2张图片

4打开terminal, cd到ffmpeg-0.10(FFmpeg-master同理)文件夹下面,执行一下makeclean, 清除之前生成的库文件,如果之前没有生成果库文件,不用理睬它。

5如果要生成模拟器可以使用的库文件.

环境为:Mac Lion 10.7.2,  XCode:4.2.1, 

本人:Mac Lion 10.7.5,  XCode:4.5.2,

模拟器(运行时,我暂时以5.0的模拟器测试)

SDK:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk

SDK:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk

本人的版本是5.1 和 6.0的测试编译没问题。

则用如下命令

./configure --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc --as='/usr/local/bin/gas-preprocessor.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc' --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk --target-os=darwin --arch=i386 --cpu=i386 --extra-cflags='-arch i386' --extra-ldflags='-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk' --prefix=compiled/i386 --enable-cross-compile --enable-nonfree --enable-gpl --disable-armv5te --disable-swscale-alpha --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-asm --disable-debug

这个命令执行完后(以上命令修正过,每一个“--”前都有一个空格,参考官方文档 CSDN免费 http://download.csdn.net/detail/knockheart/5530031 ),应当是不会报错,类似于下图:

[有图有真相]ffmepg在iOS上应用_第3张图片

6执行make命令。(有时会有错,建议多试两次,无错的情况,应该类似于下图)

[有图有真相]ffmepg在iOS上应用_第4张图片

这个时候,可以去到这个ffmepg文件夹下查看libavutil/libavutil.a,libswscale/ libswscale.a,libavcodec/libavcodec.a,libavformat/libavformat.a文件应该都已经生成。


本人用的是FFmpeg-master所以略有不一样make命令完后,再输入make install




7打开下载后的iFrameExtracto项目,

设置Project中的build setting中的Header Search Paths为当前位置的./ffmpeg-0.10(这里可以点击选中文件夹hold住拖拽添加至这里),如下图:

[有图有真相]ffmepg在iOS上应用_第5张图片

再设置Target中的build setting的Header Search Paths为当前位置的./ffmpeg-0.10。如下图:

[有图有真相]ffmepg在iOS上应用_第6张图片

这里先暂时不设置Target下的Libaray Search Paths,把其中的Paths点击全部删除掉。(因为呆会加上这些库文件后,这个Libarary Search Paths会自动填充)

8删除掉这个项目之前的一些库文件引用, (包括在项目工程下的这些库文件,以及在Target右边的库文件引用)

 [有图有真相]ffmepg在iOS上应用_第7张图片

9点击Target的Build Phases中的“LinkBinary With Libaries”下找到并加入这几个库文件,加入完成后,可以去Target下的Build Settings下的“Library Search Paths”中已经自动填充了这几个库文件的路径,并保证已经加入了库libbz2.1.0.dylib

然后编译运行,iFrameExtractor应该是运行到模拟器上了。

 

下面进行真机ffmpeg的编译

5 (从上面第5步开始不同)

环境为:Mac Lion 10.7.2,  XCode:4.2.1, 

XCode中的真机 SDK版本为SDK:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

真机,iTouch 4(SDK 5.0.1 installed )

同样先进行make clean清除已有的库文件

执行

./configure --disable-doc --disable-ffmpeg--disable-ffplay --disable-ffserver --disable-avfilter --disable-debug--disable-decoders --enable-cross-compile --disable-encoders --disable-armv5te--enable-decoder=h264 --enable-pic--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc--as='gas-preprocessor/gas-preprocessor.pl/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'--extra-ldflags='-arch armv7 -isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk'--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk--target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags='-arch armv7'

执行完毕后,截图如下:(没什么错误的情况下)

[有图有真相]ffmepg在iOS上应用_第8张图片

6.执行make时报错, error:invalid operand in inline asm: 'adds  $1, ${2:R}, ${2:Q}, lsr #31错误如下:

[有图有真相]ffmepg在iOS上应用_第9张图片

在网上查了一下,说是如果你的项目中不需要asm 支持的话,就可以把asm给禁止掉,于是乎,在./configure末尾加入了--disable-asm变成了如下:

./configure --disable-doc --disable-ffmpeg--disable-ffplay --disable-ffserver --disable-avfilter --disable-debug--disable-decoders --enable-cross-compile --disable-encoders --disable-armv5te--enable-decoder=h264 --enable-pic--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc--as='gas-preprocessor/gas-preprocessor.pl/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'--extra-ldflags='-arch armv7 -isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk'--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk--target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags='-arch armv7'--disable-asm

配置无错,然后make,编译成功, 如下图:

[有图有真相]ffmepg在iOS上应用_第10张图片

到相应的文件夹下的确可以看到新生成的库文件

然后后面的步聚与前面模拟器上的一样,最后就运行到你的手机上了。 


上面真机方法适用于ios 4, ios5版本。

用下面这个命令可以适用于ios6系统上,已测试, iphone4, (ios 6)安装正常

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-avfilter --disable-debug --disable-decoders --enable-cross-compile --disable-encoders --disable-armv5te --enable-decoder=h264 --enable-pic --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --extra-ldflags='-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk' --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk --target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags='-arch armv7' --disable-asm



附:关于iOS如何制作Library

你可能感兴趣的:(ios,ffmpeg,库)