EBML (Extensible Binary Meta Language) はMatroska (.mkv
) やWebM (.webm
) などで使われるオープンなバイナリデータフォーマットです。
要素
EBMLの基本的な構成要素は要素です。要素はタグとデータからなります。
タグは名前とIDによって識別されます。名前は人間向けのドキュメンテーションなどで使われ、IDは直列化の際に使われます。例えば、Matroskaファイルのルート要素のタグの名前はSegment
、IDは0x18538067
です
要素はデータの種類によって次の8つに分類されます。
要素 | データ |
---|---|
符号付き整数要素 | 符号付き整数 |
符号なし整数要素 | 符号なし整数 |
浮動小数点数要素 | binary32またはbinary64 |
文字列要素 | ASCII文字列 |
UTF-8要素 | Unicode文字列 |
日付要素 | ナノ秒精度の時刻 |
マスター要素 | 0つ以上の子要素 |
バイナリ要素 | バイト列 |
EBML文書
EBML文書はEBMLヘッダーとEBML本体からなります。
EBMLヘッダーにはEBML文書についてのメタデータが記載されます (RFC 8794 11.2を参照) 。
EBML本体はルート要素と大域要素からなります。ルート要素にはEBML文書の本体データ (音声データや映像データなど) が格納されます。大域要素についてはRFC 8794 11.3を参照。
ルート要素の直接の子要素のことをトップレベル要素といいます。
EBMLストリーム
1つ以上のEBML文書を並べたものをEBMLストリームといいます。
直列化
要素は次のように直列化されます。
Element:
+------+------+--------//---+
| ID | Size | Data // |
+------+------+--------//---+
- ID タグのID
- Size Dataの長さ
- Data 直列化されたデータ
IDとSizeはいずれも可変長整数形式で直列化されます (RFC 8794 4を参照) 。データの直列化の方法は次の通りです。
データ | 直列化 |
---|---|
符号付き整数 | 2の補数表現、ビッグエンディアン |
符号なし整数 | ビッグエンディアン |
浮動小数点数 | binary32またはbinary64 |
文字列 | ASCII |
UTF-8 | UTF-8 |
日付 | 2001-01-01T00:00:00Z からの経過時間 (ナノ秒) 、符号付き整数 |
マスター | 子要素の直列化の連結 |
バイナリ | そのまま |