iPad/iOS支持使用MPMoviePlayerController
等方式对H.264进行视频流播放,但我通过自定义专有流接收H.264数据,并需要在软实时场景下进行解码。
iPad/iOS的视频解码器能否以任何方式访问以解码此数据?
更新: 显然,iOS 4.0 Core Media框架支持解码帧并知道H.264,但没有示例代码,我也无法看到实际应该调用什么进行解码。
更新(十年后!)
对于任何在这里搜索的人,现在在iOS中可以使用"VideoToolbox"来实现此功能。
iPad/iOS支持使用MPMoviePlayerController
等方式对H.264进行视频流播放,但我通过自定义专有流接收H.264数据,并需要在软实时场景下进行解码。
iPad/iOS的视频解码器能否以任何方式访问以解码此数据?
更新: 显然,iOS 4.0 Core Media框架支持解码帧并知道H.264,但没有示例代码,我也无法看到实际应该调用什么进行解码。
更新(十年后!)
对于任何在这里搜索的人,现在在iOS中可以使用"VideoToolbox"来实现此功能。
这里有两种解决方案:
想要开始使用这个方法,你首先需要参考 https://developer.apple.com/videos/play/wwdc2014/513/ 。祝你好运!
我必须说,这真的是“正确而更好的”解决方案。
有许多方法可以开始使用。其中一个绝对令人惊叹的新事物是由 sunlubo 制作的 SWIFT ffmpeg:https://github.com/sunlubo/SwiftFFmpeg 。
请注意,“ffmpeg”方法存在一些与 ffmpeg / iOS 相关的法律/许可问题。有一些相关问题可以搜索并阅读。
然而在技术方面,现在确实可以将 ffmpeg 编译到 iOS 中,并在 iOS 代码中使用它。(使用 C 库可能是最容易的方法。)
我们刚刚完成了一个巨大的项目,就是使用这种方法以及其他的方法。(我再也不想看到 FFmpeg 了!)
实际上,在 iOS 中可以使用 FFmpeg 进行硬件解码。
我们发现这非常麻烦。并且需要修复 FFmpeg 中的一些错误。(我希望我永远不要再见到videotoolbox.c
:/ )
因此,iOS 硬件解码的两个选项如下:
手动实现 AVFoundation / VideoToolbox。
使用 FFmpeg。
选项 2 非常琐碎,需要很多时间。选项 1 花费大量时间。选择真的很难 :/
iOS 8版本中,您可以使用视频工具箱(https://developer.apple.com/reference/videotoolbox)将H264解码为原始帧。VT API是硬件加速的,与libavcodec相比,性能更佳。如果您想播放这些帧或生成预览,则可以使用基于eagl的渲染器进行播放。我编写了一个示例应用程序,可以将原始帧从raw转换为h.264格式(https://github.com/manishganvir/iOS-h264Hw-Toolbox)。将h.264转换为raw并不难!
你尝试过将从协议接收到的H.264流写入一个临时文件中,然后不断地追加内容,一旦写入足够的字节以避免缓冲播放,就将临时文件的URL传递给MPMoviePlayerController吗?
CVImageBuffer
,但我并不真正明白哪些函数是用于实际解码的。 - Georg Fritzsche