Введение

Стандарт кодирования данных (KV) - стандарт кодирования данных, часто используемый для встраивания информации в видео. Стандарт использует схему кодирования типа "длина" "значение". Элементы кодируются в триплетные значения длины ключа, где ключ идентифицирует данные, длина определяет длину данных, а значение - это сами данные. Он определен в SMPTE 336M 2007 (Протокол кодирования данных с использованием значения длины ключа), одобренном Обществом инженеров кино и телевидения. В связи с высокой степенью совместимости KLV, он также был принят Советом по стандартам кинематографии.

Поле ключа

Первые несколько байтов являются ключевыми, как ключ в стандартной структуре данных хэш-таблицы. Ключи могут быть длиной 1, 2, 4 или 16 байтов. Предположительно, в отдельном документе спецификации вы согласитесь на длину ключа для данного приложения. Шестнадцатибайтовые ключи обычно зарезервированы для использования в качестве глобально зарегистрированных уникальных идентификаторов, и часть "Ценность" такого пакета обычно содержит серию большего количества наборов KLV с меньшими ключами.

Поле длины

После байтов для ключа есть байты для поля длина, которое скажет вам, сколько байтов следуют за полем длины и составляют часть значения. Существует четыре вида кодирования для поля Length: 1 байт, 2 байт, 4 байт и Basic Encoding Rules (BER). Варианты 1, 2 и 4 байт довольно просты: сделайте неподписанное целое число из байтов, и это целое число - это количество следующих байтов. Кодирование длины BER немного сложнее, но наиболее гибкое. Если первый байт в поле длины не имеет высокого битового набора (0x80), то этот единственный байт представляет собой целое число от 0 до 127 и указывает количество байтов значения, которое сразу последует. Если высокий бит установлен, то нижние семь битов указывают, сколько байтов следуют за ними, которые сами составляют поле длины. Например, если первый байт поля длины BER является двоичным 10000010, это будет указывать, что следующие два байта составляют целое число, которое затем указывает, сколько байтов Value следует. Поэтому для определения длины было взято в общей сложности три байта.

Поле "значение"

Остальные байты - это поле "Ценность", и его содержимое может быть любым, включая цепочку из большего количества наборов KLV, как это часто бывает.