MediaSource:endOfStream() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

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

MediaSource 介面的 endOfStream() 方法用於標識流的結束。

語法

js
endOfStream()
endOfStream(endOfStreamError)

引數

endOfStreamError 可選

當到達流的末尾時引發的錯誤的字串表示。可能的值為:

network

終止播放並指示發生了網路錯誤。這可用於建立與媒體流相關的自定義錯誤處理程式。例如,您可能有一個處理媒體塊請求的函式,該函式獨立於其他網路請求。當您使用 fetch() 請求媒體塊並收到網路錯誤時,您可能希望呼叫 endOfStream('network'),在 UI 中顯示描述性訊息,甚至立即重試網路請求,或者等待網路恢復(透過某種輪詢)。

decode

終止播放並指示發生瞭解碼錯誤。這可用於表明在獲取媒體資料時發生瞭解析錯誤;可能是資料已損壞,或者使用了瀏覽器無法解碼的編解碼器進行編碼。

返回值

無(undefined)。

異常

InvalidStateError DOMException

如果 MediaSource.readyState 不等於 open,或者 MediaSource.sourceBuffers 中的一個或多個 SourceBuffer 物件正在更新(即,它們的 SourceBuffer.updating 屬性為 true),則丟擲此錯誤。

示例

以下程式碼段來自 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-endofstream

瀏覽器相容性

另見