iPad / iOS具有视频流支持,例如H.264使用MPMoviePlayerController
等,但我通过自定义的专有流接收H.264数据,需要在软实时场景中对其进行解码。
可以通过任何方式访问iPad / iOS的视频解码器来解码这些数据吗?
更新:显然是iOS 4.0核心媒体框架supports decoding frames并且知道H.264,但是没有示例代码也无法看到我实际应该调用的内容用于实际解码。
更新(十年后!)
对于在Google上搜索的任何人,您最近都会使用“VideoToolbox”在iOS中执行此操作。
答案 0 :(得分:11)
在提出Apple DTS问题之后,事实证明目前无法解码来自自定义流源的视频数据。
我将为此提交增强请求。
答案 1 :(得分:6)
如果您仍然遇到问题,我建议您查看 libavcodec 以解码数据(可在ffmpeg project上找到)。
dranger上提供了很棒的ffmpeg教程,展示了如何正确解码(通过libavcodec)和显示视频数据(使用libsdl)等等。
答案 2 :(得分:2)
有两种解决方案
要开始工作,基本上是从https://developer.apple.com/videos/play/wwdc2014/513/开始!
我不得不说,这确实是“正确和更好”的解决方案。
有很多开始的方法。 (一件绝对令人惊奇的新事物是sunlubo制造的SWIFT ffmpeg:https://github.com/sunlubo/SwiftFFmpeg)
请注意“ ffmpeg”方法,简而言之,ffmpeg / iOS存在许多法律/许可问题。可以搜索并了解这些问题。
但是,从技术角度来看,如今确实可以直接将ffmpeg编译到iOS中,并在iOS代码中原始使用它。 (使用C库可能是最简单的。)
我们只是做了一个巨大的项目,就在做这个以及其他方法。 (我再也不想见FFmpeg了!)
您实际上可以使用FFmpeg在iOS中实现实际的硬件解码。
我们发现它太不可思议了。并且需要在FFmpeg中修复几个错误。 (我希望我再也见不到videotoolbox.c
了:/)
再一次,您在iOS中进行硬件解码的两个选项是
“手动”执行AVFoundation / VideoToolbox。
使用FFmpeg。
第2项令人难以置信,并且花费大量时间。项目1使用大量时间。艰难的选择:/
答案 3 :(得分:1)
您是否尝试将从协议中收到的H.264流写入您不断附加的临时文件,然后在编写足够的字节以避免缓冲播放后,将临时文件的URL传递给MPMoviePlayerController ?
答案 4 :(得分: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 to raw不应该那么困难!