MPEG2传输流PES填充字节长度

时间:2019-03-29 20:39:31

标签: c mpeg2-ts

我正在尝试用C编写一些代码,以将MPEG2传输流解复用为基本流。我正在使用ffmpeg比较我从代码生成的输出。我的程序的输出流基本上与ffmpeg完全一样,除了一种情况。 ffmpeg似乎是在有效负载的开头(在PES标头和PES填充字节的末尾之后)从比特流中提取字节0xff的,而我将其排除为PES填充字节。

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

注意:我从PES数据包读取有效载荷数据的方式是,基本上跳过所有初始的0xff,直到遇到非0xff的字节,然后从那里读取数据包的末尾为止

1 个答案:

答案 0 :(得分:2)

H.222.0 (03/17)(第2页,第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个填充字节要读取。