6

对于解复用器,输入是字节流。一切都只是零和一。现在解析器如何区分数据中的 0x47 和作为传输流标头的同步字节的 0x47?

例如,如果 demux 接收到的数据是 0x47 0x56 0xef 0x47 ... 它如何知道哪个 0x47 是同步字节?

它是否在同步字节之后寻找任何额外的位以确保它读取的 0x47 确实是标头的开头?机制是什么?

这对于任何解析器都是如此。H.264 解析器检查 NAL 起始码。它如何区分实际的起始码和数据中的起始码。因为对于解析器来说,一切都只是字节。

谢谢你。

4

2 回答 2

6

同步字节的发送正好相隔 188 个字节。如果0x47遇到,并且 188 字节后,没有另一个0x47. 这不是一个同步字节。接下来它等待 PAT 或 PMT,因为这些数据包具有校验和。因此,如果校验和匹配,并且0x47每 188 个字节同步一次流。意外发生的几率是天文数字。如果确实如此,最终在尝试解码流时会出现其他问题,并且该过程将重新开始。

在 h.264 的情况下。开始代码000001在流中是不合法的。如果编码器确实产生了这个字节序列,它会被转义为00000301,并且解码器知道在 a03之后忽略 a0000

于 2015-09-04T01:09:15.220 回答
0

首先,解析器应该为解码器识别一个合适的数据包边界以开始解码。解析器通过以下方式做到这一点:

  • 连续识别 3 个同步字 (0x47)。
  • 2 个同步字之间的距离为 188 字节。

如果满足上述 2 个条件,则解析器会假定一个适当的数据包边界然后开始。

请更正或更新。

于 2015-12-14T06:14:43.900 回答