如何建立并链接FFMPEG到iOS?(How to build and link FFMPEG to

2019-07-30 06:35发布

所有!

我知道,在这里有很多的问题,您FFMPEG iOS上,但没有一个答案是适合我的情况:(奇怪的事情发生时,我想在我的项目链接FFMPEG每一种情况下,所以,请帮帮我!

我的任务是写于iOS视频聊天应用,使用RTMP协议进行发布和定制Flash Media Server的读取视频流/。

我决定使用rtmplib,免费的开源库,用于通过RTMP流的FLV视频,因为它是唯一适当的库。

很多问题出现时,我开始了它的研究,但后来我明白应该如何工作。

现在,我可以读FLV视频(来自URL)的实时数据流,并将其发送回道,我的应用程序的帮助。

我的麻烦现在在发送视频从相机。 基本操作顺序,我的理解,应该是以下几点:

  1. 使用AVFoundation,与序列的帮助下(设备AVCaptureSession-AVVideoDataOutput-> AVAssetWriter)我写这篇文章的文件(如果你需要,我可以描述这个流程更详细的,但有问题的情况下并不重要)。 这种流动是必要进行的现场视频硬件加速的转换,从相机到H.264编解码器。 但它是MOV容器格式。 (这是完成步骤)

  2. 我读书面每个样品这个临时文件,并获得视频数据的字节流(H.264编码,在QuickTime容器)。 (这是媒体链接完成步骤)

  3. 我需要可视数据包括QuickTime容器格式转换成FLV。 而这一切都在实时(包 - 通过 - 包)

  4. 如果我将视频数据,包含在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。

Answer 1:

我虽然写了这个问题的答案,即使是老,因为没有公认的答案。

根据问题给出解释,我认为他能够准确地编译FFmpeg的来源。 如果有人怕这样做的,有已经编译版本,您可以下载在这里 。

无论如何,我相信,因为在你的项目构建设置不给标题搜索路径出错原因。

你可以做的是,添加您的Xcode项目路径的头文件搜索路径项并将其递归。

我相信你有下链接不只是前两个提到的所有三个库。

  • libz.dylib
  • libbz2.dylib
  • libiconv.dylib


Answer 2:

要编译FFmpeg的适用于iOS SDK 5.1,

随着AppStore的版本的Xcode(更改脚本路径), 你可以使用这个脚本 。

它为我工作。 此外,一定要添加到您的项目“链接二进制与图书馆”这些:

  1. libz.dylib
  2. libbz2.dylib

我也想,而它的写入摆脱.mov文件的H.264字节流,所以我会很高兴的在步骤(2),由于没有任何提示:)



文章来源: How to build and link FFMPEG to iOS?
标签: ios ffmpeg