用于封装到传输流中的mpeg4 AVC视频的PES结构

时间:2015-09-25 02:12:09

标签: ffmpeg h.264 hls mpeg-4 mpeg2-ts

我想了解当mpeg4 AVC / H.264编码视频封装到传输流容器(用于HTTP直播流等传输协议)时,I,B,P图像是如何打包和复用的。对于mpeg2编解码器视频,据我所知,每个PES都以新的TS数据包开始,但在单个PES中可能存在I,B,P图像的重叠。

但对于mpeg4 AVC视频,任何人都可以解释我,B,P帧是如何多路复用到PES的吗?它们是否可以在PES中重叠,这意味着单个TS数据包丢失可能会丢失多个I / B / P帧?我试图从RFC和其他一些文档中查看有效负载结构,但无法理解。

2 个答案:

答案 0 :(得分:1)

I,B,P帧不在PES包中复用,因为不同的帧具有不同的DTS和PTS,但在单个PES包中只能指定一对DTS / PTS。复用器的作用是将帧(包括I,B或P)封装在PES包中,将DTS和PTS放在数据包上,然后就是这样。下一帧将打包在另一个PES中。有时,根据编码器和复用器,当帧非常大时(例如高清视频的I帧),它被打包成具有相同DTS / PTS的多个PES包。

然而,h264流的SPS和PPS与I帧一起打包到单个PES包中。这意味着如果包含SPS和PPS的TS数据包丢失,则解码器必须等到下一个SPS和PPS被传输,因为没有它们就无法解码流。

请注意,这只是大多数(如果不是全部)编码器和多路复用器的工作方式。该标准没有(也不可能)描述每一个案例。

答案 1 :(得分:0)

作为快速摘要,通常在广播应用中,PES不会包含多个视频帧数据。因此,当单个TS数据包丢失时,我们不应该丢失多个帧细节。话虽如此,分组丢失将影响后续帧的质量,如果恰好是参考帧,则失真将非常高。

因此在解码器方面,我们需要有纠错机制。前向纠错通常是连续视频传输系统中的错误恢复机制。此外,当数据包丢失时,人们会尝试重新传输丢失的数据包。只要网络延迟较低,这种方法就可以正常工作。但是对于交互式电视,这些传统的错误恢复机制可能不太适合。