MPEG-2 TSのGOPとPICTUREをパース

VLCが吐いたMPEG TSからPESを取り出してESを取り出してMPEG VIDEO解析。スタートコードという0x000001b8などが来るまで待って、シーケンスヘッダということが分かるからその後は解析、という手順。

[code]
0:0:00:00 1 0 0 I 3 P 1 B 2 B 6 P 4 B 9 P 7 B 8 B 12 P 10 B 11 B
0:0:00:13 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:00:28 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:01:13 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:01:28 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:02:13 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:02:28 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:03:13 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B
0:0:03:28 1 0 0 I 1 P
0:0:04:00 1 0 0 I 3 P 1 B 2 B 6 P 4 B 5 B 9 P 7 B 8 B 12 P 10 B 11 B 15 P 13 B 14 B
0:0:04:16 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B 17 P 15 B 16 B
0:0:05:04 0 0 2 I 0 B 1 B 5 P 3 B 4 B 8 P 6 B 7 B 11 P 9 B 10 B 14 P 12 B 13 B 17 P 15 B 16 B
0:0:05:22 0 0 2 I 0 B 1 B 5 P 3 B 4 B 7 P 6 B
[/code]

まずはGOPヘッダとPICTUREヘッダまでを解析。hour:minute:second:picture closed_gop broken_link (temporal_referece picture_coding_type)の順序。

GOPがIピクチャーから始まっていなかったり、GOPが15ピクチャー以上あったり。この方法で比較してはいけないということが分かってきた。これ以上はスライスレイヤ・マクロブロックレイヤ・ブロックレイヤに下ることになる。これをソースと比較してするのは難しいのではないかと思う。

途中損失した場合の挙動はデコーダごとに異なるので、既存のデコーダを使って静止画をdumpさせて単純にSNR比較した方がいい気がする。

評価方法は別にして、IピクチャPピクチャBピクチャの探索の仕方が分かったのは大きい。Iピクチャは大事なので誤り訂正を付加したり、Bピクチャを捨ててしまおうと考えていた時期があったが、単にTSを見るだけでは無理だということが分かった。TSからESを取り出して、かつPICTUREヘッダを探してピクチャを見つけ、それに依存する下位のレイヤを全て抽出する作業が必要になってくる。

再生にPESヘッダが必要なのか疑問になってきた。DTS、PTSなくてもGOPにtime_codeあるし。ここら辺がよく分からない。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>