查询指定键系统是否支持指定的内容类型。
语法
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 或输出保护查询的情况下执行解码子系统查询
- Display 1 子系统查询需要提供解码子系统查询
- Display 2 子系统查询需要解码子系统查询,但不需要 Display 1 子系统查询。
- 可以使用或不使用解码、显示 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 中控制显示器的所有图形适配器。 对于硬件 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 安全处理器的吞吐量功能的限制。
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_P2020或DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709或DXGI_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 |