0

我正在通过 RTP 接收 MPEG2-TS 流。但我无法找到特定帧的结尾。当只有 MPEG2 流通过 RTP 时,当任何帧结束时,RTP 标头中的标记位设置为 1,但在这种情况下,标记位始终为 0。谁能帮助我,我怎样才能找到帧结尾以防万一MPEG2-TS?

4

1 回答 1

3

根据 RFC 2250 M 位应指示在 mpeg-ts 的情况下帧的结束。(3.3 RTP Fixed Header for MPEG ES encapsulation)但是很多解码器可能没有把它放在头中。

找到帧开始的唯一其他方法是解码 188 字节 mpeg-ts 数据包的标头。mpeg-ts 包含“有效负载单元开始指示符”。

所以你的算法会像

  1. RTP 数据包含整数个 mpeg-ts 数据包。
  2. 每个数据包以 0x47 开头
  3. 检查每个数据包的“有效负载单元开始指示器”字段
  4. if "payload unit start indicator == 1" 检查 PES 或 PSI
  5. 如果 PSI 则忽略数据包并继续步骤 1,否则转到下一步
  6. 对于 PES 数据包检查“Stream id”,如果它的视频你击中了一个新的帧。
于 2012-12-17T06:18:28.303 回答