KLV (Key-Length-Value) es un estándar de codificación de datos, que a menudo se usa para incrustar información en videos. Los elementos se codifican en tripletes de valor de longitud de clave, donde la clave identifica los datos, la longitud especifica la longitud de los datos y el valor son los datos en sí. Se define en SMPTE 336M-2007 (Protocolo de codificación de datos con valor de longitud de clave), aprobado por la Sociedad de Ingenieros de Cine y Televisión . Debido al alto grado de interoperabilidad de KLV, también ha sido adoptado por el Motion Imagery Standards Board .
Embalaje de bytes
En un flujo binario de datos, un conjunto de KLV se desglosa de la siguiente manera, con toda la interpretación de enteros siendo Big Endian :
Campo clave
Los primeros bytes son la clave, al igual que una clave en una estructura de datos de tabla hash estándar. Las claves pueden tener una longitud de 1, 2, 4 o 16 bytes. Presumiblemente, en un documento de especificación separado, acordaría la longitud de la clave para una aplicación determinada. Las claves de dieciséis bytes generalmente se reservan para su uso como identificadores únicos registrados globalmente , y la parte de Valor de dicho paquete generalmente contiene una serie de más conjuntos de KLV con claves más pequeñas.
Campo de longitud
Después de los bytes de la clave están los bytes del campo Longitud, que le indicará cuántos bytes siguen al campo de longitud y forman la parte de Valor. Hay cuatro tipos de codificación para el campo Longitud: 1 byte, 2 bytes, 4 bytes y reglas de codificación básica (BER). Las variantes de 1, 2 y 4 bytes son bastante sencillas: haga un entero sin signo con los bytes, y ese entero es el número de bytes que sigue.
La codificación de longitud BER es un poco más complicada pero la más flexible. Si el primer byte en el campo de longitud no tiene el bit alto establecido (0x80), entonces ese solo byte representa un número entero entre 0 y 127 e indica el número de bytes de valor que sigue inmediatamente. Si se establece el bit alto, los siete bits inferiores indican cuántos bytes siguen que forman un campo de longitud.
Por ejemplo, si el primer byte de un campo de longitud BER es binario 10000010, eso indicaría que los siguientes dos bytes forman un número entero que luego indica cuántos bytes de valor siguen. Por lo tanto, se tomó un total de tres bytes para especificar una longitud.
Campo de valor
Los bytes restantes son el campo Valor y su contenido puede ser el que desee, incluida una cadena de más conjuntos de KLV, como suele ser el caso.
Ejemplo
En el siguiente ejemplo, los cuatro bytes representan un conjunto KLV donde la clave es un byte, el campo de longitud es un byte (o posiblemente BER; no se puede saber en el ejemplo) y el valor es dos bytes: un cero y un tres. . En su aplicación, previamente habría acordado a) usar claves de un byte yb) usar codificación de longitud de un byte. También es de suponer que el valor clave "42" significaría algo para usted, tal vez indique que los bytes de valor 0x00 y 0x03 son un número entero que representa el valor del odómetro de su bicicleta.
Clave | Largo | Valor | |
---|---|---|---|
42 | 2 | 0 | 3 |
Ver también
- Tipo-longitud-valor , el tipo de codificación de datos del cual KLV es una instancia
enlaces externos
- KLVLib - Biblioteca de CA para E / S de archivos KLV
- Adquiera el estándar KLV (SMPTE 336M-2007)
- Versión de la UIT de la especificación KLV (Recomendación UIT-R BT.1563) (gratis)
- Una biblioteca Java KLV en el dominio público
- Una implementación comercial del códec
- Una implementación comercial del codificador / decodificador lib KLV (C ++)