所有!
我知道,这里有很多关于iOS上的FFMPEG的问题,但是没有一个答案适合我的情况:(
当我尝试在项目中链接FFMPEG时,每种情况都会发生一些奇怪的事情,所以请帮助我!
我的任务是为iOS编写视频聊天应用程序,该应用程序使用RTMP协议向自定义Flash Media Server发布和读取视频流。
我决定使用rtmplib,这是免费的开放源代码库,用于通过RTMP流式播放FLV视频,因为它是唯一合适的库。
当我开始研究它时出现了许多问题,但后来我了解了它应该如何工作。
现在,在我的应用程序的帮助下,我可以读取FLV视频的实时流(从url)并将其发送回频道。
我现在的麻烦是从摄像机发送视频。
据我了解,基本操作顺序应如下:
现在,对我来说最复杂的部分是步骤3。
我认为,我需要使用ffmpeg lib进行这种转换(libavformat)。我什至找到了源代码,显示了如何从MOV文件中解码h.264数据包(在libavformat中看,我发现甚至可以从字节流中提取此数据包,这对我来说更合适)。完成此操作后,我将需要将数据包编码为FLV(使用ffmpeg或手动将FLV标头添加到h.264数据包中,如果我是正确的话,这不是问题,而且很容易)。
FFMPEG具有出色的文档和非常强大的库,我认为使用它不会有问题。但是这里的问题是我无法在iOS项目中正常工作。
我已经花了三天的时间阅读文档,stackoverflow和搜索“如何为iOS构建FFMPEG”问题的答案,我想,如果我再花一周的时间来尝试编译此库,我的PM将会激怒我:))
我试图使用许多不同的构建脚本并配置文件,但是当我构建FFMPEG时,我得到了针对x86体系结构的libavformat,libavcodec等(即使在构建脚本中指定了armv6 arch)。 (我使用“lipo -info libavcodec.a”显示体系结构)
因此,我无法构建此源,因此决定查找预构建的FFMPEG,该文件是为架构armv7,armv6,i386构建的。
我已经从github的MidnightCoders下载了iOS Comm Lib,它包含使用FFMPEG的示例,它包含avcodec,avformat的预建.a文件和另一个FFMPEG库。
我检查他们的架构:
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())中的-function函数,编译器会向我显示错误消息“找不到体系结构armv7的符号:av_register_all”。
我以为,也许lib中没有符号,并试图显示它们:
root# nm -arch armv6 libavformat.a | grep av_register_all
00000000 T _av_register_all
现在我被困在这里,我不明白,为什么xCode看不到这个符号,也无法前进。
如果我对从iOS发布RTMP流的流程理解不正确,请纠正我,并帮助我建立和链接FFMPEG for iOS。
我有iPhone 5.1。 SDK和xCode 4.2。
最佳答案
我什至为这个问题写了一个答案,即使它很旧,因为没有公认的答案。
根据问题中给出的解释,我认为他能够准确地编译FFmpeg的来源。如果有人害怕这样做,则可以从here下载了已编译的版本。
无论如何,我相信是由于未在 PROJECT 的构建设置中提供标头搜索路径而导致的错误原因。
您可以做的是,将Xcode项目路径添加到Header Search Paths项中,并将其设置为递归。
而且我相信您必须链接下面提到的所有三个库,而不仅仅是前两个。
关于ios - 如何建立FFMPEG并将其链接到iOS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11329346/