iOS设备上的原始H264 NALU硬件解码

9
我从一个IP摄像头(通过Live555)接收原始的H.264 NALU数据,我想使用硬件解码这些数据,因为FFmpeg虽然很好用但速度太慢了(相机传感器很大)。
我唯一看到的解决方案是将NALU数据写入某个视频容器文件,例如MPEG-4,然后使用AVAssetReader读取并解码该文件。
我是否偏离了正确的方向?有人成功地从流中解码H.264 NALU数据吗?有人有关于如何将NALU数据写入MPEG-4文件的提示吗?还有其他的想法吗?
2个回答

6

正如Matt所提到的,没有直接访问苹果H264解码器的方法。

但是,我成功地使用ffmpeg和h264解码。像你提到的那样,我已经构建了带有LGPL的ffmpeg,能够在iPad和iPhone上实时解码H264流,而且没有延迟。ffmpeg不需要什么花哨的东西,你可以找到一堆标准的c++解码代码,在iOS上也能很好地工作。此外,在我的情况下,H264 NALU是通过RTP/RTSP实时传递的。

此外,如果是我,我会通过xcode instruments来真正看出你瓶颈所在的位置,但我会非常惊讶它是否在ffmpeg解码步骤中... 希望这些信息有所帮助。


2
感谢您确认使用ffmpeg成功解码实时高清视频。我的设置与您相同--RTSP/RTP+ ffmpeg。在阅读了您的帖子之后,我仔细查看并发现我的服务器以1,500,000 bps的比特率发送2144 x 1944视频。如果我将比特率降至350,000 bps,则非IDR帧解码(avcodec_decode_video2)大约需要80毫秒,Yuv->RGB颜色转换(sws_scale)大约需要65毫秒。这些数字来自iPad 3。我很想听听您是否认为我可以从iPad中挤出更多。谢谢! - Tim
3
您的解码步骤已经非常快了。然而,我强烈建议您使用OpenGL着色器代替ffmpeg执行YUV-RGB转换,这样可以将该过程卸载到GPU上。 - Aki
@Aki:你在一个被苹果批准上架到App Store的应用中使用过这个吗? - freya
@JakobAlminde - 是的,我做到了。该应用程序仍然在应用商店中。只需确保您遵守http://www.ffmpeg.org/legal.html上发布的LGPL要求即可。 - Aki
谢谢,Aki!我最担心的是他们可能因为使用 RTP 而不是 HTTP Live Streaming 而拒绝它。 - freya
你是安全的。iOS上的一些知名应用程序使用RTP进行音频/视频会议的实时流传输,这与从服务器流传输mp4文件的情况不同,此时需要使用HTTP Live Streaming。 - Aki

1
很抱歉,目前您无法这样做。请随意向Apple提交一个radar,说明您想要访问硬件解码器的原因。它肯定会被标记为重复的:-)。我认为,由于许可证原因,他们无法提供此类对硬件编解码器的访问权限。

所以,你将不得不使用软件解码器。请注意,如果你要发布到App Store,那么你需要使用非GPL许可证的东西(除非你也想开源你的应用程序)。


哪一部分无法完成?无论数据是在内存中还是在电影文件中,H.264硬件解码总体上都无法完成吗?关于GPL,FFmpeg可以构建为LGPL许可证,这在iTMS中是可管理的。谢谢! - Tim
抱歉,我只是指硬件解码。如果它在文件中,那么你可以播放它并使用硬件解码器。虽然LGPL没问题,但这仍不理想,因为你必须提供可链接的对象文件。 - mattjgalloway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接