MPEG-TS PSI parsing



我正在尝试构建en300 468中指定的EIT表部分。我已经成功地将数据包解析为数据结构(在Java中),并且可以访问每个数据包的有效负载。

我不明白表部分是如何在包之间分割的,规范有点混乱/不确定。假设可以通过PID过滤TS数据包流来构建这样一个表,该过程是什么?

我理解payload_unit_start_indicator被设置,表明有效载荷字段的第一个字节是指向新节的第一个字节的指针,是有效载荷开始的偏移量吗?

如果例如我收到一个TS数据包,并且我将其识别为一个部分的开始,那么我是否将字节读取到数组中,从头中确定部分长度,然后继续用越来越多的相同PID的TS数据包有效载荷填充我的数组,直到bytesRead == sectionLength ?

感谢您的阅读,任何建议或帮助都将非常感激!:)

在这里您可以看到传输数据包 (TP)的结构。

过程是什么,假设一个TS数据包流可以通过

你说的很对:

要从流中构建一个区段,必须从相同的PID中累积tp。正如您所猜测的,payload_unit_start_indicator表示新部分的开始。然而,不是偏移量。

那么就像你说的,你只需要继续收集相同PID的tp的有效负载,直到payloadBytesRead == sectionLength

Transport Packets (188 bytes each):
---------------------------
|Header|     Payload1     |            TP1: payload_unit_start_indicator = 1
---------------------------
^
0x47 (Sync Byte)
---------------------------
|Header|     Payload2     |            TP2: payload_unit_start_indicator = 0
---------------------------
... 
Section (sectionLength):
---------------------------------------    ---------------------
|     Payload1     |     Payload2     | ...|      Payload N    |
---------------------------------------    ---------------------

来自en300 468规范:

节可以从TS包的有效负载开始,但是这不是必需的,因为在第一部分的开头TS报文的有效载荷由pointer_field指定。

section的起始点实际上是有效载荷的偏移量:

uint8_t* section_start = payload + *payload + 1

相关内容

  • 没有找到相关文章

最新更新