在iOS中通过RTP解码实时H.264流

时间:2015-02-19 17:16:48

标签: ios avfoundation h.264 rtp mpeg-4

我想做什么

通过网络流式传输实时H.264数据,并按照WWDC video中的说明使用硬件加速对其进行解码,以便我可以在我的iOS应用中实时播放。

我尝试了什么

我已经广泛阅读了RFC 6184,并且相信我已经把头包裹起来了。我假设我收到的RTP数据包采用RFC中指定的格式。我也假设流将处于非交错模式。因此,我的应用程序读入每个nalu数据包并确定它是单个nalu数据包(类型< 24),聚合数据包(类型= 24)还是分段数据包(类型= 28)。从那里我只记录我收到的nalu类型的数据,因为我想确保数据以我期望的形式出现并在继续之前进行适当的解析。

会发生什么

当我记录nalu类型时,我得到类型为0,1,2的nal单位,偶尔有PPS nalus,如图所示。

Log of NAL unit packet types received  我知道我应该收到一个SPS和一个PPS作为前两个数据包,所以我知道有些问题。

我的问题

我正在使用VLC来传输数据。我在H.264中使用封装格式MPEG TS对其进行转码。现在,当我第一次开始这个时,我想我只要我正在流式传输H.264就会采用RFC中指定的格式。但在对MPEG TS及其如何作为容器格式进行一些研究后,我认为我的流不是RFC中指定的格式。

如果我实际上以不同于RFC的格式传输视频,我将如何使用VLC(或等效程序)以RFC的形式传输数据?所有关于SO的帖子,如this和WWDC视频都谈到为每个nalu寻找起始码(0x0001或0x000001),但RFC从未提及过。所以我不确定这是否是我得到奇怪结果的原因是由于我没有寻找开始代码或者是因为我没有收到RFC格式的数据。我非常感谢任何帮助,特别是因为我不熟悉视频解码,感觉我几乎就在那里!

0 个答案:

没有答案