3

EN 300 468で指定されている EIT テーブル セクションを構築しようとしています。パケットを (Java で) データ構造に正常に解析し、各パケットのペイロードにアクセスできます。

テーブル セクションがパケット間でどのように分割されているか理解できません。仕様がやや混乱/不確実です。TS パケットのストリームを PID でフィルタリングできると仮定して、そのようなテーブルを構築するプロセスは何ですか?

設定されていることを理解しpayload_unit_start_indicatorています。ペイロード フィールドの最初のバイトが新しいセクションの最初のバイトへのポインタであることを示しています。それはペイロードの先頭からのオフセットですか?

たとえば、TS パケットを受信し、それをセクションの開始として識別した場合、バイトを配列に読み取り、ヘッダーからセクションの長さを決定してから、ますます多くの TS パケット ペイロードで配列を埋め続けますか?まで同じ PID のbytesRead == sectionLength?

読んでくれてありがとう、アドバイスや助けがあれば大歓迎です!:)

4

2 に答える 2

3

ここでは、トランスポート パケット(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    |
---------------------------------------    ---------------------
于 2014-08-11T07:38:32.787 に答える
0

en300 468 仕様から:

セクションは TS パケットのペイロードの先頭から開始できますが、必須ではありません。これは、TS パケットのペイロードの最初のセクションの開始が pointer_field によって示されるためです。

したがって、セクションの開始は実際にはペイロードからのオフセットです。

uint8_t* section_start = payload + *payload + 1
于 2014-12-17T12:04:15.770 に答える