七、通用加密示例辅助信息
1-定义:
受保护轨道中的每个受保护样本应具有与其相关的初始化向量。初始化向量和子样本加密信息都可以作为样本辅助信息提供,其中aux_info_type参数等于方案,aux_info_type 参数等于0。
例如,对于使用“cenc”方案保护的磁道,aux_info_type的默认值为“cenc”,aux_info_type_参数的默认值为0,因此应创建省略这些可选字段的内容。sample辅助信息的储存应符合ISO/IEC 14496-12。
此类样品的sample辅助信息格式如下:
aligned(8) class CencSampleAuxiliaryDataFormat { unsigned int(Per_Sample_IV_Size*8) InitializationVector; if (sample_info_size > Per_Sample_IV_Size ) { unsigned int(16) subsample_count; { unsigned int(16) BytesOfClearData; unsigned int(32) BytesOfProtectedData; } [subsample_count ] } }
- sample_info_size是样本辅助信息大小框(‘saiz’)中此样本的样本辅助信息的大小;
- InitializationVector是示例的初始化向量,除非轨道加密框(‘tenc’)中存在constant_IV;
- subsample_count是此示例的子样本计数;
- BytesOfClearData是此子样本中清除数据的字节数;
- BytesOfProtatedData是此子样本中受保护数据的字节数;
如果您没有使用子样本加密,那么整个样本都会受到保护。在这种情况下,所有辅助信息的大小都将相同,因此"示例辅助信息大小"框(“saiz”)的default_sample_info_size将等于初始化向量的Per_Sample_IV_Size。如果Per_Sample_IV_Size也为零(因为使用了常量IV),那么样本辅助信息将为空,应该省略。
需要注意的是,即使使用了子样本加密,所有样本的样本辅助信息的大小也可能相同(如果所有样本的子样本数量相同),并且可以使用default_sample_info_size。
2-样本加密信息框,用于存储样本辅助信息
Sample Encryption Box (‘senc’)
- Box Type: ‘senc’
- Container: Track Fragment Box (‘traf’) or Track Box (‘trak’)
- Mandatory: No
- Quantity: Zero or one
样本辅助信息的可选存储位置是此处指定的样本加密盒(‘Senc’)。
样本加密盒包含样本辅助信息,并可能包含每个样本的每个样本初始化向量,以及部分受保护的视频样本的清除和受保护的字节范围(“子样本加密”)。
当轨道或轨道碎片中的样本受到保护时,可以使用它。在曲目片段盒中存储“Senc”,使所有包含的样本在电影片段中都可以访问必要的样本辅助信息,以便使每个曲目片段可独立解密;例如,当电影片段作为DASH媒体片段传送时。
Syntax
aligned(8) class SampleEncryptionBox extends FullBox(‘senc’, version=0, flags) { unsigned int(32) sample_count; { unsigned int(Per_Sample_IV_Size*8) InitializationVector; if (flags & 0x000002) { unsigned int(16) subsample_count; { unsigned int(16) BytesOfClearData; unsigned int(32) BytesOfProtectedData; } [ subsample_count ] } }[ sample_count ] }
Semantics
- -标志继承自FullBox结构。示例加密盒目前支持以下位值:
- -0x2-UseSubSampleEncryption
- -如果设置了UseSubSampleEncryption标志,则包含此示例加密盒的轨道片段应使用subsample加密。设置此标志时,子样本映射数据跟随每个InitializationVector。子样本映射数据由每个样本的子样本数组成,后跟一个值数组,描述每个子样本的清除数据的字节数和加密数据的字节数。
- -sample_count是包含轨道或轨道片段中受保护的样本数。此值应为零(0)或轨道或轨道碎片中的样本总数。
- -InitializationVector。文件中只能使用一个Per_Sample_IV_Size,或者当样本未加密或使用常量IV时,Per_Sample_IV_Size应为零。
八、框定义-Box definitions
1-保护系统特定的标题框
1-定义Definition
- Box Type: `pssh’
- Container: Movie (‘moov’) or Movie Fragment (‘moof’)
- Mandatory: No
- Quantity: Zero or more
这个盒子包含了内容保护系统播放内容所需的信息。数据格式由“pssh”参数SystemID所标识的系统指定,并且在ISO/IEC 23001的这一部分中被视为不透明。
从初始电影盒子中收集的Protection System Specific Header盒子,以及电影片段中的盒子,应提供解码该片段所需的所有内容保护系统信息。数据字段中封装的数据可以被识别的内容保护系统客户端读取,以实现解密密钥获取和媒体数据解密。对于基于许可证/权利的系统,头信息可能包括许可证服务器或权利发行者的URL、嵌入式许可证/权利、嵌入式密钥等保护系统特定的元数据。
可以通过包含每个支持的系统的Protection System Specific Header盒子来构建一个可由多个密钥和数字版权管理(DRM)系统播放的单个文件。为了找到与演示中的样本相关的所有Protection System Specific数据,读者应该:检查电影盒子中的所有Protection System Specific Header盒子以及与样本相关的电影片段盒子(但不包括其他电影片段盒子),将此盒子中的SystemID字段与其支持的DRM系统的SystemID进行匹配,并将样本关联的KID(从Track Encryption Box的default_KID字段或适当的样本组描述条目的KID字段中获取)与Protection System Specific Header Box中的一个KID值进行匹配。
没有适用的KID值列表或空列表的盒子应被视为适用于文件或电影片段中的所有KID。
基于匹配的KID值,Protection System Specific Header数据应与样本关联,该匹配在“pssh”和样本组描述或描述样本的默认“tenc”中进行。如果由于文件碎片整理或重新分片而移动了一个样本或一组样本,那么剩余样本的关联Protection System Specific Header盒子应按照上述要求进行存储。
2-Syntax
aligned(8) class ProtectionSystemSpecificHeaderBox extends FullBox(‘pssh’, version, flags=0) { unsigned int(8)[16] SystemID; if (version > 0) { unsigned int(32) KID_count; { unsigned int(8)[16] KID; } [KID_count]; } unsigned int(32) DataSize; unsigned int(8)[DataSize] Data; }
3-Semantics
这段话描述了一个内容保护系统的头部信息,
- 其中SystemID是一个唯一标识符,用于标识该头部属于哪个内容保护系统。
- KID_count指定了下面表格中KID条目的数量,可以为零。KID标识了Data字段所应用的密钥标识符。如果未设置,则Data数组将应用于包含此框的电影或电影片段中的所有KID。
- DataSize指定了Data成员的字节数。Data包含内容保护系统特定的数据。
2-轨迹加密框
1-定义
- Box Type: `tenc’
- Container: Scheme Information Box (‘schi’)
- Mandatory: No (Yes, for protected tracks)
- Quantity: Zero or one
轨迹加密框包含整个轨迹的isProted标志、Per_Sample_IV_Size和KID的默认值。
在基于模式的加密生效的情况下,它提供模式,当使用常量IV时,它提供常量IV。这些值将用作此轨迹中样本的加密参数,除非被与一组样本关联的样本组描述覆盖。对于每个轨道只有一个密钥的文件,此框允许每个轨道指定一次基本加密参数,而不是每个样本重复。
如果default_isProted的值都为1,default_Per_Sample_IV_Size都为0,则使用这些设置的所有样本的default_consant_IV_Size都应存在。常量IV不得与反模式加密一起使用。样本组描述可以为样本组提供键或键和常量IV,这些键或键和常量IV覆盖映射到组的样本的这些默认值。
注意:当使用定义的模式加密时,跟踪加密盒的版本字段设置为大于零的值,否则设置为零。
轨迹加密框包含了整个轨迹的保护标志、每个样本的IV大小和默认值等信息。在使用基于模式的加密时,它提供了加密模式;而在使用常量IV时,它提供了常量IV。这些值将作为加密参数应用于此轨迹中的每个样本,除非被与一组样本关联的样本组描述所覆盖。如果每个轨道只有一个密钥的文件,那么此框允许每个轨道指定一次基本加密参数,而不是每个样本都要重复设置。如果default_isProted的值都为1,default_Per_Sample_IV_Size都为0,则使用这些设置的所有样本的default_consant_IV_Size都应存在。但是,常量IV不能与反模式加密一起使用。样本组描述可以为样本组提供键或键和常量IV,这些键或键和常量IV将覆盖映射到组的样本的这些默认值。需要注意的是,当使用9.6中定义的模式加密时,跟踪加密盒的版本字段应设置为大于零的值,否则应设置为零。
2-Syntax
aligned(8) class TrackEncryptionBox extends FullBox(‘tenc’, version, flags=0) { unsigned int(8) reserved = 0; if (version==0) { unsigned int(8) reserved = 0; } else { // version is 1 or greater unsigned int(4) default_crypt_byte_block; unsigned int(4) default_skip_byte_block; } unsigned int(8) default_isProtected; unsigned int(8) default_Per_Sample_IV_Size; unsigned int(8)[16] default_KID; if (default_isProtected ==1 && default_Per_Sample_IV_Size == 0) { unsigned int(8) default_constant_IV_size; unsigned int(8)[default_constant_IV_size] default_constant_IV; } }
3-Semantics
- "version"字段:除非使用基于模式的加密,否则版本应为零,如果使用了模式加密,则版本应为1。
- "default_isProtected"字段:该字段表示轨道中样本的默认保护状态的保护标志。
- "default_Per_Sample_IV_Size"字段:该字段表示默认的初始化向量大小(以字节为单位)。
- "default_KID"字段:该字段表示此轨道中样本使用的默认密钥标识符。
- "default_constant_IV_size"字段:该字段表示所有样本可能的默认初始化向量的大小。
- "default_constant_IV"字段(如果存在):该字段表示所有样本的默认初始化向量。
- "default_crypt_byte_block"字段:该字段指定保护模式中加密块的数量,每个块的大小为16字节。
- "default_skip_byte_block"字段:该字段指定保护模式中未加密块的数量。