MPEG-TS PSI解析

时间:2014-08-06 21:00:56

标签: java stream mpeg dvb v4l

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

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

我理解正在设置的payload_unit_start_indicator,表示有效负载字段的第一个字节是指向新节的第一个字节的指针,是指从有效负载的起始点开始的偏移量吗? / em>的

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

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

2 个答案:

答案 0 :(得分:3)

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

  

假设可以过滤TS数据包流,该过程是什么   PID,构建这样的表?

嗯,你几乎钉了它:

要从流构建节,您必须从相同的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    |
---------------------------------------    ---------------------

答案 1 :(得分:0)

来自en300 468规范:

  

段可以从TS包的有效载荷的开始处开始,但是   这不是一个要求,因为第一节的开头   指针的有效载荷由pointer_field指向。

因此,节开始实际上是与有效载荷的偏移:

uint8_t* section_start = payload + *payload + 1