Building FFmpeg for iPhone
备注:FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
事先申明,此文涉及所有代码、文档均为网上搜集整理,本人只做整合修改。目前我写的代码就归公司所有吧,不贴出来了。所有遇到问题,均从google上获得答案。可能需要翻*墙。
从http://www.iphonedevsdk.com/forum/iphone-sdk-development/51697-rtsp-streaming-iphone-works-great.html该网页上下载iXen上传的rtspclient 和rtspsample代码。这两个代码都不能运行。稍作修改。把rtspclient中的RTSPClientSession.h 和RTSPClientSession.m添加到rtspsample中去。
参照http://www.cocoachina.com/bbs/read.php?tid-8466-page-1.html这里面制作静态库的方法,把live555的静态库加入进去。编译的时候会有一些小问题,稍加修改即可。这个时候,一个完整的rtsp客户端就ok了。
参考http://www.codza.com/extracting-frames-from-movies-on-iphone这个网页上的iFrameExtractor软件,在这个软件的压缩包中,有ffmpeg的文件夹。注意看ffmpeg中的readme,可以编译出模拟器版本、真机版本的静态库。添加一下就好了。连接ffmpeg库,会有很多问题,比如记得加入 library search path,加入libz.dylib。可以看这里http://www.logresource.com/Question/2872145/showall/和http://stackoverflow.com/questions/2380397/error-while-compiling-the-xcode-project-iphone这里。
在模拟器上,贴图方式和iFrameExtractor一样,速度很好。但是在真机上,进过测试,很卡。需要用别的方法。
目前能想到的是使用sdl。http://immersedcode.org/2011/4/25/sdl-on-ios/参考这个帖子。目前xcode和sdk都达不到要求。没有进一步的进展。
iphone+ios编译ffmpeg+for+ios(转载加修改)
1.mov格式解析
http://blog.csdn.net/sunshine1314/article/details/2547275
2。mov解析的开源工程:bento4和ffmpeg,其中bento4直接有xcode的工程文件,和比较详细的test代码
3。ffmpeg如何解析帧图像,可以看看extracting-frames-from-movies-on-iphone
http://www.codza.com/extracting-frames-from-movies-on-iphone
4。ffmpeg iphone编译
http://www.cnblogs.com/wwwkhd/archive/2011/08/09/2131780.html
5.图解autoscan、aclocal、autoheader、automake、autoconf、configure、makehttp://jaguar13.iteye.com/blog/614427
6第十五章 make的常见错误信息
http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/make-15.html
1. 下载:
git clone git://github.com/lajos/iFrameExtractor.git
2. 编辑:
build_armv6和build_armv7,修改./configure后面的参数,主要是SDK版本.我的是4.3,修改为:
./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk --cpu=arm1176jzf-s --extra-cflags='-arch armv6' --extra-ldflags='-arch armv6'
3. 编译:
出错,提示:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.
Undefined symbols for architecture armv7:
"_BZ2_bzDecompressInit", referenced from:
_matroska_decode_buffer in libavformat.a(matroskadec.o)
"_BZ2_bzDecompressEnd", referenced from:
_matroska_decode_buffer in libavformat.a(matroskadec.o)
"_BZ2_bzDecompress", referenced from:
_matroska_decode_buffer in libavformat.a(matroskadec.o)
添加库libbz2.1.0.dylib,再次编译,OK通过.
7. 修改了ffmpeg版本到最新版(0.7),编译的时候需要把common.mak复制到新版本目录.
编译的时候遇到错误:
ERROR: .endm without .macro at /usr/local/bin/gas-preprocessor.pl line 83, <ASMFILE> line 55
用老版本的libavcodec/arm/asm.S和libavcoec/arm/dsputil_arm.S覆盖新版本(实际上我怀疑只覆盖asm.S即可),重新编译即可.