媒体服务 PlayReady 许可证模板
警告
Azure 媒体服务将于 2024 年 6 月 30 日停用。 有关详细信息,请参阅 AMS 停用指南。
注意
Google Widevine 内容保护服务目前在由世纪互联运营的 Microsoft Azure 区域中不可用。
Azure 媒体服务允许使用 Microsoft PlayReady 和 PlayReady 许可证加密内容。 媒体服务还提供用于交付 PlayReady 许可证的服务。 当播放器尝试播放受 PlayReady 保护的内容时,将向许可证交付服务发送请求以获取许可证。 如果许可证服务批准了该请求,则会颁发该许可证,该许可证将发送到客户端,并用来解密和播放指定的内容。
PlayReady 许可证包含了当用户尝试播放受保护的内容时要由 PlayReady 数字版权管理 (DRM) 运行时强制实施的权限和限制。 下面是可以指定的 PlayReady 许可证限制的一些示例:
- 该许可证开始生效的日期和时间。
- 许可证过期时的日期/时间值。
- 要在客户端的永久性存储区保存的许可证。 永久性许可证通常用于允许脱机播放内容。
- 播放器必须具有的要播放内容的最低安全级别。
- 音频\视频内容的输入控件的输出保护级别。
- 有关详细信息,请参阅 PlayReady 符合性规则文档中的“输出控件”部分 (3.5)。
PlayReady SL3000 支持
媒体服务的 PlayReady DRM 内容保护和许可证传送功能支持 PlayReady SL3000。 安全级别是 PlayReady 客户端的一部分。 传送给客户端的每个许可证都包含一个属性,用于指示需要达到哪种最低安全级别才能绑定到该许可证。 安全级别 3000 是为使用最高质量商用内容的、具有最高安全性的设备提供的。 可以在内容密钥策略中设置 SL3000 许可证。
有关 PlayReady 安全级别的更多详细信息,请参阅在许可证中使用安全级别一文。
需要注意的一些事项:
- 如果将 SL3000 PlayReady ContentKeyPolicyOption 添加到内容密钥策略,则该策略只能包含其他 PlayReady SL3000 选项。
- SL3000 要求为音频使用不同的密钥。
- 音频密钥不应使用 SL3000 级别的许可证。
- 音频应限制在 SL2000 或更低级别,或者不加密。
- SL3000 播放目前无法在 Azure Media Player (AMP) 中进行。 请在第三方播放器(例如 Shaka Player)或支持 SL3000 播放的设备中进行测试。
内容密钥策略中的 SL3000 示例
{
"properties": {
"description": "ArmPolicyDescription",
"options": [
{
"name": "ArmPolicyOptionName",
"configuration": {
"@odata.type": "#Microsoft.Media.ContentKeyPolicyPlayReadyConfiguration",
"licenses": [
{
"allowTestDevices": true,
"securityLevel": "SL3000",
"beginDate": "2022-10-16T18:22:53.46Z",
"playRight": {
"scmsRestriction": 2,
"digitalVideoOnlyContentRestriction": false,
"imageConstraintForAnalogComponentVideoRestriction": true,
"imageConstraintForAnalogComputerMonitorRestriction": false,
"allowPassingVideoContentToUnknownOutput": "NotAllowed"
},
"licenseType": "Persistent",
"contentKeyLocation": {
"@odata.type": "#Microsoft.Media.ContentKeyPolicyPlayReadyContentEncryptionKeyFromHeader"
},
"contentType": "UltraVioletDownload"
}
]
},
"restriction": {
"@odata.type": "#Microsoft.Media.ContentKeyPolicyOpenRestriction"
}
}
]
}
}
基本流式处理许可证示例
下例演示了配置基本的流式处理许可证的最简单(也是最常见的)模板。 使用此许可证时,客户端可以播放受 PlayReady 保护的内容。
XML 遵循 PlayReady 许可证模板 XML 架构部分中定义的 PlayReady 许可证模板 XML 架构。
<?xml version="1.0" encoding="utf-8"?>
<PlayReadyLicenseResponseTemplate xmlns:i="https://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/PlayReadyTemplate/v1">
<LicenseTemplates>
<PlayReadyLicenseTemplate>
<ContentKey i:type="ContentEncryptionKeyFromHeader" />
<PlayRight />
</PlayReadyLicenseTemplate>
</LicenseTemplates>
</PlayReadyLicenseResponseTemplate>
使用媒体服务 API 配置许可证模板
媒体服务提供了可用于配置 PlayReady 许可证模板的类型。
可以在内容保护示例页上找到用于配置许可证模板的示例。
重要
PlayReady 许可证具有功能强大的限制。 如果输出保护施加了太多限制,内容可能会无法在某些客户端上播放。 有关详细信息,请参阅 PlayReady 符合性规则。
PlayReady 许可证模板 XML 架构
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/PlayReadyTemplate/v1" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/PlayReadyTemplate/v1" xmlns:xs="https://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xs:complexType name="AgcAndColorStripeRestriction">
<xs:sequence>
<xs:element minOccurs="0" name="ConfigurationData" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
<xs:element name="AgcAndColorStripeRestriction" nillable="true" type="tns:AgcAndColorStripeRestriction" />
<xs:simpleType name="ContentType">
<xs:restriction base="xs:string">
<xs:enumeration value="Unspecified" />
<xs:enumeration value="UltravioletDownload" />
<xs:enumeration value="UltravioletStreaming" />
</xs:restriction>
</xs:simpleType>
<xs:element name="ContentType" nillable="true" type="tns:ContentType" />
<xs:complexType name="ExplicitAnalogTelevisionRestriction">
<xs:sequence>
<xs:element minOccurs="0" name="BestEffort" type="xs:boolean" />
<xs:element minOccurs="0" name="ConfigurationData" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
<xs:element name="ExplicitAnalogTelevisionRestriction" nillable="true" type="tns:ExplicitAnalogTelevisionRestriction" />
<xs:complexType name="PlayReadyContentKey">
<xs:sequence />
</xs:complexType>
<xs:element name="PlayReadyContentKey" nillable="true" type="tns:PlayReadyContentKey" />
<xs:complexType name="ContentEncryptionKeyFromHeader">
<xs:complexContent mixed="false">
<xs:extension base="tns:PlayReadyContentKey">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ContentEncryptionKeyFromHeader" nillable="true" type="tns:ContentEncryptionKeyFromHeader" />
<xs:complexType name="ContentEncryptionKeyFromKeyIdentifier">
<xs:complexContent mixed="false">
<xs:extension base="tns:PlayReadyContentKey">
<xs:sequence>
<xs:element minOccurs="0" name="KeyIdentifier" type="ser:guid" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ContentEncryptionKeyFromKeyIdentifier" nillable="true" type="tns:ContentEncryptionKeyFromKeyIdentifier" />
<xs:complexType name="PlayReadyLicenseResponseTemplate">
<xs:sequence>
<xs:element name="LicenseTemplates" nillable="true" type="tns:ArrayOfPlayReadyLicenseTemplate" />
<xs:element minOccurs="0" name="ResponseCustomData" nillable="true" type="xs:string">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="PlayReadyLicenseResponseTemplate" nillable="true" type="tns:PlayReadyLicenseResponseTemplate" />
<xs:complexType name="ArrayOfPlayReadyLicenseTemplate">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="PlayReadyLicenseTemplate" nillable="true" type="tns:PlayReadyLicenseTemplate" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfPlayReadyLicenseTemplate" nillable="true" type="tns:ArrayOfPlayReadyLicenseTemplate" />
<xs:complexType name="PlayReadyLicenseTemplate">
<xs:sequence>
<xs:element minOccurs="0" name="AllowTestDevices" type="xs:boolean" />
<xs:element minOccurs="0" name="BeginDate" nillable="true" type="xs:dateTime">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="ContentKey" nillable="true" type="tns:PlayReadyContentKey" />
<xs:element minOccurs="0" name="ContentType" type="tns:ContentType">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="ExpirationDate" nillable="true" type="xs:dateTime">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="GracePeriod" nillable="true" type="ser:duration">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="LicenseType" type="tns:PlayReadyLicenseType" />
<xs:element minOccurs="0" name="PlayRight" nillable="true" type="tns:PlayReadyPlayRight" />
</xs:sequence>
</xs:complexType>
<xs:element name="PlayReadyLicenseTemplate" nillable="true" type="tns:PlayReadyLicenseTemplate" />
<xs:simpleType name="PlayReadyLicenseType">
<xs:restriction base="xs:string">
<xs:enumeration value="Nonpersistent" />
<xs:enumeration value="Persistent" />
</xs:restriction>
</xs:simpleType>
<xs:element name="PlayReadyLicenseType" nillable="true" type="tns:PlayReadyLicenseType" />
<xs:complexType name="PlayReadyPlayRight">
<xs:sequence>
<xs:element minOccurs="0" name="AgcAndColorStripeRestriction" nillable="true" type="tns:AgcAndColorStripeRestriction">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="AllowPassingVideoContentToUnknownOutput" type="tns:UnknownOutputPassingOption">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="AnalogVideoOpl" nillable="true" type="xs:int">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="CompressedDigitalAudioOpl" nillable="true" type="xs:int">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="CompressedDigitalVideoOpl" nillable="true" type="xs:int">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="DigitalVideoOnlyContentRestriction" type="xs:boolean">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="ExplicitAnalogTelevisionOutputRestriction" nillable="true" type="tns:ExplicitAnalogTelevisionRestriction">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="FirstPlayExpiration" nillable="true" type="ser:duration">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="ImageConstraintForAnalogComponentVideoRestriction" type="xs:boolean">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="ImageConstraintForAnalogComputerMonitorRestriction" type="xs:boolean">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="ScmsRestriction" nillable="true" type="tns:ScmsRestriction">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="UncompressedDigitalAudioOpl" nillable="true" type="xs:int">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="UncompressedDigitalVideoOpl" nillable="true" type="xs:int">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="PlayReadyPlayRight" nillable="true" type="tns:PlayReadyPlayRight" />
<xs:simpleType name="UnknownOutputPassingOption">
<xs:restriction base="xs:string">
<xs:enumeration value="NotAllowed" />
<xs:enumeration value="Allowed" />
<xs:enumeration value="AllowedWithVideoConstriction" />
</xs:restriction>
</xs:simpleType>
<xs:element name="UnknownOutputPassingOption" nillable="true" type="tns:UnknownOutputPassingOption" />
<xs:complexType name="ScmsRestriction">
<xs:sequence>
<xs:element minOccurs="0" name="ConfigurationData" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
<xs:element name="ScmsRestriction" nillable="true" type="tns:ScmsRestriction" />
</xs:schema>