簡體   English   中英

MPEG-TS PSI解析

[英]MPEG-TS PSI parsing

我正在嘗試按照EN 300 468中的規定構建EIT表部分。 我已經成功地將數據包解析為數據結構(在Java中),並且可以訪問每個數據包的有效負載。

我不明白表格部分是如何分割的,規范有點混亂/不確定。 假設可以通過PID過濾TS數據包流來構建這樣的表,那么該過程是什么?

我理解設置的payload_unit_start_indicator ,表示有效載荷字段的第一個字節是指向新節的第一個字節的指針, 是指從有效載荷的起始點開始的偏移量?

例如,如果我收到一個TS數據包,並將其識別為部分的開頭,那么我是否將字節讀入數組,從頭部確定部分長度,然后繼續使用越來越多的TS數據包有效負載填充我的數組相同的PID,直到bytesRead == sectionLength

感謝閱讀,任何建議或幫助將非常感謝! :)

在這里,您可以看到傳輸包 (TP)的結構。

假設可以通過PID過濾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分組的有效載荷中的第一部分的開始。

因此,部分開始實際上是與有效負載的偏移:

uint8_t* section_start = payload + *payload + 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM