新建一个Mac OS的项目,按照下面的步骤,加入ffmpeg。 静态库编译 参考: 移值FFMPEG到iPhone或Mac OS/X 链接静态库 在xcode建立一个libs目录,加入生成的静态库(.a文件)。一般包含avcodec, avformat, avutil, swscale这四个库。 加入头文件 在工程配置中,build选项,Header Search Paths,中加入源文件的根目录(记得选择recusive)。 加入其他依赖 需要加入libz的支持,工程->add->Existing Framework->libz.dylib
二、 交叉编译
a) 开始用了ffmpeg_mac中的build_armv6发现编出来的仍是x86的东西。检查makefile才发行C complier test fail。然后就默认为i386/i686的gcc了,开始以为是arm-apple-darwin10-gcc的问题,
b) 后来发现是因为找不到一些库在命令行下:加上-isysroot = 所用SDK的路径 就好了在重新修改build_armv6的脚本,ok,成功编译成了arm库。
c) 移到xcode中发现在build 中只有armv6 armv7, armv7的,选armv6 armv7,这是库要求有armv6 和armv7的,最后选择armv7的。
总结:
在做开源库的移植时,除了注意交叉编译器之外,也要注意一些系统库和参数的设置。
三、 版本
我对三个版本的ffmpeg做了调研,具体情况如下,其中ffmpeg_mac是从同事那里拿来的,其余的都是从官网下的。具体情况如下:
ffmpeg_0.6: ffplay(ok),ffserver(ok),ffmpeg(段错误)
ffmpeg_0.7: ffplay(ok),ffserver(ok),ffmpeg(无效指针)
ffmpeg_Mac:ffplay(ok),ffserver(有点问题),ffmpeg(ok)
我在iphone中采取的是ffmpeg_mac版本的。并在虚拟机上对这个版本做了测试:
Mac中的iphone模拟器上启动ffserver,然后ffmpeg流化,最后在xp端用VLC播放器播ffserver上的流媒体。分别用flv,asf,3gp,avi测试,发现只有flv可以正常播发。可能与我的ffserver.conf有关,暂没做深入调查。