KLV - KLV
KLV (Key-Length-Value) - это стандарт кодирования данных, часто используемый для встраивания информации в видеопотоки. Элементы кодируются в триплеты «ключ-длина-значение», где ключ определяет данные, длина указывает длину данных, а значение - это сами данные. Он определен в SMPTE 336M-2007 (протокол кодирования данных с использованием значения длины ключа), утвержденном Общество инженеров кино и телевидения. Благодаря высокой степени совместимости KLV, он также был принят Совет по стандартам видеосъемки.
Байтовая упаковка
В двоичном потоке данных набор KLV разбивается следующим образом, причем вся целочисленная интерпретация Big Endian:
Ключевое поле
Первые несколько байтов - это ключ, очень похожий на ключ в стандартной структуре данных хеш-таблицы. Ключи могут иметь длину 1, 2, 4 или 16 байтов. Предположительно в отдельном документе спецификации вы согласовали бы длину ключа для данного приложения. Шестнадцать байтовых ключей обычно зарезервированы для использования в качестве глобально зарегистрированных уникальных идентификаторов., а часть Value такого пакета обычно содержит серию большего количества наборов KLV с меньшими ключами.
Поле длины
За байтами для ключа следуют байты для поля длины, которое сообщит вам, сколько байтов следует за полем длины и составляет часть значения. Для поля длины существует четыре типа кодирования: 1-байтовый, 2-байтовый, 4-байтовый и Основные правила кодирования (BER). 1-, 2- и 4-байтовые варианты довольно просты: сделайте из байтов целое число без знака, и это целое число будет количеством следующих байтов.
Кодирование длины BER немного сложнее, но наиболее гибко. Если первый байт в поле длины не имеет установленного старшего бита (0x80), то этот единственный байт представляет собой целое число от 0 до 127 и указывает количество байтов значения, которое следует сразу за ним. Если установлен старший бит, то младшие семь битов указывают, сколько байтов следует за ними, которые сами составляют поле длины.
Например, если первый байт поля длины BER является двоичным 10000010, это будет означать, что следующие два байта составляют целое число, которое затем указывает, сколько байтов значения следует за ним. Таким образом, для определения длины потребовалось всего три байта.
Поле значения
Остальные байты - это поле Value, и его содержимое может быть любым, включая цепочку дополнительных наборов KLV, как это часто бывает.
Пример
В следующем примере четыре байта представляют набор KLV, где ключ - один байт, поле длины - один байт (или, возможно, BER - вы не можете сказать из примера), а значение - два байта: ноль и три . В своем приложении вы бы ранее согласились с а) использовать однобайтовые ключи и б) использовать однобайтовую кодировку. Также предположительно ключевое значение «42» будет что-то значить для вас, возможно, оно указывает на то, что байты значений 0x00 и 0x03 являются целым числом, представляющим значение одометра вашего велосипеда.
Ключ | Длина | Ценить | |
---|---|---|---|
42 | 2 | 0 | 3 |
Смотрите также
- Тип-длина-значение, тип кодирования данных, экземпляром которого является KLV
внешняя ссылка
- KLVLib - C-библиотека для ввода-вывода файлов KLV
- Приобретите стандарт KLV (SMPTE 336M-2007)
- Версия ITU спецификации KLV (Рекомендация ITU-R BT.1563) (бесплатно)
- Библиотека Java KLV в общественном достоянии
- Коммерческая реализация кодека
- Коммерческая реализация библиотеки кодировщика / декодера KLV (C ++)