MediaSource: isTypeSupported() 静态方法

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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参见