SPEKE API v2-加密合约 - 安全包装程序和编码器密钥交换 API 规范

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SPEKE API v2-加密合约

加密合约根据轨道特征定义使用哪些内容密钥来保护给定流中的哪些轨道。

尽管这是推荐的行业最佳实践,但对直播集中的不同曲目使用多个内容密钥并不是强制性的,但建议——至少有两个不同的内容密钥,一个用于音轨,一个用于视频曲目。使用单个内容密钥加密多个曲目是可能的,但需要在加密器发送给密钥提供者的 CPIX 文档中明确表示信号。一般来说,加密器总是准确地描述需要多少内容密钥以及如何利用它们来加密各种媒体曲目。

原则

加密合约位于 CPIX 文档的<cpix:ContentKeyUsageRuleList>部分中。在本节中,本<cpix:ContentKeyList>节中定义的每个内容密钥对应于一个特定的<cpix:ContentKeyUsageRule>元素,其中应包括:

  • 可以引用一个或多个子组件的ContentKeyUsageRule@intendedTrackType属性,如果使用多个子组件,则以 “+” 符号分隔。的值在加密合约中ContentKeyUsageRule@intendedTrackType应是唯一的,并且不能用于多个ContentKeyUsageRule元素。

  • 一个或多个<cpix:AudioFilter><cpix:VideoFilter>子元素,具体取决于属ContentKeyUsageRule@intendedTrackType性的值。

管理这种关系的规则如下:

  • 当需要使用唯一的内容密钥保护直播集的所有音频和视频轨道时,'ALL'必须使用该字符串作为ContentKeyUsageRule@intendedTrackType属性值。示例 1 显示了这样的用例。在这种情况下,应包括没有任何属性的a<cpix:AudioFilter /><cpix:VideoFilter />子元素。在此特定上下文中,<cpix:AudioFilter>和/或<cpix:VideoFilter>元素的任何其他组合均无效。

  • 对于所有其他用例,ContentKeyUsageRule@intendedTrackType属性的值可以自由定义,并且<cpix:VideoFilter />子元素的<cpix:AudioFilter />数量必须对应于通过 “+” 符号聚合的子组件数量。示例 2/3/4/5/6/7/9/10 说明了此要求,当ContentKeyUsageRule@intendedTrackType属性值中存在单个子组件时。示例 8 说明了使用多个子组件的情况:ContentKeyUsageRule@intendedTrackType="SD+HD"由两个具有不同属性值的不同<cpix:VideoFilter>子元素描述,并ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD"由三个具有不同属性值的不同<cpix:VideoFilter>子元素进行描述。

Filters

CPIX 定义了多个过滤元素和属性,但是 SPEKE 仅支持其中的一个子集。下表汇总了这些差异:

CPIX 过滤器类型 对 SPEKE 的总体支持 SPEKE 支持的过滤器属性 SPEKE 不支持过滤器属性

<cpix:VideoFilter >

最小像素、最大像素、hdr、minFPs、maxFPs(可选属性)

wcg

<cpix:AudioFilter >

最小通道、最大通道(可选属性)

<cpix:KeyPeriodFilter >

periodID(必填属性)

<cpix:BitrateFilter >

不适用

不适用

<cpix:LabelFilter >

不适用

不适用

根据CPIX的规范,[minPixels,maxPixels] 是两个维度的全包范围,而(minFPs、maxFPs)仅包含 maxFPs 维度。 VideoFilter对于 AudioFilter,[minChannels,MaxChannels] 是两个维度的包容范围。

有问题的情况

在某些情况下,加密合同中提供的信息可能是不完整、模棱两可或错误的。在这些情况下,加密器和密钥提供者必须采取适当的行动并保证对内容的适当保护,这一点很重要。下表列出了这些情况下的推荐行为:

在这种情况下 加密器应该/应该... 密钥提供者应该/应该...

没有规则适用于直播集中的一首或多首曲目(参见下面的示例 3)

加密器应查看其配置(CPIX 有效载荷外部),并验证相关曲目是否不需要加密。如果不是预期,加密器应该抛出错误并停止处理。

不相关:密钥提供商不了解直播集结构。

多条规则重叠并建议使用多个内容密钥来加密特定曲目

加密器应按文档顺序应用最近一次 ContentKeyUsageRule 成功评估的结果。

不相关:密钥提供商不了解直播集结构。

加密合约在单个 SPEKE 请求/响应周期内发生变化

加密器应引发异常并停止处理,因为密钥提供者不负责定义加密合约。

为了首先防止这种情况发生,密钥提供者不得修改在 SPEKE 请求的 CPIX 有效载荷中收到的加密合约。

格式错误的加密合约: intendedTrackType/Filters 基数约束异常,不支持的过滤器或属性

加密器应引发异常,停止处理并且不向密钥提供者发送 SPEKE 请求,因为这很可能会导致错误的内容保护或使某些曲目处于未受保护状态。

密钥提供者应引发异常并返回 “格式错误的加密合约” 错误。

完善的加密合约,但违反了 DRM 安全级别的限制:例如,要求使用单个内容密钥来保护音轨和 UHD 视频轨道

如果加密器已了解 DRM 安全级别限制,则应引发异常,停止处理,不要将 SPEKE 请求发送给密钥提供商,因为这很可能会导致错误的内容保护。

密钥提供者应引发异常并返回 “不支持请求的 CPIX 加密合约” 错误。

缺少加密合约

加密器不得发送不包含任何 VideoFilter 或 AudioFilter 元素的 CPIX 文档。

密钥提供者应引发异常并返回 “缺少 CPIX 加密合约” 错误。

加密合约示例

示例 1:所有音频和视频曲目都使用一个内容密钥

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 2:一个内容密钥用于所有视频轨道,一个内容密钥用于所有音轨

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 3:所有视频轨道都使用一个内容密钥,未加密的音轨

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 4:不同视频轨道的多个内容键 (SD/HD),一个内容键用于所有音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 5:不同视频轨道的多个内容键(SD/HD/UHD),一个内容键用于所有音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD video tracks (more than 1920x1080) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 6:不同视频轨道的多个内容密钥(SD/HD/UHD1/UHD2),一个内容键用于所有音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 7:不同视频轨道的多个内容密钥(SD/HD1/HD2/UHD1/UHD2),一个内容键用于所有音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD1 video tracks (more than 1024x576, up to 1280x720) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="921600" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD2 video tracks (more than 1280x720, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="cda406d8-9d87-4f76-92da-31110e756176" intendedTrackType="HD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="921601" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 8:不同视频轨道的多个内容键(基于多个属性类型),一个内容键用于所有音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD and HD video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD+HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="442368" maxFps="30" hdr="false"/> <cpix:VideoFilter minPixels="442369" maxPixels="2073600" maxFps="30" hdr="false"/> </cpix:ContentKeyUsageRule> <!-- Rule for HDR, HFR and UHD video tracks--> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HDR+HFR+UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter hdr="true" /> <cpix:VideoFilter minFps="30" /> <cpix:VideoFilter minPixels="20736001" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 9:一个内容键用于所有视频轨道,多个内容键用于立体声和多声道音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <AudioFilter minChannels="3"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

示例 10:一个内容键用于所有视频轨道,多个内容键用于立体声,两种类型的多声道音轨

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (3 to 6 channels)--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO_3_6"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="3" maxChannels="6"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (7 channels and more)--> <cpix:ContentKeyUsageRule kid="81eb3761-55ff-4d22-a31d-94f01bbfd8ba" intendedTrackType="MULTICHANNEL_AUDIO_7"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="7"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>