我正在通过 RTP 接收 MPEG2-TS 流。但我无法找到特定帧的结尾。当只有 MPEG2 流通过 RTP 时,当任何帧结束时,RTP 标头中的标记位设置为 1,但在这种情况下,标记位始终为 0。谁能帮助我,我怎样才能找到帧结尾以防万一MPEG2-TS?
问问题
2523 次
1 回答
3
根据 RFC 2250 M 位应指示在 mpeg-ts 的情况下帧的结束。(3.3 RTP Fixed Header for MPEG ES encapsulation)但是很多解码器可能没有把它放在头中。
找到帧开始的唯一其他方法是解码 188 字节 mpeg-ts 数据包的标头。mpeg-ts 包含“有效负载单元开始指示符”。
所以你的算法会像
- RTP 数据包含整数个 mpeg-ts 数据包。
- 每个数据包以 0x47 开头
- 检查每个数据包的“有效负载单元开始指示器”字段
- if "payload unit start indicator == 1" 检查 PES 或 PSI
- 如果 PSI 则忽略数据包并继续步骤 1,否则转到下一步
- 对于 PES 数据包检查“Stream id”,如果它的视频你击中了一个新的帧。
于 2012-12-17T06:18:28.303 回答