ProtectionCapabilities.IsTypeSupported(String, String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
查询用于 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 或输出保护查询的情况下执行解码子系统查询
- Display 1 子系统查询需要提供解码子系统查询
- Display 2 子系统查询需要解码子系统查询,但不需要 Display 1 子系统查询。
- 可以使用或不使用解码、显示 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 中驱动显示器的所有图形适配器。 对于硬件 DRM 查询,此适配器集仅筛选为具有硬件 DRM 支持的适配器。
- 查找连接到步骤 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
可以替换为 mp3
、ac-3
或 ec-3
。 可以根据内容提供程序的编码调整解码比特率。
decode-fps
可能设置为 60 而不是 30,但可能会受硬件 DRM 安全处理器的吞吐量功能限制。 例如,如果提供程序希望将 4K 流推送到 3200 x 1800、3000 x 2000 或 2560 x 1440 显示,则 display-res-x
和 display-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_P2020 或 DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 或 DXGI_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”’);