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]
|
Див. також
Посилання