ProtectionCapabilities.IsTypeSupported(String, String) 方法

定义

查询用于 DRM 功能的视频解码、显示和输出保护子系统的功能。

警告

建议仅将此方法与 Windows 10 版本 1607 或更高版本的 OS 版本一起使用,即使旧版 Windows 10 上也存在此方法。

public:
 virtual ProtectionCapabilityResult IsTypeSupported(Platform::String ^ type, Platform::String ^ keySystem) = IsTypeSupported;
ProtectionCapabilityResult IsTypeSupported(winrt::hstring const& type, winrt::hstring const& keySystem);
public ProtectionCapabilityResult IsTypeSupported(string type, string keySystem);
function isTypeSupported(type, keySystem)
Public Function IsTypeSupported (type As String, keySystem As String) As ProtectionCapabilityResult

参数

type
String

Platform::String

winrt::hstring

标识查询支持的功能的字符串。 此参数接受 RFC 2045 内容类型字符串来指定媒体类型和子类型标识符,以及所需的编解码器的 RFC 6381 编解码器标识符。 这些基字符串与 HTML5 HTMLMediaElementcanPlayType 方法中使用的字符串一致。 RFC 2045 允许以 ";<parameter>=<name>[=<value>] [,<name>[=<value>]"形式添加其他自定义参数作为修饰符。 RFC 2045 合规分析程序必须忽略这些参数(如果未识别)。 对于功能查询,<parameter> 命名为 功能

实现要求 RFC 2045 媒体类型和子类型标识符(例如“video/mp4”)和 RFC 6381 编解码器参数 codec=”<video codec>[,<audio codec>]” 始终存在,以提供有效的查询结果。

请注意,术语内容类型和类型在历史上众所周知,MIME 类型

keySystem
String

Platform::String

winrt::hstring

一个字符串,用于标识 PlayReady 命名空间以检查查询,并指定硬件或软件保护。 对硬件查询使用“com.microsoft.playready.recommendation.3000”(PlayReady 必须支持硬件卸载)、“com.microsoft.playready.recommendation.2000”明确查询软件保护支持,对常规查询使用“com.microsoft.playready.建议”(必须回答软件保护支持以确保向后兼容性)。

返回

一个值,该值指示查询的功能是否可能受支持、可能受支持或不受支持。

注解

类型 输入参数必须具有 RFC 6381 内容类型媒体类型和子类型标识符。 它还必须存在 RFC 2045 编解码器参数字符串。 MPEG-4 是此 API 唯一支持的容器。 H.264 (avc1) 和 HEVC (hvc1, hev1) 是唯一提供支持答案的视频编解码器。 MPEG-4(mp4a)、MPEG-1 第 3 层 (mp3)、Dolby Digital (ac-3)和 Dolby Digital Plus (ec-3) 是唯一提供支持答案的音频编解码器。 支持的字符串包括:

video/mp4;codecs=”avc1,<audio codec>”

video/mp4;codecs=”hvc1, <audio codec>”

video/mp4;codecs=”hev1, <audio codec>”

从 Windows 10 版本 1709 开始,还支持以下各项:

Video/mp4;codecs=”vp9,<audio codec>”

Video/mp4;codecs=”vp09,<audio codec>”

查询字符串的功能部分使用分号分隔符追加到上述字符串中。 基础图形驱动程序和硬件对如何查询功能施加约束。 对于视频子系统,需要满足以下要求:

  1. 单个调用中,每个子系统只能使用一个功能名称加上值的查询
  2. 可以在不显示 1、显示 2 或输出保护查询的情况下执行解码子系统查询
  3. Display 1 子系统查询需要提供解码子系统查询
  4. Display 2 子系统查询需要解码子系统查询,但不需要 Display 1 子系统查询。
  5. 可以使用或不使用解码、显示 1 或显示 2 子系统查询执行输出保护子系统 (HDCP) 查询,但受约束 #3 和 #4 的约束。

General: Efficiency 查询可以与其他任何子系统查询结合使用。

返回的结果是所有单个功能查询的逻辑 AND,并进行了以下说明:可能 结果仅允许来自输出保护子系统,并且仅暂时允许结果。 此 也许 优先于 可能 所有其他功能查询的结果,直到 也许 随着时间的推移解析为 可能不支持可能 解决的当前时间限制为 10 秒。

下表列出了受支持的各个功能查询,按视频子系统进行组织:

项目 视频子系统 功能名称 特征值 描述 此子系统是必需的
1a 解码 decode-res-x 非负数(以像素为单位) 视频解码器是否支持 X 轴中的此最大分辨率? Y
1b 解码 decode-res-y 非负数(以像素为单位) 视频解码器是否支持 Y 轴中的此最大分辨率? Y
1c 解码 解码比特率 每秒千比特的正数(Kbps) 视频解码器是否支持此最大比特率? Y
1d 解码 decode-fps 24、25、29.97、30、50、59.94 或 60 视频解码是否支持每秒最大帧数(FPS)值? Y
1e 解码 decode-bpc (decode-bpp 已弃用) 0、8、10 或 12 视频解码器是否可以使用此每像素颜色深度? Y
1f 解码 decoder-hardware-acceleration** 1 或无值为 true 无论是否存在 OS 解码器,DXVA 硬件加速是否可用? N
1g 解码 decoder-software-acceleration ** 1 或无值为 true OS 解码器是否能够解码流? N
1 小时 解码 decoder-software-requires-hardware** 1 或无值为 true OS 解码器的功能是否要求存在 DXVA 硬件加速? N
2a 显示 1 display-res-x 非负数(以像素为单位) 是否至少有一个相交** 显示支持 X 轴中的此分辨率? Y
2b 显示 1 display-res-y 非负数(以像素为单位) 是否至少有一个相交*** 显示支持 Y 轴中的此分辨率? Y
2c 显示 1 display-refreshrate 24、25、29.97、30、50、59.94 或 60 是否为至少请求的刷新速率配置了显示(由 Windows 理解) ? N
二 维和 显示 1 display-bpc (display-bpp 已弃用) 8 或 10 所有与≥所需分辨率相交的显示器是否至少实现了此颜色深度? N
3 显示 2* hdr 1 (支持) 目标是否支持高动态范围(HDR)呈现 Y
4 输出保护 hdcp 0(关闭),1(无 HDCP 2.2 类型 1 限制),2(使用 HDCP 2.2 类型 1 限制) 所有相交是否都显示至少支持请求保护级别? Y
5 常规:效率** efficiency-setting 0 (关 = 无限制), 1 (在电池电源时限制分辨率) 用户是否希望使用电池使用时间、流式传输开销和/或下载速度,以优先获得最高分辨率?**** Y
6a 解密 encryption-type “cenc”或“cbcs” 此加密类型是否支持使用指定的编解码器/密钥系统进行解密? 如果未指定值,则使用默认值“cenc”。 N
6b 解密 encryption-iv-size 8 或 16 此初始化向量(IV)大小(以字节为单位)是否支持使用指定的编解码器/密钥系统进行解密? 如果未指定值,则使用默认值 8。 N

* 仅在 Windows 10 版本 1607 和更新操作系统版本上受支持

** 仅在 Windows 10 版本 1709 和更新的 OS 版本上受支持

*** 交集算法为:

  1. 查找应用程序用户界面视频客户端区域具有像素的所有显示位置。
  2. 查找从步骤 1 中驱动显示器的所有图形适配器。 对于硬件 DRM 查询,此适配器集仅筛选为具有硬件 DRM 支持的适配器。
  3. 查找连接到步骤 2 中图形适配器的所有显示器。

**** 由内容提供程序决定,选择此策略启用时要使用的解析限制。 建议使用 1080p 限制,但可以使用 720p。 请注意,此策略的输入来自 Windows 10 版本 1709 中添加的视频设置用户界面页面。

项目 1a 和 1b 和 2a 和 2b 的对分别计算为(请求的 x >= 实际交叉集最大值 x) AND (请求的 y >= 实际交叉集最大值 y),并根据需要交换 x 和 y 将纵向显示规范化为横向。

hdcp 查询(项 4)具有计算成本高昂的第一次调用成本。 必须在请求级别打开 HDCP,以探测请求的级别是否可以满足活动显示拓扑的要求。 可能 结果,由于 HDCP 异步评估,并且 HDCP 2.2 最多需要几秒钟,但查询与最小阻塞同步,要求调用方重复使用查询,直到结果最终确定为 可能不支持。 更改查询中请求的 HDCP 级别,但仍处于“可能”状态可能会导致响应无效。 也许 超时大约为 10 秒。

强烈建议不要每隔 250 毫秒多次调用 hdcp 查询,因为基础计算成本。 500 毫秒是首选的最小值。 执行缓存以最大程度地降低此成本,但在轮询时,任何显示拓扑更改都使缓存失效。

作为实现详细信息,即使尚未设置 HDCP 2.2 类型 1 限制,图形适配器也可以选择使用 HDCP 2.2。 HDCP 2.2 可能需要比 HDCP 1.x 更长的时间才能参与。 对当前代电视的观察显示时间高达 8 秒,而 HDCP 1.x 设备(包括中继器)的观测次数约为 1 秒。 因此,应用程序启动时或输出拓扑更改后的第一个 hdcp=1 查询需要等待最多 8 秒以及此最坏情况的边距。 将 10 秒用作最大等待时间,建议在用户最不预期的情况下选取游戏(例如在初始 UI 上)执行应用程序启动查询。 如果未发生拓扑更改,则所有进一步的 hdcp 查询都将为次秒。 如果内容与查询具有相同的 HDCP 输出要求,缓存将在播放开始时再次执行多秒等待。

在输出拓扑更改时,高分辨率电视和监视器通常需要几秒钟才能稳定桌面。 输出保护级别的更改(尤其是减少)通常会导致硬件 DRM 的活动播放设计失败。 此处,对 MF_POLICY_UNSUPPORTED(0xC00D7159)错误的反应应该是隐藏用户的错误、重新查询和恢复,并针对任何已更改的功能使用适当的内容版本。 实际上,这相当于“热插机”稳定时间的延伸。

软件 DRM 解码功能查询在性能上可能不明确,因为 H.264 实现允许软件解码或 DirectX 视频加速(DXVA)GPU 卸载。 但是,在所有 Windows 终结点中,H.264 DXVA 非常常见。

软件 DRM 解码查询的功能限制是未评估解码 bpc。 Windows 不支持 H.264 10 位解码,但具有 decode-bpc=10 的查询将成功。

特征查询结果反映了子系统的最大理论功能。 GPU 中的其他活动或不同的电源状态可能会降低实际功能。

硬件 DRM 查询示例

下面显示了硬件 DRM 和 HDCP 2.2 类型 1 限制的 4K 10 位 HEVC 标准动态范围(SDR)内容的最常见用法:

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”hvc1,mp4a”;features=”decode-res-x=3840,decode-res-y=2160,decode-bitrate=20000,decode-fps=30,decode-bpc=10,display-res-x=3840,display-res-y=2160,display-bpc=8,hdcp=2”’);

其中,mp4a 可以替换为 mp3ac-3ec-3。 可以根据内容提供程序的编码调整解码比特率。 decode-fps 可能设置为 60 而不是 30,但可能会受硬件 DRM 安全处理器的吞吐量功能限制。 例如,如果提供程序希望将 4K 流推送到 3200 x 1800、3000 x 2000 或 2560 x 1440 显示,则 display-res-xdisplay-res-y 值可能设置为小于完整 4K。

由于解码查询结果预计不会动态更改,因此连续轮询 hdcp=2,而在“也许”中,可以使用较短的形式作为较小的优化

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”hvc1,mp4a”;features=”hdcp=2”’);

当然,此优化不会捕获动态监视器分辨率更改,但这种更改可能会中断 HDCP 的建立。

下面显示了硬件 DRM 和 HDCP 2.2 类型 1 限制的 4K 10 位 HEVC 高动态范围(HDR)内容的最常见用法:

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”hvc1,mp4a”;features=”decode-res-x=3840,decode-res-y=2160,decode-bitrate=20000,decode-fps=30,decode-bpc=10,display-res-x=3840,display-res-y=2160,display-bpc=8,hdr=1,hdcp=2”’);

注意:对于 Windows 10 版本 1607,hdr=1 指示存在 10 位 MPO 支持 DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020,或者仅开发 HighColor 注册表项存在且已设置: HKLM\SOFTWARE\Microsoft\Windows\DWM key HighColor DWORD 值 1。

下面显示了 1080p 8 位 H.264 SDR 内容(硬件 DRM 和 HDCP 不受 2.2 类型 1 限制)的最常见用法:

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”avc1,mp4a”;features=”decode-res-x=1920,decode-res-y=1080,decode-bitrate=10000,decode-fps=30,decode-bpc=8,display-res-x=1920,display-res-y=1080,display-bpc=8,hdcp=1”’);

适用于

另请参阅