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;72057594037927934]

Див. також

Посилання