MediaSource: isTypeSupported() 静态方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

注意:此功能在 专用 Web Workers 中可用。

MediaSource.isTypeSupported() 静态方法返回一个布尔值,如果当前的 用户代理 可能 支持给定的 MIME 类型和(可选的)编解码器,则返回 true

也就是说,如果它能成功地为该媒体类型创建 SourceBuffer 对象。如果返回值是 false,则用户代理确定它无法访问指定格式的媒体。

语法

js
MediaSource.isTypeSupported(type)

参数

type

一个字符串,指定媒体的 MIME 类型和(可选的)包含支持的编解码器列表的逗号分隔的 codecs 参数

返回值

如果给定类型的媒体无法播放,则返回 false

如果浏览器可能播放指定类型的媒体,则返回 true。这不是保证,您的代码必须为媒体可能无法正确播放(甚至根本无法播放)的可能性做好准备。

所有处理媒体文件的 Web API 在确定媒体类型是否可用时,都采用“否/可能/很可能”的方法(或者,在这种情况下,“否或很可能”)。这是因为媒体文件是复杂、精密的结构,有太多细微的差别,在实际使用媒体内容之前,无法绝对确定任何事情。

示例

以下代码段来自 Nick Desaulniers 编写的示例(在线查看完整演示,或下载源代码以供进一步研究)。函数 getMediaSource()(此处未定义)返回一个 MediaSource

js
const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
let mediaSource;

if ("MediaSource" in window && MediaSource.isTypeSupported(mimeCodec)) {
  mediaSource = getMediaSource();
  console.log(mediaSource.readyState); // closed
  video.src = URL.createObjectURL(mediaSource);
  mediaSource.addEventListener("sourceopen", sourceOpen);
} else {
  console.error("Unsupported MIME type or codec: ", mimeCodec);
}

function sourceOpen() {
  console.log(this.readyState); // open
  const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
  fetchAB(assetURL, (buf) => {
    sourceBuffer.addEventListener("updateend", () => {
      mediaSource.endOfStream();
      video.play();
      console.log(mediaSource.readyState); // ended
    });
    sourceBuffer.appendBuffer(buf);
  });
}

规范

规范
Media Source Extensions™
# dom-mediasource-istypesupported

浏览器兼容性

另见