用于查询媒体功能支持的媒体类型字符串

本文列出了查询受支持媒体播放类型的 Windows API 支持的 MIME 类型字符串。 术语“内容类型”和“类型”在过去被称为 MIME 类型。这些基本字符串与 HTMLMediaElement.canPlayType 方法中使用的字符串一致。 这些字符串允许开发人员查询是否支持指定的媒体内容、编解码器和功能。

内容类型字符串在以下规范中定义。

  • RFC 2045 此规范定义用于指定媒体类型和子类型标识符的内容类型字符串。
  • RFC 6381 此规范定义编解码器标识符用于指定编解码器。
  • RFC 2045 此规范允许以 ";<parameter>=<name>[=<value>] [,<name>[=<value>]"形式添加其他自定义参数作为修饰符。 RFC 2045 合规分析程序必须忽略这些参数(如果未识别)。 对于功能查询,<parameter> 为命名的功能。
  • RFC 4281 此规范使扩展能够查询其他功能。

Windows 实现要求 RFC 2045 媒体类型和子类型标识符(例如 "video/mp4")和 RFC 6381 编解码器参数 codec="<video codec>[,<audio codec>]" 始终存在,以提供有效的查询结果。 某些 Windows API 接口支持附加的 feature=<features>元素。 下表列出了 Windows API 为字符串类型的每个元素所支持的字符串。

本文中所述的内容类型字符串格式由以下 API 使用。

WinRT API

Microsoft 媒体基础 API

其中许多 API 返回将结果表示为“NotSupported”、“Maybe”或“Probably”的枚举值。 对于 WinRT API,存在 ProtectionCapabilityResultMediaCanPlayResponse 枚举类型。 对于媒体基础,存在 MF_MEDIA_ENGINE_CANPLAY 枚举。 某些 Media Foundation API 仅返回一个布尔值,该值指示二进制支持的结果或不受支持的结果。

媒体类型和子类型

Windows API 仅支持媒体类型 "video""mp4"的子类型/容器的内容类型字符串。

价值 描述 言论
"video/mp4" 视频媒体类型和 MPEG-4 子类型/容器。

视频编解码器

价值 描述 言论
"avc1" H.264
"hvc1" HEVC
“hev1” HEVC
“vp9” VP9
“vp09” VP9
"avc3" H.264
"av1" AOMedia 视频 1
“av01” AOMedia 视频 1

特征

子系统 功能名称 特征值 描述 对于此子系统是必需的 言论
1a 视频解码 decode-res-x 非负数(以像素为单位) 视频解码器是否支持 X 轴中的此最大分辨率?
1b 视频解码 decode-res-y 非负数(以像素为单位) 视频解码器是否支持 Y 轴中的此最大分辨率?
1c 视频解码 decode-bitrate 以 KB/秒 (Kbps) 为单位的正数 视频解码器是否支持此最大比特率?
1d 视频解码 decode-fps 24、25、29.97、30、50、59.94 或 60 视频解码是否支持每秒最大帧数(FPS)值?
1e 视频解码 decode-bpc (decode-bpp 已弃用) 0、8、10 或 12 视频解码器是否可以使用此每像素颜色深度?
1f 视频解码 解码器硬件加速 1 或无值 (true) 无论是否存在 OS 解码器,DXVA 硬件加速是否可用? N Windows 10 版本 1709 中引入的支持
1g 视频解码 decoder-software-acceleration 1 或无值 (true) 是否存在一个可以解码流的 OS 解码器? N Windows 10 版本 1709 中引入的支持
1h 视频解码 解码器软件需要硬件支持 1 或无值 (true) OS 解码器的功能是否要求存在 DXVA 硬件加速? N Windows 10 版本 1709 中引入的支持
2a 视频显示 1 display-res-x 非负数(以像素为单位) 是否至少有一个相交的显示器在 X 轴上支持此分辨率? 请参阅分辨率交集算法
2b 视频显示 1 display-res-y 非负数(以像素为单位) 是否有至少一个交叉显示器支持在 Y 轴上的这种分辨率? 请参阅分辨率交集算法
2c 视频显示 1 display-refreshrate 24、25、29.97、30、50、59.94 或 60 显示器是否已配置为至少请求的刷新率(由 Windows 理解)? N
2d 视频显示 1 display-bpc(display-bpp 已弃用) 8 或 10 所有具备至少要求分辨率的相交显示器是否实现了至少此颜色深度? N
3 视频显示器 2* hdr 1 (支持) 目标是否支持高动态范围(HDR)呈现
4 视频输出保护 hdcp 0(关闭),1(无 HDCP 2.2 类型 1 限制),2(使用 HDCP 2.2 类型 1 限制) 所有启用相交的显示器是否至少支持请求保护级别?
5 常规视频:效率 efficiency-setting 0(关 = 无限制),1(开 = 使用电池电源时限制分辨率) 用户是否希望电池续航、流式传输开销和/或下载速度优先于最高分辨率? Windows 10 版本 1709 中引入的支持。 请参阅启用效率设置后的分辨率
6a 视频解密 加密类型 “cenc”或“cbcs” 此加密类型是否支持使用指定的编解码器/密钥系统进行解密? 如果未指定值,则使用默认值“cenc”。 N
6b 视频解密 encryption-iv-size 8 或 16 此初始化向量(IV)大小(以字节为单位)是否支持使用指定的编解码器/密钥系统进行解密? 如果未指定值,则使用默认值 8。 N
7 音频呈现器 audio-endpoint-codec 音频编解码器字符串。 请参阅 [支持的音频终结点编解码器] (#supported-audio-endpoint-codecs) 音频终结点是否原生支持此音频编解码器? N Windows 10 内部版本 1803 中引入的支持。 仅受 Microsoft 媒体基础 API 支持。 不支持 WinRT API。

分辨率交集算法

交集算法为:

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

启用效率设置后的分辨率

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

音频编解码器

价值 描述 言论
"mp4a" MPEG-4 音频
"ac-3" Dolby Digital
"ec-3" Dolby Digital Plus
"ac-4" Dolby AC-4
"flac" FLAC
"mp3" MP3

支持的音频终结点编解码器

某些音频编码功能需要音频终结点能够原生支持该功能。 音频终结点编解码器 扩展对应用程序和流媒体服务非常有用,使它们能够动态判断是否应发送立体声音频或 5.1(因为设备支持 5.1),因此在最大化音频质量的同时控制带宽使用。

audio-endpoint-codec 查询不同于 codecs 查询,因为它确定连接到电脑的音频终结点设备是否支持指定的格式。 因此,例如,如果电脑具有 AC3 编解码器的软件解码器,则 codecs=ac-3 查询将成功。 如果电脑使用基本耳机作为音频终结点,则 audio-endpoint-codec=ac-3 查询将失败。 但是,如果电脑连接到可以解码 AC3 格式的音频/视频接收器,audio-endpoint-codec=ac-3 查询将传递。

Windows 10 内部版本 1803 引入了对 音频终端编解码器 的支持。

下面是使用 audio-endpoint-codec的示例内容类型字符串。

'video/mp4; codecs="avc1,mp4a"; features="audio-endpoint-codec=DD"'

下面是未压缩 PCM 音频的示例内容类型字符串。

'video/mp4; features="audio-endpoint-codec=PCM2.0"'

请注意,如果终结点支持指定的更多或相同数量的通道,则检查将成功。 因此,如果系统配置为 5.1 音频,则检查“PCM2.0”和“PCM5.1”将通过,但检查“PCM7.1”将失败。

编解码器字符串 描述 言论
DD Dolby Digital
DD+ Dolby Digital Plus
DD+JOC Dolby Digital + JOC 压缩空间音频
DTS DTS 压缩音频
DTSHD DTS-HD 压缩音频
PCM2.0 未压缩的 2 声道音频
PCM5.1 未压缩的 5.1 通道音频
PCM7.1 未压缩的 7.1 通道音频
AC3 Dolby Digital