我正在尝试构建EN 300 468中指定的EIT表节。我已经成功地将数据包解析成数据结构(在Java中),并且可以访问每个数据包的有效负载。
我不明白表部分是如何在数据包中被分割的,规范有点混乱/不确定。假设可以通过PID过滤TS数据包流,那么构建这样一个表的过程是什么?
我理解正在设置的payload_unit_start_indicator,表示有效负载字段的第一个字节是指向新部分的第一个字节的指针,这是与有效负载开始时的偏移量吗?
例如,如果我收到一个TS数据包,并将它标识为节的开始,那么我是否将字节读取到数组中,从标头中确定节长度,然后将越来越多的相同PID的TS数据包有效负载填充到中?
谢谢你的阅读,任何建议或帮助都将不胜感激!)
发布于 2014-08-11 07:38:32
这里您可以可视化传输数据包(TP)的结构。
假设可以通过PID过滤TS数据包流,那么构建这样一个表的过程是什么?
好吧,你说得差不多了:
要从流构建一个区段,您必须从相同的PID积累TPs。正如您所猜到的,payload_unit_start_indicator表示一个新部分的开始。然而,这是而不是偏移量。
然后,正如您所说的,您只需继续收集相同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 |
--------------------------------------- ---------------------发布于 2014-12-17 12:04:15
来自en300 468规范:
节可以在TS分组的有效负载开始时开始,但这不是一个要求,因为TS数据包的有效负载中的第一个部分的开始是由pointer_field指示的。
因此,节start实际上是与有效负载的偏移量:
uint8_t* section_start = payload + *payload + 1https://stackoverflow.com/questions/25170096
复制相似问题