Java MPEG-TS PSI解析

Java MPEG-TS PSI解析,java,stream,mpeg,dvb,v4l,Java,Stream,Mpeg,Dvb,V4l,我正在尝试按照中的指定构造EIT表部分。我已经成功地将数据包解析为数据结构(Java),并且可以访问每个数据包的有效负载 我不明白表格部分是如何在数据包之间分割的,规范有点混乱/不确定。假设可以通过PID过滤TS数据包流,构造这样一个表的过程是什么 据我所知,正在设置的有效负载\u单元\u开始\u指示器指示有效负载字段的第一个字节是指向新部分的第一个字节的指针,这是有效负载开始的偏移量吗 例如,如果我收到一个TS数据包,并将其标识为一个节的开始,那么我是否将字节读入一个数组,从报头确定节的长度,

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

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

据我所知,正在设置的
有效负载\u单元\u开始\u指示器
指示有效负载字段的第一个字节是指向新部分的第一个字节的指针,这是有效负载开始的偏移量吗

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

感谢阅读,任何建议或帮助都将不胜感激

您可以可视化传输包(TP)的结构

假设可以通过以下方式过滤TS数据包流,那么过程是什么 PID,构造这样一个表

好吧,你说得很对:

要从流构建节,必须从同一PID累积TPs。正如您所猜测的,
payload\u unit\u start\u指示器
指示新区段的开始。但是,它不是一个偏移量

然后,正如您所说,您只需继续收集相同PID的TPs的有效负载,直到
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数据包的有效负载由指针_字段指向

因此,段起始实际上是有效载荷的偏移量:

uint8_t* section_start = payload + *payload + 1