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

瀏覽器相容性

另見