EBML (англ. Extensible Binary Meta Language — расширяемый бинарный метаязык) — двоичный формат файлов, при создании которого стояла задача создать аналог XML для двоичных данных. Изначально был создан для мультимедиа-контейнера Matroska, используется в WebM.
Важной особенностью формата является наличие «значений по умолчанию» для многих элементов, это позволяет создавать файл без детального описания всех (повторяющихся из файла в файл) параметров.
Типы данных
- Signed Integer — знаковое целое, порядок байт big-endian, произвольного размера от 1 до 8 байт.
- Unsigned Integer — беззнаковое целое, порядок байт big-endian, произвольного размера от 1 до 8 байт.
- Float — число с плавающей запятой, порядок байт big-endian, размер 4 или 8 байт.
- String — текстовая строка в формате ASCII (символы ASCII, с кодами от 32 до 127). Наличие завершающего нуля опционально и зависит от требований парсера.
- UTF-8 — строка Unicode в формате UTF-8. Наличие завершающего нуля опционально и зависит от требований парсера.
- Date — время в наносекундах, знаковое целое, 64 бита. 0 означает начало третьего тысячелетия 01.01.2001 00:00:00,000000000 UTC.
- master-element — контейнер для других EBML-элементов (более низкого уровня).
- Binary — данные, не интерпретируемые парсером.
Числа переменного размера
Одной из особенностей формата являются числа переменного размера. Кодирование числа осуществляется подобно кодированию символов в кодировке UTF-8, размер числа определяется количеством нулевых бит (точнее, положением первого ненулевого бита). Максимальное число вычисляется как 2количество битов-2.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
битов |
кодируемый диапазон
|
1××××××× |
|
|
|
|
|
|
|
7 |
[0;126]
|
01×××××× |
×××××××× |
|
|
|
|
|
|
14 |
[0;16382]
|
001××××× |
×××××××× |
×××××××× |
|
|
|
|
|
21 |
[0;2097150]
|
0001×××× |
×××××××× |
×××××××× |
×××××××× |
|
|
|
|
28 |
[0;268435454]
|
00001××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
|
|
|
35 |
[0;34359738366]
|
000001×× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
|
|
42 |
[0;4398046511102]
|
0000001× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
|
49 |
[0;562949953421310]
|
00000001 |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
×××××××× |
56 |
[0;72057594037927934]
|
См. также
Ссылки