MPEG 2-TSとPESの詳細

MPEG 2-TSについて調べた。今まではWebの情報とffmpegのソースコードを見て理解してきたが、デジタル放送教科書を拾ってきて読んだら、ソースコードの意味がよく分かった。まだ、紙資源は必要だ。

まずMPEG−2には「MPEG-2システム」という概念があり、その中にフォーマットとしてPSとTSがある。このPSとTSはPESを入れる入れ物でヘッダを持つ。PESとは符号化したばっかりのものであるESをパケット化したもので、これもまたヘッダを持つ。PSは蓄積メディア向けのヘッダであり、TSは放送メディア向けのヘッダである。

このPESにPTSとDTSという2つタイムスタンプが入っている。このPESがPSには複数入っているのだが、TSはPESを分割して入れてあるらしい。今日知った。

今まで全てのTSにPESヘッダが入っていると思ってパースして変になっていた。で、どのTSにPESヘッダが入っているのか分からないじゃないか、と思っていたら、TSにペイロードユニットスタートインジケータというビットがあり、このビットが1だとPESヘッダが入っていることが分かるらしい。

といってもPESヘッダはTSペイロードの途中に入ってもいいので、どこから始まりなのか分からんじゃないか、と思っていたらPESヘッダは必ず0x000001で始まるらしいことが分かった。

TSでも巡回カウンターというシーケンス番号っぽいものを持っているのだが、4ビットしか持たないため16パケット以上の損失が分からない。今回の実験ではMTU 1500としているため188バイト×7で7つのTSパケットを1データグラムに持つ。つまり、1データグラム損失してしまうと7進んでしまうのでTSの巡回カウンターでは損失は検知できても量まではよくわからない。やはりPTSで判断すべきか。

PTSは90KHzのクロックで計測した値を33ビット長で表すらしい。90kHzの理由はPALとNTSCの公約数で、33ビット長は24時間を表現するためらしい。計算すると確かに26時間以上表現できることが分かる。

PESヘッダを解析していくと、PESのペイロードのサイズは大きいもので65,508バイトあたりであった。つまり1つのPESを運ぶためには50データグラムのRTPの転送に成功する必要があるらしい。このPESペイロードに抜けができた場合、つまり損失があった場合にMPEGデコーダはどのような挙動をするのだろうか。

やはり、PES丸ごと捨ててしまうのだろうか。

参考:
MPEG-2システム – Wikipedia

MPEG-2 TSの概要 前編

MPEG-2 TSの概要 後編

フォーマット辞典 映像編 – しいしせねっと

MPEG技術解説 -第3章 MPEG-2 – [3.1 MPEG-2システム]

MPEG2/TS

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>