【问题标题】:MPEG2 transport stream PES stuffing bytes lengthMPEG2 传输流 PES 填充字节长度
【发布时间】:2019-03-29 20:39:30
【问题描述】:

我正在尝试用 C 语言编写一些代码,将 MPEG2 传输流解复用为基本流。我正在使用 ffmpeg 来比较我从代码生成的输出。除了一种情况外,我的程序的输出流与 ffmpeg 基本上是位精确的。 ffmpeg 似乎在有效载荷开始时(在 PES 标头和 PES 填充字节结束之后)从比特流中获取字节 0xff,而我将其排除为 PES 填充字节。

我的问题是:填充字节(0xff)的长度是在 PES 数据包变量中还是在 PES 标头中编码?

注意:我从 PES 数据包中读取有效负载数据的方式基本上是跳过所有初始 0xff,直到我遇到一个不是 0xff 的字节并从那里读取直到数据包的结尾

【问题讨论】:

  • 这是一个非常技术性的问题。为了确保互操作性,最好的解决方案是严格遵守 mpeg 系统标准。比特流的描述在文档 ISO/IEC 13818-1 中,但我不记得这些细节了。

标签: c mpeg2-ts


【解决方案1】:

H.222.0 (03/17)(第37页,表2-21)定义stuffing_byte序列的长度,通过PES_header_data_length计算,定义为(强调我的)

一个 8 位字段,指定被占用的字节总数 可选字段和任何填充字节包含在此 PES 数据包标头中。可选字段的存在在 PES_header_data_length 字段之前的字节。

因此,当您阅读 PES 标头时,请记下所有可选字段(例如,PTS_DTS_flagsESCR_flagES_rate_flag 和所有其他内容的各种组合)并减去长度这些可选字段的长度来自PES_header_data_length 中声明的长度。处理完所有可选字段并且剩余长度 n 仍不为零后,这意味着在有效负载到来之前仍有 n 填充字节要读取。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2014-12-11
    • 2017-06-03
    相关资源
    最近更新 更多