View a markdown version of this page

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

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

SPEKE API v2.1-加密合约

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

推荐的行业最佳实践是 Streamset 中的不同曲目使用多个内容密钥。这不是强制性的,但我们建议至少使用两个不同的内容密钥:一个用于音轨,一个用于视频轨道。使用单个内容密钥加密多个曲目是可能的。但是,加密器必须在发送给密钥提供商的 CPIX 文档中明确发出此信号。一般而言,加密器总是准确描述需要多少内容密钥以及如何使用它们来加密各种媒体曲目。

Principles

您可以在 CPIX 文档的<cpix:ContentKeyUsageRuleList>部分中找到加密合同。在此部分中,<cpix:ContentKeyList> 部分中定义的每个内容密钥都对应一个特定的 <cpix:ContentKeyUsageRule> 元素,其中应包括:

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

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

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

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

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

筛选条件

CPIX 定义了多个筛选元素和属性,但是 SPEKE 仅支持其中的一个子集。下表对这些不同情况进行了汇总:

CPIX 筛选条件类型 整体 SPEKE 支持 SPEKE 支持的筛选条件属性 SPEKE 不支持的筛选条件属性

<cpix : >VideoFilter

是

minPixels、maxPixels、hdr、minFps、maxFps(可选属性)

wcg

<cpix : >AudioFilter

是

minChannels、maxChannels(可选属性)

<cpix : >KeyPeriodFilter

是

periodId(强制属性)

<cpix : >BitrateFilter

否

N/A

N/A

<cpix : >LabelFilter

否

N/A

N/A

根据CPIX的规范 VideoFilter,[minPixels,maxPixels] 在两个维度上都是一个包罗万象的范围,尽管(minFPs,maxFPs] 仅包含最大帧率维度)。因为 AudioFilter,[minChannels,maxChannels] 是两个维度的包含范围。

问题情况

在某些情况下,加密合同中提供的信息可能不完整、含糊或错误。在这些情况下,加密程序和密钥提供程序必须采取适当的行为并保证对内容的适当保护。下表列出了在这些情况下的建议行为:

在这种情况下 加密器操作 密钥提供商的行动

没有规则适用于流集中的一个或多个轨道(参见下面的示例 3)

加密程序应查看其配置(CPIX 负载外部),并验证相关轨道是否不需要加密。如果不是预期情况,则加密程序应引发错误并停止处理。

不相关:密钥提供程序不了解流集结构。

多个规则重叠并建议使用多个内容密钥来加密特定轨道

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

不相关:密钥提供程序不了解流集结构。

加密合同在单个 SPEKE request/response 周期内发生变化

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

为了防止这种情况发生,密钥提供程序不得修改在 SPEKE 请求的 CPIX 负载中收到的加密合约。

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

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

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

格式良好的加密合约,但违反了 DRM 安全级别的约束:例如,要求使用单个内容密钥来保护音频轨道和超高清视频轨道

如果加密程序了解 DRM 安全级别约束,则应引发异常,停止处理,不向密钥提供程序发送 SPEKE 请求,因为这很可能会导致错误的内容保护。

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

缺少加密合约

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

密钥提供程序应引发异常并返回“缺少 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="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>

示例 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"/> <cpix: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>