MPEG2 TSの仕様について調べた(2)

前回に続いてPATの解析で分かったPMTのデータ構造について見ていくことにする。

取り合えずまずPMT(PID=0x0101)のペイロードを見てみる。

00,02,b0,98,dc,30,e9,00,00,e1,00,f0,0c,09,04,00,
05,e0,60,c1,01,84,de,01,ef,02,e1,11,f0,06,52,01,
00,c8,01,47,0f,e1,12,f0,03,52,01,10,06,e1,14,f0,
08,52,01,30,fd,03,00,08,3d,0d,e8,10,f0,0f,52,01,
40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,0d,e8,11,
f0,0a,52,01,50,fd,05,00,0c,1f,ff,bf,0d,e8,1a,f0,
0a,52,01,5e,fd,05,00,0c,1f,ff,bf,0d,e8,1f,f0,0a,
52,01,5f,fd,05,00,0c,1f,ff,bf,0d,e8,16,f0,0a,52,
01,60,fd,05,00,0c,1f,ff,bf,0d,e8,1b,f0,0a,52,01,
6e,fd,05,00,0c,1f,ff,bf,ab,4a,4b,27,ff,ff,ff,ff,
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,
ff,ff,ff

それで仕様を見てみると、先頭の0x00が区切りに使われているのはPATと同じで続く1バイトの0x02がPMTの識別子になる。これが異なればPMTのPID取得に失敗している事になる。

続く2バイトはPATと同じで上位4ビットが1011で残りの12ビットでセクションの長さを規定している。この場合は0x0098 = 152バイトになる。確かに後ろの0xffが連続して出現する場所までのバイトの数は152になっていることが確認できた。

次の2バイトで前回も取得できた放送番組番号識別の値で0xdc30になっている。前回取得した値と同じだ。

次の1バイトもPATの時にも出てきた先頭2ビットが11、次の5ビットがバージョン番号、残りの1ビットがカレントネクスト指示であるバイトになる。今のデータでは0xe9 = 11101001なので、バージョンが0x14になっているが正しいことが分かる。

次の2バイトがセクション番号と最終セクション番号だが、これもPATと同じで0である。

この次からPMT独自の情報になる。
次の2バイト0xe100の先頭3ビットは111となるように規約で決められている。今1110000100000000なのでこれは正しく、残りの13ビットでPCR_PIDを指定している。

次の2バイトも似たように先頭の4ビットが1111であり残りの12ビットで番組情報長を規定している。今0xf00c = 1111000000001100なので先頭の条件を満たしており、1100 = 0x0c = 12バイトである。それが示すのは [09,04,00,05,e0,60,c1,01,84,de,01,ef] である。これは資料によれば以下のような構造をしているようだ。

照らし合わせてみるとタグは0x09であっている。
次の1バイトで記述子長を規定している。これは今0x04 = 4である。
次の2バイトは限定受信方式識別となっているが、これは今0x0005である。
続く2バイトでまた上位3ビットが111のPIDである。0xe060 = 1110000001100000なので正しく、限定受信PIDは0x0060となる。
残りの6バイト [c1,01,84,de,01,ef] は放送局固有の情報らしい。

後は【1バイトのストリーム識別子+2バイトのPID+2バイトの情報長+可変長の記述子領域】の繰り返し+最後にCRCとなる。データをこれにしたがって並び替えてみると以下になる。

02,e1,11,f0,06,52,01,00,c8,01,47,
0f,e1,12,f0,03,52,01,10,
06,e1,14,f0,08,52,01,30,fd,03,00,08,3d,
0d,e8,10,f0,0f,52,01,40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,
0d,e8,11,f0,0a,52,01,50,fd,05,00,0c,1f,ff,bf,
0d,e8,1a,f0,0a,52,01,5e,fd,05,00,0c,1f,ff,bf,
0d,e8,1f,f0,0a,52,01,5f,fd,05,00,0c,1f,ff,bf,
0d,e8,16,f0,0a,52,01,60,fd,05,00,0c,1f,ff,bf,
0d,e8,1b,f0,0a,52,01,6e,fd,05,00,0c,1f,ff,bf,
ab,4a,4b,27

これを各行について解析した結果が以下である。

===== analyze PMT payload =====
SecSize:152 ID:dc30 VER:20 NEXT:1 SECN:0 LSECN:0 PCR_PID:0100 LPI:000c DSC[TAG:09 LEN:04 CASI:0005 CAPID:0060 PF<c1,01,84,de,01,ef,>]
Data[FMT:02 EPID:0111 ESIL:0006 DF<52,01,00,c8,01,47,>]
Data[FMT:0f EPID:0112 ESIL:0003 DF<52,01,10,>]
Data[FMT:06 EPID:0114 ESIL:0008 DF<52,01,30,fd,03,00,08,3d,>]
Data[FMT:0d EPID:0810 ESIL:000f DF<52,01,40,fd,0a,00,0c,33,3f,00,03,00,00,ff,bf,>]
Data[FMT:0d EPID:0811 ESIL:000a DF<52,01,50,fd,05,00,0c,1f,ff,bf,>]
Data[FMT:0d EPID:081a ESIL:000a DF<52,01,5e,fd,05,00,0c,1f,ff,bf,>]
Data[FMT:0d EPID:081f ESIL:000a DF<52,01,5f,fd,05,00,0c,1f,ff,bf,>]
Data[FMT:0d EPID:0816 ESIL:000a DF<52,01,60,fd,05,00,0c,1f,ff,bf,>]
Data[FMT:0d EPID:081b ESIL:000a DF<52,01,6e,fd,05,00,0c,1f,ff,bf,>]
CRC:ab4a4b27

今日は取り合えずここまで。

0 コメント:

コメントを投稿