KLV关键信息

在SMPTE 336M-2001的数据编码协议中描述了KLV密钥。以下部分提供了键结构的快速概述,但要获得完整的信息,您应该阅读前面提到的文档。

抵消(基于) 长度(字节) 内容/格式 描述
0 4 总是0x06 0x0E 0x2B 0x34 KLV报头(这对所有键都是一样的)。
4 1 RegistryCategoryConstants值之一 注册表类别指示器:标识所描述的注册表类别(字典、组、包装器、标签)。
5 1 取决于注册表类别指示符的值。 注册表指示符:标识类别中的特定注册表。
6 1 结构指示符:给定注册表中结构变量的指示符。
7 1 版本号。
8 8 项指示符:键的标识符。

KLV密钥由16个字节组成,可分为3个部分:

  1. KLV报头节(字节0…3),它总是0x06 0x0E 0x2B 0x34。现在,这并不重要,因为已定义的键的数量小于264。

  2. 一般部分(字节4…7),最初用于描述数据的格式。实际上,这些字节对于一个键的所有版本几乎是相同的,除了版本号(偏移量为7的字节)。偏移量为6的字节(结构指示符)几乎总是0x01。版本号非常重要,因为数据的格式可能会从一个版本更改到另一个版本。例如,版本1的键数据可能是16位值,而版本2的键数据可能写入32位值。

  3. 键标识符(字节8…15)。这些字节标识哪些数据与该键相关联。这是当您想要找出某个键的含义时应该搜索的数据。

LEAD在ILMMpgDmxP.h中定义了一些通用键。您将发现它们被定义为KlvKey_XXX值。例如,查找KlvKey_UserDefinedTimeStamp,您将找到LEAD已定义的键的列表。

LEAD已经定义了某些定义来帮助您访问密钥中的某些字节。查看下面的更多信息。

用于检查键的有用枚举

使用KlvOffsetConstants枚举来查找16字节键中重要关键组件的偏移量:

类型定义枚举KlvOffsetConstantsKLVOFFSET_REGISTRYCATEGORY = 4, /*标识所描述注册表类别的指示器(例如,字典)*/KLVOFFSET_REGISTRYDESIGNATOR = 5, /*标识特定注册表的指示器类别(例如元数据字典)*/KLVOFFSET_STRUCTUREDESIGNATOR = 6, /*指定注册表中结构变量的指示符*/KLVOFFSET_VERSIONNUMBER = 7, /*指定注册表的版本,该版本首先定义项指示符指定的项*/KLVOFFSET_ITEMDESIGNATOR = 8, /* UL指示符上下文中特定项的唯一标识(最多8字节)*/} KlvOffsetConstants;

使用RegistryCategoryConstants枚举来确定注册表类别指示符的可能值(偏移量为4的字节):

类型定义枚举RegistryCategoryConstants{REGISTRYCATEGORY_DICTIONARY = 1, /*字典:下一个字节=KlvDictionaryConstants(01=元数据,02=精华,03=控制,04=类型)*/REGISTRYCATEGORY_GROUPS = 2, /* Groups: Next byte=KlvGroupConstants (01=Universal, 02=Global, 03=Local, 04= variable length packs (默认的), 05=定长包)*/REGISTRYCATEGORY_WRAPPERS = 3, /*包装器和容器:下一个字节=KlvWrapperConstants(01=简单,02=复杂)*/REGISTRYCATEGORY_LABELS = 4, /*标签:下一个字节=KlvLabelConstants(01=标签字典)*/} RegistryCategoryConstants;

如果注册表类别值指示符是REGISTRYCATEGORY_DICTIONARY,则注册表指示符(偏移量5处的字节)是以下值之一:

类型定义枚举KlvDictionaryConstantsKLVDICTIONARY_METADATA = 1, /* 01 =元数据字典*/KLVDICTIONARY_ESSENCE = 2, /* 02 = Essence dictionary */KLVDICTIONARY_CONTROL = 3, /* 03 =控件字典*/KLVDICTIONARY_TYPES = 4, /* 04 =类型字典*/} KlvDictionaryConstants;

如果注册表类别值指示符是REGISTRYCATEGORY_GROUP,则注册表指示符(偏移量为5的字节)是以下值之一:

类型定义枚举KlvGroupConstantsKLVGROUPS_UNIVERSAL= 0x01, /* 01 = Universal Groups */KLVGROUPS_GLOBAL= 0x02, /* 02 =全局组*/KLVGROUPS_VARIABLEPACK= 0x04, /* 04 =可变长度包(默认的) * /KLVGROUPS_FIXEDPACK= 0x05, /* 05 =固定长度的包*/KLVGROUPS_LOCAL_1_BER= 0x03, /* 03 =本地组(Key=1字节,Data=ASN.1 .1)的误码率) * /KLVGROUPS_LOCAL_BER_BER= 0x0B, /* 0B =本地组(Key=ASN.1 .1 .OID BER, Data=ASN.1的误码率) * /KLVGROUPS_LOCAL_2_BER= 0x13, /* 13 =本地组(Key=2字节,Data=ASN.1 .的误码率* /KLVGROUPS_LOCAL_4_BER= 0x1B, /* 1B =本地组(Key=4字节,Data=ASN.1 .的误码率* /KLVGROUPS_LOCAL_1_1= 0x23, /* 23 =本地组(Key=1字节,Data=1字节*/KLVGROUPS_LOCAL_BER_1= 0x2B, /* 2B =本地组(Key=ASN.1 .1 .OID BER, Data=1字节*/KLVGROUPS_LOCAL_2_1= 0x33, /* 33 =本地组(Key=2字节,Data=1字节*/KLVGROUPS_LOCAL_4_1= 0x3B, /* 3B =本地组(Key=4字节,Data=1字节*/KLVGROUPS_LOCAL_1_2= 0x43, /* 43 =本地组(Key=1字节,Data=2字节*/KLVGROUPS_LOCAL_BER_2= 0x4B, /* 4B =本地组(Key=ASN.1 .1)OID BER, Data=2字节*/KLVGROUPS_LOCAL_2_2= 0x53, /* 53 =本地组(Key=2字节,Data=2字节*/KLVGROUPS_LOCAL_4_2= 0x5B, /* 5B =本地组(Key=4字节,Data=2字节*/KLVGROUPS_LOCAL_1_4= 0x63, /* 63 =本地组(Key=1字节,Data=4字节*/KLVGROUPS_LOCAL_BER_4= 0x6B, /* 6B =本地组(Key=ASN.1 .1)OID BER, Data=4字节*/KLVGROUPS_LOCAL_2_4= 0x73, /* 73 =本地组(Key=2字节,Data=4字节*/KLVGROUPS_LOCAL_4_4= 0x7B, /* 7B =本地组(Key=4字节,Data=4字节*/} KlvGroupConstants;

在上面的每个KLVGROUPS_LOCAL_X_Y键中,X表示用于存储键的字节数,Y表示用于存储每个键的数据的字节数。BER表示可变长度。最常见的情况有:

如果注册表类别值指示符是REGISTRYCATEGORY_WRAPPER,则注册表指示符(偏移量为5的字节)是以下值之一:

类型定义枚举KlvWrapperConstantsKLVWRAPPERS_SIMPLE = 1, /* 01 =简单包装*/KLVWRAPPERS_COMPLEX = 2, /* 02 =复杂包装*/} KlvWrapperConstants;

如果注册表类别值指示符是REGISTRYCATEGORY_LABEL,则注册表指示符(偏移量为5的字节)是以下值之一:

类型定义枚举KlvLabelConstantsKLVLABELS_LABEL = 4, /* 01 =标签字典*/} KlvLabelConstants;

转换C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。