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

2024-06-28

all!

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

我的任务是为 iOS 编写视频聊天应用程序,该应用程序使用 RTMP 协议向自定义 Flash Media Server 发布视频流并从中读取视频流。

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

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

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

我现在的麻烦是从相机发送视频。 据我了解,基本操作顺序应该如下:

  1. 使用 AVFoundation,在序列(Device-AVCaptureSession-AVVideoDataOutput-> AVAssetWriter)的帮助下,我将其写入文件(如果您需要,我可以更详细地描述此流程,但在问题的上下文中它并不重要)。此流程对于将来自摄像机的实时视频进行硬件加速转换为 H.264 编解码器是必需的。但它是 MOV 容器格式。 (这一步就完成了)

  2. 我读取这个临时文件并写入每个样本,并获取视频数据的字节流(H.264 编码,在 QuickTime 容器中)。 (这是已经完成的步骤)

  3. 我需要将视频数据从 QuickTime 容器格式转换为 FLV。而且这一切都是实时的。(逐个数据包)

  4. 如果我有包含在 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.a
Architectures 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_all
00000000 T _av_register_all

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

如果我对从 iOS 发布 RTMP 流的流程的理解有误,请纠正我,并帮助我为 iOS 构建和链接 FFMPEG。

我有 iPhone 5.1。 SDK 和 xCode 4.2。


我想为这个问题写一个答案,即使它很旧,因为没有公认的答案。

根据问题中给出的解释,我假设他能够准确地编译 FFmpeg 的源代码。如果有人害怕这样做,已经有编译版本可以下载here http://sourceforge.net/projects/ffmpeg-ios/files/ffmpeg-ios-master.tar.bz2/download?use_mirror=liquidtelecom.

无论如何,我相信错误原因是因为没有给出标头搜索路径在你的PROJECT's 构建设置.

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

我相信您必须链接下面提到的所有三个库,而不仅仅是前两个库。

  • libz.dylib
  • libbz2.dylib
  • libiconv.dylib
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建 FFMPEG 并将其链接到 iOS? 的相关文章

  • 从 UIImageView 的中心对 UIImageView 进行动画处理

    我有一个UIImageView应该从动画size 0 0 gt 93 75 我有以下内容 UIView animateWithDuration 0 5 delay 0 options UIViewAnimationOptionTransit
  • 如何使 TextField 右对齐(尾随)

    我正在努力拥有一个价值文本域以尾随对齐方式显示 正如你所看到的价值34 3以前导对齐方式显示 我确信我错过了一些明显的东西 但我不知道是什么 有任何想法吗 State private var endwert 34 3 var numberF
  • xamarin 中的本机链接错误

    我今天尝试编译我的 xamarin 项目 突然收到以下错误 错误 MT5210 本机链接失败 未定义符号 mono handle global vregs 请验证是否已引用所有必要的框架并且本机库是否正确 链接到 错误 MT5210 本机链
  • 将渐变应用于 UIImage - 如何消除颜色反转?

    我正在应用渐变UIImage 我希望它底部是黑色的 中间慢慢变成透明或浅灰色 基本上没问题 但我有一个问题 在这个渐变下 我的图像颜色在某些地方反转 这看起来很烦人 我该如何解决这个问题 为了您方便 我的方法如下 我尝试过选择不同的混合模式
  • 禁用应用程序的启动图像

    我想从我的应用程序禁用启动图像 我已经有一个启动屏幕 因此在应用程序启动时首先显示启动图像 然后显示启动屏幕 我想禁用启动图像并仅在应用程序启动时显示启动屏幕 请帮忙 提前致谢 你不能 因为它会一直保持到你的程序被加载并从applicati
  • 动画完成后 CABasicAnimation 重置为初始值

    我正在旋转 CALayer 并尝试在动画完成后将其停止在最终位置 但动画完成后 它会重置到初始位置 xcode 文档明确指出动画不会更新属性的值 任何如何实现这一目标的建议 这就是答案 它是我的答案和克里希南的答案的结合 cabasican
  • UpdatedTransactions(transactionState == .restored) 与 paymentQueueRestoreCompletedTransactionsFinished

    正如标题所描述的 实际有什么不同 如果我有这个 func paymentQueue queue SKPaymentQueue updatedTransactions transactions SKPaymentTransaction for
  • 使用 UIPopoverPresentationController 时如何对 PreferredContentSize 进行动画处理?

    我只需设置即可成功更改我呈现的弹出框的框架preferredContentSize 我现在想为内容大小的变化设置动画 但我没有成功 它只是立即更新 事实上我设置的延迟甚至没有得到尊重 如何以动画方式呈现内容大小的变化 In viewDidA
  • 带有音频和视频过滤器的 ffplay / ffmpeg 设置表

    问候 我想用 ffplay 创建一个表 显示音频和视频监控 来自这样的信号 不幸的是我只能做视频部分 ffplay i bar mxf vf split 4 a b c d d vectorscope m color3 g color dd
  • 是否可以“重新设计”IOS 日期选择器?

    我需要一个自定义日期选择器 本质上只是想删除 IOS 版本中的图形 但保留 3 列日期滚动 是否需要从头开始重新构建 所有研究都表明是 或者是否可以仅禁用或交换图像 我自己还没有尝试过 但也许您可以在日期选择器上方添加一个 UIImageV
  • 来自应用程序的 Apple TV 上的 AirPlay 元数据 (AVPlayer - MPVolumeView)

    我的应用程序成功通过 AVPlayer 传输 MP3 我实现了一个 MPVolumeView 来引入 AirPlay 支持 效果很好 但我注意到我的苹果电视上的标题信息没有显示流式 MP3 中的任何内容 而只是显示 未知 信息 是否有办法从
  • 访问 iPhone 上用户的短信

    有没有一种方法可以访问用户的短信 没有互联网连接 显然 不尝试获取客户的消息 并分析应用程序中的文本 如果没有 出于安全原因 这是完全可以理解的 但我想我还是会问 不 你只能发送它们 S http developer apple com l
  • 无法使用应用程序加载器将 .ipa 上传到 iTunes

    我正在尝试将我的 iPhone ipa 文件上传到 iTunesconnect 我什至最近通过应用程序加载器成功地将构建上传到 iTunes Connect 但从过去两天开始 当我尝试上传 ipa 时 出现以下错误 并且 ipa 未上传到
  • 从故事板向 UILabel 属性字符串添加下划线失败

    从故事板中我选择有问题的 UILabel 然后在属性检查器 gt 标签 gt 我选择 属性 同样在属性检查器 gt 标签 gt 文本 gt 我选择内容 然后我单击字体图标并选择下划线 基本上 我从弹出的 字体 窗口中选择的任何更改都不会生效
  • 如何让 UIPickerView 滑动到屏幕的一半?

    when someone clicks clothing I want the UIPickerView to slide up as in the example as follows 有人可以展示代码示例吗 正如 dsc 和 Jason
  • 使用预先存在的数据库创建 PhoneGap iOS 应用程序

    我最近开始开发一个使用 PhoneGap 版本 2 8 0 作为药物查找器的应用程序 过去 我创建了该工具的 Web 版本 它使用 jQuery Mobile 和 PHP 来访问远程 SQL 数据库 PhoneGap 似乎是一个很有吸引力的
  • Swift 中的核心数据:仅保存 for 循环中的最后一个对象

    我正在尝试将 Core Data 中的多个对象保存到 iPodSongs 实体中for循环 即当前歌曲的标题for song in result 环形 但我的代码只保存循环中的最后一首歌曲 并且只是不断覆盖同一个对象 我需要每次创建一个新对
  • 编译到模拟器时如何排除 Xcode 中的框架

    我在我的项目中包含了 TokBox 框架 这样我们就可以进行视频短信 问题是该框架以及它们所需的其他一些框架不允许您在模拟器中编译或运行该应用程序 他们不受支持 有没有办法设置编译器标志以在编译到模拟器时跳过 TokBox 和其他框架 原因
  • Twitter iOS 个人资料页面配置

    我正在尝试构建一个类似于 Twitter 个人资料页面的页面 看起来他们正在使用基本的UITableView 最上面的配置文件就是tableHeaderView 这些选项卡是UISegmentedControl在SectionRowHead
  • iOS 7 导航栏在 viewDidAppear 上跳跃/拉伸

    I am trying to update my app for iOS 7 When my views appear on the screen you can see that there is a gap between the na

随机推荐

  • 如何在 Javascript 中创建类?

    这是我到目前为止所得到的 它根本不起作用 我的玩家类中的所有变量都是空的 并且更新永远不会被调用 我的意思是编程类 而不是 CSS 类 IE 不是 movi ngdiv 颜色 ff0000
  • Doc2Vec:区分句子和文档

    我只是在玩弄 gensim 的 Doc2Vec 分析 stackexchange 转储来分析问题的语义相似性以识别重复项 教程关于Doc2Vec 教程 https rare technologies com doc2vec tutorial
  • 如何在textarea元素中添加新行?

    我想在文本区域中添加换行符 我尝试过 n and br 标签但不工作 您可以看到上面的 HTML 代码 你能帮我在文本区域中插入换行符吗
  • Flutter - SingleChildScrollView 在打开键盘时不会滚动到列底部

    我在应用程序的许多地方使用了 SingleChildScrollView 一切都很好 但是 在下面的场景中 当键盘弹出时 它无法滚动到列的底部 Future
  • WiX EmbeddedChainer 示例?

    With Windows安装程序 http en wikipedia org wiki Windows Installer4 5 添加了一个新表微星嵌入式链接器 http msdn microsoft com en us library w
  • 在hadoop中将文件作为单个记录读取

    我有很大的不 对于小文件 我想使用合并文件输入格式来合并文件 以便每个文件数据在我的 MR 作业中作为单个记录 我已关注http yaseminavulous blogspot in 2011 03 many small input fil
  • YouTube API Android 自动启动

    我在我的应用程序中使用 YouTube API 我的问题是 视频不会自动播放 用户必须按播放按钮才能开始播放 My code setContentView R layout playerview demo YouTubePlayerView
  • jQuery 仅验证远程 onblur,但允许 onkeyup 休息 [重复]

    这个问题在这里已经有答案了 我正在尝试进行 jquery 远程验证以查看名称是否唯一 但我不想对每个 onkekup 事件进行远程验证 但是我想在模糊事件上执行此操作 当用户离开文本框时 但使用我下面的当前代码 它会在按下第二个字符后启动
  • OpenCV 和 QT 之间的集成

    我对 QT 和 OpenCV 开发完全是新手 一般来说是 C 我想使用 OpenCV 开发一个应用程序并使用 Qt 创建其界面 我不明白的是 如何整合这两个部分 我的意思是 为了开发 java 我只使用 eclipse 它为我提供了 JFr
  • Maven 构建成功,但没有在 Selenium 中执行测试

    编辑 我已将项目上传到 github 供任何想查看的人使用https github com hfunsh test automation git https github com hfunsh test automation git 我使用
  • 如何在 ASP.net core 中为自定义模型绑定器编写单元测试

    我已经为属性编写了自定义模型绑定器 现在我正在尝试编写相同的单元测试 但无法为模型绑定器创建对象 谁能帮我 下面是我必须编写测试的代码 public class JourneyTypesModelBinder IModelBinder pu
  • IIS Express - Visual Studio - 在同一端口上运行多个站点

    我有多个使用同一端口 8888 的 API 这些 API 是不同解决方案的一部分 http localhost 8888 api1 http localhost 8888 api1 http localhost 8888 api2 http
  • Matplotlib动画无法保存

    我正在尝试学习如何使用创建 matplotlib 动画Jake Vanderplas 的基本示例 http jakevdp github io blog 2012 08 18 matplotlib animation tutorial 但我
  • MSBuild 发布 dotnet 核心应用程序

    我的设置是 我有一个解决方案 其中包含不同的 dotnet4 6 应用程序 服务 现在我们在此解决方案中添加了一个 dotnet core 项目 我可以构建和调试它 但这不会创建可执行文件 在 Visual Studio 中 我可以右键单击
  • Java EE 异常:名称 java:comp 未在此上下文中绑定

    我在 Netbeans 7 2 1 中有 Java EE 应用程序 尝试部署它 构建结束正常 我在 Tomcat 日志中收到错误 Caused by javax naming NameNotFoundException Name java
  • 在 C# 中解析 Json Rest api 响应[重复]

    这个问题在这里已经有答案了 我正在尝试使用 C 从 Rest api json 响应中提取值 我有以下代码 client BaseUrl https api cloud appcelerator com request Resource v
  • 在我的表单 Symfony2 中创建重复字段

    我正在开展一个大学项目 我想让所有学生都参加 我创建了一个包含 3 个字段的模型 即日期 当前 布尔值 和学生 ID 现在 当我尝试从中生成表单时 它只会显示这 3 个字段 但是我想要班上所有的学生 因此 我为学生创建了一个循环 并创建了一
  • 存储聊天消息和文件的最佳方式

    我想知道您对将聊天消息存储在数据库中有何看法 我需要能够将其他内容绑定到它们 例如文件或联系人 并且使用数据库是我目前看到的最佳方法 文件也有同样的问题 因为它们可以绑定到聊天消息 我也必须将它们存储在数据库中 对于数千条消息和文件 我想知
  • Meteor:RangeError:超出最大调用堆栈大小

    我收到以下错误 W20141210 18 14 54 394 5 5 STDERR W20141210 18 14 54 395 5 5 STDERR Users removed meteor packages meteor tool 1
  • 如何构建 FFMPEG 并将其链接到 iOS?

    all 我知道 这里有很多关于 iOS 上的 FFMPEG 的问题 但没有一个答案适合我的情况 当我尝试在项目中链接 FFMPEG 时 每种情况都会发生一些奇怪的情况 所以请帮助我 我的任务是为 iOS 编写视频聊天应用程序 该应用程序使用