EBML
Зовнішній вигляд
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;72057863037927934] |
- EBML RFC (Draft) — чернетка стандарту EBML. (англ.)
- EBML Homepage — the opensource Extensible Binary Meta-Language. [Архівовано 31 липня 2013 у Wayback Machine.] (англ.)