如何构建FFMPEG并将其链接到iOS?

如何构建FFMPEG并将其链接到iOS?,第1张

概述所有! 我知道,这里有很多关于iOS上的FFMPEG的问题,但没有一个答案适合我的情况:( 当我试图在我的项目中链接FFMPEG时,每种情况都会发生奇怪的事情,所以请帮助我! 我的任务是编写iOS视频聊天应用程序,它使用RTMP协议发布和读取自定义Flash Media Server的视频流. 我决定使用rtmplib,免费的开源库,通过RTMP流式传输FLV视频,因为它是唯一合适的库. 当我开始 所有!

我知道,这里有很多关于iOS上的FFMPEG的问题,但没有一个答案适合我的情况:(
当我试图在我的项目中链接FFMPEG时,每种情况都会发生奇怪的事情,所以请帮助我!

我的任务是编写iOS视频聊天应用程序,它使用RTMP协议发布和读取自定义Flash Media Server的视频流.

我决定使用rtmplib,免费的开源库,通过RTMP流式传输FLV视频,因为它是唯一合适的库.

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

现在我可以在我的应用程序的帮助下阅读FLV视频的实时流(来自url)并将其发送回频道.

我现在的麻烦在于从相机发送视频.
根据我的理解,基本 *** 作顺序应如下:

>使用AVFoundation,在序列的帮助下(Device-AVCaptureSession-AVVIDeoDataOutput-> AVAssetWriter)我把它写到一个文件中(如果需要,我可以更详细地描述这个流程,但在问题的上下文中它并不重要) .此流程是将实时视频从摄像机硬件加速转换为H.264编解码器所必需的.但它是MOV容器格式. (这是完成的步骤)
>我在写入每个样本时读取此临时文件,并获取视频数据的字节流(H.264编码,在QuickTime容器中). (这已经完成了一步)
>我需要将视频数据从QuickTime容器格式转换为FLV.这一切都是实时的.(逐包)
>如果我将拥有包含在FLV容器格式中的视频数据包,我将能够使用rtmplib通过RTMP发送数据包.

现在,对我来说最复杂的部分是第3步.

我想,我需要使用ffmpeg lib来进行这种转换(libavformat).我甚至找到了源代码,展示了如何解码来自MOV文件的h.264数据包(在libavformat中查找,我发现甚至可以从字节流中提取这些数据包,这对我来说更合适).完成后,我将需要将数据包编码为FLV(使用ffmpeg或手动,以一种方式将FLV标头添加到h.264数据包,这不是问题,如果我是正确的话很容易).

FFMPEG有很棒的文档,是非常强大的库,我认为使用它不会有问题.但问题是我无法在iOS项目中使用它.

我花了3天时间阅读文档,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和另一个FFMPEG库的预构建的.a文件.

我查看他们的架构:

iMac-2:MedialibiOS root# lipo -info libavformat.aArchitectures in the fat file: libavformat.a are: armv6 armv7 i386

我发现它适合我!
当我试图将这些库和标题添加到xCode项目时,它编译得很好(我甚至没有像“为另一个架构编译库”这样的警告),我可以使用标题中的结构,但是当我尝试调用C时函数来自libavformat(av_register_all()),编译器显示错误消息“找不到架构armv7:av_register_all的符号”.

我想,也许lib中没有符号,并试图向他们展示:

root# nm -arch armv6 libavformat.a | grep av_register_all00000000 T _av_register_all

现在我被困在这里,我不明白,为什么xCode看不到这个符号,也无法前进.

如果我对从iOS发布RTMP流的流程有所了解,请纠正我,并帮助我构建和链接FFMPEG for iOS.

我有iPhone 5.1. SDK和xCode 4.2.

解决方法 我虽然为这个问题写了答案,即使它已经老了,因为没有接受的答案.

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

无论如何,我认为错误原因是因为没有在PROJECT的Build Settings中提供header Search Paths.

您可以做的是,将您的Xcode项目路径添加到header Search Paths键并将其设置为递归.

而且我相信您必须将下面提到的所有三个库连接起来,而不仅仅是前两个.

> libz.dylib> libbz2.dylib> libiconv.dylib

总结

以上是内存溢出为你收集整理的如何构建FFMPEG并将其链接到iOS?全部内容,希望文章能够帮你解决如何构建FFMPEG并将其链接到iOS?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存