MMT/TLVとは
4K・8Kの放送で用いられる、MMT/TLVについてのメモです。今使われているMPEG-2 TSでは、188バイトの固定パケットがひたすらに流れていくしくみですが、MMTもTLVも、可変長パケットです。IPを意識した作りとなっています。
プロトコル・スタック
図としてはこんな感じです。プロトコル・スタックはARIB STD-B60に載っていますが、簡素化してちょっと付け足したのがこの図です。
それぞれがどういう役割なのかを端的に説明します。
- TLV: Type Length Value方式。パケットの種別(UDP/IPパケットか?Nullパケットか?TLV-SIか?など)と、可変長パケットなのでパケットのサイズが書かれています
- UDP/IP: 放送では宛先IPとかポートとかの値は同じものが流れてくるので、圧縮された状態で送られます
- NTP: 一般に使われるものと同じですが、MPEG-2 TSをご存じの方は、PCRがNTPに変わったという認識で良いと思います
- TLV-SI: 制御情報が乗っかります。どこの周波数でどのチャンネルが放送やってるのかを示すもの(TLV-NIT)と、どのIP・ポートで流れてるデータがどのサービスなのかを示すもの(AMT)に分かれます
- HEVC, AAC: 映像と音声です
- TTML: ARIB独自の字幕フォーマットです。独自なXMLフォーマットになっています。アニメーションなどもできるそうです(運用されてるかは知りません…)
- HTML5: データ放送です。Javascriptなんかも動くみたいです
TLVパケットの構造
いろいろプロトコルがあって大変そうなので、一番下のパケットから見てみます。
構造はかなり単純です。
図にすると上のようになります。パケットの先頭は0x7fで固定です。次の1バイトでペイロードの中身の種別を記述します。そして、2~4バイト目ではペイロードの長さを記述します。
ペイロードの中身のタイプは次のとおりです。
- IPv4(0x01)
- IPv6(0x02)
- ヘッダ圧縮IPパケット(0x03)
- TLV-SI(0xfe)
- Nullパケット(0xff)
IPv4, IPv6, ヘッダ圧縮IPパケットにはMMTやNTPが伝送されます。TLV-SIは先程述べた通り周波数のリストやサービスのリストが記述されるテーブルを伝送するものです。Nullパケットは、放送のデータレートは一定なので、その埋め合わせをするために送られるパケットで、中身に意味はありません。ペイロードの部分はすべてが0xffで埋められます。
最後に
プロトコル・スタックを眺めて、さらにTLVパケットの中身について少し触れました。次は他のパケットについても見ていきたいと思います。