在 iOS(和 Airplay)上为硬件加速不受支持的容器设计一个库

Posted

技术标签:

【中文标题】在 iOS(和 Airplay)上为硬件加速不受支持的容器设计一个库【英文标题】:Designing a library for Hardware-accelerated unsupported containers on iOS (and Airplay) 【发布时间】:2014-12-27 05:07:29 【问题描述】:

我正在尝试构建一个开源库,只要支持轨道格式/编解码器,它就允许 ios 设备使用不受支持的容器播放文件。例如:带有 H264 视频轨道和 AAC 音频轨道的 Matroska 视频 (MKV) 文件。我正在制作一个肯定可以使用该功能的应用程序,我敢打赌还有更多可以从中受益的应用程序。非常感谢您可以提供的任何帮助(通过在此处发表评论或 - 甚至更好 - 与我合作)。这是我目前所处的位置:

我做了一些研究,试图找出像 AVPlayerHD 或 Infuse 这样的播放器如何能够播放非标准容器并且仍然具有硬件加速。似乎他们对整个视频文件的小块进行了转码,然后依次播放。

这是一个很好的解决方案。但是,如果您想将该视频扔到 Apple TV 上,事情就不会按计划进行,因为该视频实际上是一堆作为播放列表播放的较小块。 This site 有更多信息,但其核心是流式传输到 Apple TV 本质上是渐进式下载正在播放的 MP4/MPV 文件。

我在想一种流媒体代理是要走的路。在播放方面,我一直在研究 AVSampleBufferDisplayLayer(更多信息here)作为播放视频轨道的一种方式。我还没有到音频。考虑到 AirPlay 方面,事情会变得很有趣:通过“容器代理”,我们可以使任何文件看起来都具有正确的容器,而不会影响转码的文件大小。

似乎 GStreamer 可能是代理的一个很好的起点。我需要阅读它;我以前从未使用过它。对于可用于 App Store 应用程序的库,这种方法听起来不错吗?

谢谢!

【问题讨论】:

【参考方案1】:

终于有一些额外的时间来研究 GStreamer。特别是this article about how it is already updated to use the hardware decoding provided by iOS 8。所以不需要开发这个; GStreamer 似乎是答案。

谢谢!

【讨论】:

【参考方案2】:

iOS 8 中不再需要“chucked”解决方案。您只需设置视频解码会话并传入 NALU。

https://developer.apple.com/videos/wwdc/2014/#513

【讨论】:

是的,我已将其链接在我原帖的第三段中。但这并不能解决 AirPlay 方面的问题。看起来 GStreamer 是要走的路。

以上是关于在 iOS(和 Airplay)上为硬件加速不受支持的容器设计一个库的主要内容,如果未能解决你的问题,请参考以下文章

Apple AirPlay 镜像 SDK

是否可以在 iOS 上为相同的布局锚定义范围约束?

iOS 和 AirPlay 上的 Widevine 视频流

iOS 中针对airplay、蓝牙和相关技术的近似音频延迟

在 iOS 上使用 Airplay 时显示推送通知?

允许 AirPlay 支持和 iOS 4.2、iOS 4.3