我正在尝试用C语言编写一些代码,将MPEG2传输流多路分解为基本流。我使用ffmpeg来比较我从代码中生成的输出。除了一种情况外,我的程序的输出流与ffmpeg基本上是位精确的。ffmpeg似乎在有效负载开始时(在PES报头和PES填充字节的末尾之后)从位流中提取字节0xff,而我将其排除为PES填充字节。
我的问题是: PES数据包中填充字节(0xff)的长度是可变的,还是也编码在PES报头中?
注意:我从PES包中读取有效载荷数据的方式基本上是跳过所有初始0xff,直到我遇到一个非0xff的字节,并从那里读取到包的末尾
发布于 2019-03-30 05:07:45
H.222.0 (03/17) (第37页,表2-21)定义了通过PES_header_data_length计算的stuffing_byte序列的长度,其定义为(强调矿)
一个8位字段,指定由可选字段和包含在该PES分组报头中的任何填充字节占用的字节总数。在PES_header_data_length字段之前的字节中指示是否存在可选字段。
因此,当您阅读PES头时,您会注意到所有可选字段(例如,PTS_DTS_flags、ESCR_flag、ES_rate_flag和所有其他内容的各种组合),并从PES_header_data_length中声明的长度中减去这些可选字段的长度。处理完所有可选字段后,剩余的长度n仍然不为零,这意味着在有效负载到来之前,仍有n填充字节需要读取。
https://stackoverflow.com/questions/55425190
复制相似问题