MPEG2-TS 再生時に PCR Wrap-around でノイズ

こんにちは、わび~です。

最近 MPEG2-TS に関するお問い合わせが増加しています。地上波デジタルの普及が進んでいることをひしひしと感じます。

日本のデジタル放送の規格である ISDB ではストリームを MPEG2-TS で多重化しています。MPEG2-TS には PCR と呼ばれる33bit のタイムコードが付加されており、90KHz でカウントアップされていきます。

90KHz で 33bit ですので、2^33/90000 = 95443.7 sec = 26.5 hour ということで、26.5 時間で上限に到達します。

そのため、最低26.5 時間に一度、0x1FFFFFFFF が 0x000000000 になる瞬間がやってきます。これを PCR Wrap-around と呼びます。

Windows で DirectShow を用いてMPEG2-TS を再生する場合、MPEG2 デマルチプレクサフィルタがストリームからビデオとオーディオを分離して取り出し、それぞれをMPEG2 ビデオデコーダフィルタと MPEG オーディオデコーダフィルタに渡します。それらのデコーダフィルタで伸長されたものが VMR7/VMR9 のようなビデオレンダラや DirectSound Renderer のようなオーディオレンダラで再生されます。

そのような実装となっているアプリケーションで MPEG2-TS を再生しているときに PCR Warp-around が起こると、再生されているビデオが一瞬だけ乱れてノイズが載る現象が発生します。この現象はレンダラに VMR7 を使用している場合がもっとも顕著で、VMR9 ではかなり低減されます。

現在の処、このノイズは既知の制限事項となっています。とはいえ特に日本人であればわりと多くの方にとって気に障ると思われますので、一刻も早く直るように働きかけていきます。実際再生時にノイズが載ったとしてもコンテンツ自体には問題はありませんのでご安心ください。

この原因を特定するまでにつっち~と二人でデバッグトレースを1000万行以上読みました。かなりしんどい案件でした。