所有!
我知道,在这里有很多的问题,您FFMPEG iOS上,但没有一个答案是适合我的情况:(奇怪的事情发生时,我想在我的项目链接FFMPEG每一种情况下,所以,请帮帮我!
我的任务是写于iOS视频聊天应用,使用RTMP协议进行发布和定制Flash Media Server的读取视频流/。
我决定使用rtmplib,免费的开源库,用于通过RTMP流的FLV视频,因为它是唯一适当的库。
很多问题出现时,我开始了它的研究,但后来我明白应该如何工作。
现在,我可以读FLV视频(来自URL)的实时数据流,并将其发送回道,我的应用程序的帮助。
我的麻烦现在在发送视频从相机。 基本操作顺序,我的理解,应该是以下几点:
使用AVFoundation,与序列的帮助下(设备AVCaptureSession-AVVideoDataOutput-> AVAssetWriter)我写这篇文章的文件(如果你需要,我可以描述这个流程更详细的,但有问题的情况下并不重要)。 这种流动是必要进行的现场视频硬件加速的转换,从相机到H.264编解码器。 但它是MOV容器格式。 (这是完成步骤)
我读书面每个样品这个临时文件,并获得视频数据的字节流(H.264编码,在QuickTime容器)。 (这是媒体链接完成步骤)
我需要可视数据包括QuickTime容器格式转换成FLV。 而这一切都在实时(包 - 通过 - 包)
如果我将视频数据,包含在FLV容器格式的报文,我将能够使用rtmplib通过RTMP发送数据包。
现在,对我来说最复杂的部分,是第3步。
我想,我需要使用的ffmpeg的lib这个转换(libavformat)时。 我甚至找到源代码,展示如何H.264数据包从MOV文件进行解码(看在了libavformat,我发现这是可以提取该数据包甚至从字节流,哪个更适合我)。 既然这样完成了,我将需要分组编码成FLV(使用的ffmpeg或手动,在添加FLV-头为H.264数据包的方式,这不是问题,并且很容易,如果我是正确的)。
FFMPEG有很大的文档,非常强大的图书馆,我认为,不会有使用它的问题。 但这里的问题是,我无法把它的iOS项目。
我花3,每天看文档,计算器关于这个问题的google搜索答案“如何构建FFMPEG为iOS”,我想,我的PM是会解雇我,如果我会花一个星期的尝试编译这个库:))
我试图用许多不同的集结脚本和配置文件,但是当我将FFMPEG,我得到了libavformat是,libavcodec等,为x86架构(甚至当我指定构建脚本的ARMv6拱)。 (我用的“脂-info libavcodec.a”,以示架构)
所以我不能建立这个来源,并决定找预置的FFMPEG,即建立建筑的ARMv7,ARMv6的,I386。
我从从GitHub MidnightCoders下载的iOS通讯库,它包含例如使用的ffmpeg,它包含avcodec中,avformat和另一FFMPEG库的预构建.a文件。
我检查自己的架构:
iMac-2:MediaLibiOS root# lipo -info libavformat.a
Architectures in the fat file: libavformat.a are: armv6 armv7 i386
而且我发现,这是适合我! 当我试图这样库和头文件添加到Xcode项目,它编译罚款(我甚至没有任何警告信息,如“库编译为另一种架构”),我可以使用结构从头,但是当我试图调用C从libavformat流功能全(av_register_all()),编译器会告诉我的错误信息 “(S)未找到的ARMv7架构的符号:av_register_all”。
我想,也许有在lib中没有的符号,并试图向他们展示:
root# nm -arch armv6 libavformat.a | grep av_register_all
00000000 T _av_register_all
现在,我在这里卡住了,我不明白,为什么Xcode中无法看到这个符号,无法前进。
请纠正我,如果我错了,在流量从iOS的发布RTMP流的理解,并帮助我在建筑和链接FFMPEG为iOS。
我有iPhone 5.1。 SDK和Xcode的4.2。