IMFExtendedDRMTypeSupport::IsTypeSupportedEx 方法 (mfmediaengine.h)

查询指定键系统是否支持指定的内容类型。

语法

HRESULT IsTypeSupportedEx(
  [in]  BSTR                    type,
  [in]  BSTR                    keySystem,
  [out] MF_MEDIA_ENGINE_CANPLAY *pAnswer
);

参数

[in] type

一个 BSTR ,用于标识要查询其支持的功能。 此参数接受 RFC 2045 内容类型字符串来指定媒体类型和子类型标识符,以及所需的编解码器的 RFC 6381 编解码器标识符。 这些基字符串与 HTML5 HTMLMediaElement canPlayType 方法中使用的字符串一致。 RFC 2045 允许以“<:parameter>=<name>[=<value>] [,<name>[=<value>]“. RFC 2045 合规分析程序必须忽略这些参数(如果未识别)。 对于功能查询, <参数> 命名为特征。

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

请注意,术语内容类型和类型在历史上已知为 MIME 类型。

[in] keySystem

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

[out] pAnswer

来自MF_MEDIA_ENGINE_CANPLAY枚举的值,该值指示查询的功能是否可能受支持、可能受支持或不受支持。

返回值

成功S_OK。

注解

类型输入参数必须具有 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,并进行了以下说明: 也许 结果仅允许来自输出保护子系统,并且仅暂时允许。 这也许优先于所有其他功能查询的 AND 的结果,直到可能随着时间的推移,可能解析为可能不支持可能解决的当前时间限制为 10 秒。

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

条目 视频子系统 功能名称 特征值 DESCRIPTION 对于此子系统是必需的
1a 解码 decode-res-x 非负数(以像素为单位) 视频解码器是否支持 X 轴中的此最大分辨率? Y
1b 解码 decode-res-y 非负数(以像素为单位) 视频解码器是否支持 Y 轴中的此最大分辨率? Y
1c 解码 解码比特率 以 KB/秒 (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 解密 加密类型 “cenc”或“cbcs”,带有可选的“-clearlead”后缀。 此加密类型是否支持使用指定的编解码器/密钥系统进行解密? 如果未指定值,则使用默认值“cenc”。 从 Windows 11 内部版本 22621 和 Windows 10 内部版本 19045.5796 或更高版本开始,支持后缀“-clearlead”。 将“-clearlead”追加到加密类型值后,还会请求在加密内容开头使用明文内容。 内容开头的清除内容加快了呈现第一帧的时间。 如果将“-clearlead”添加到加密类型,将检查请求的编解码器的版本号。 AV1 和 VP9 编解码器将检查主要版本 2,并且 HEVC 将检查 v2.0.53421 或更高版本。 N
6b 解密 encryption-iv-size 8 或 16 此初始化向量(IV)大小(以字节为单位)是否支持使用指定的编解码器/密钥系统进行解密? 如果未指定值,则使用默认值 8。 N

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

** 仅在 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 安全处理器的吞吐量功能的限制。 display-res-x display-res-y如果提供程序希望将 4K 流推送到 3200 x 1800、3000 x 2000 或 2560 x 1440 显示,则值可能设置为小于完整 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 注册表项存在且已设置为 1: HKLM\SOFTWARE\Microsoft\Windows\DWM key HighColor

下面显示了 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”’);

要求

要求 价值
标头 mfmediaengine.h

另请参阅

MF_MEDIA_ENGINE_CANPLAY