MediaSource: sourceended 事件

可用性有限

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

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

MediaSource 物件的 readyState 變為 "ended" 時,會觸發 sourceended 事件。這表明應用程式已完成向 MediaSource 傳送資料。當應用程式完成將所有媒體資料附加到與 MediaSource 關聯的 SourceBuffer 物件後,它會在 MediaSource 上呼叫 MediaSource.endOfStream() 方法。這將導致 readyState 轉換為 "ended" 並觸發 sourceended 事件。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("sourceended", (event) => {})

onsourceended = (event) => {}

事件型別

一個通用的 Event

示例

處理 sourceopen 事件

此示例演示瞭如何設定影片元素以進行播放,以及如何處理 sourceended 事件以進行適當的資源管理。程式碼設定一個 MediaSource,透過獲取和緩衝影片資料來啟動播放,然後使用 sourceended 事件執行清理任務,例如移除事件監聽器並在播放完成後通知使用者。

js
const video = document.getElementById("myVideo");
const mediaSource = new MediaSource();

video.src = URL.createObjectURL(mediaSource);

mediaSource.addEventListener("sourceopen", (event) => {
  const sourceBuffer = mediaSource.addSourceBuffer(
    'video/mp4; codecs="avc1.42E01E"',
  );

  fetch("video-data.mp4")
    .then((response) => response.arrayBuffer())
    .then((data) => {
      sourceBuffer.appendBuffer(data);
      sourceBuffer.addEventListener("updateend", () => {
        mediaSource.endOfStream();
      });
    });
});

mediaSource.addEventListener("sourceended", (event) => {
  console.log("MediaSource sourceended:", event);
  URL.revokeObjectURL(video.src);
  // Perform cleanup

  // Remove event listeners from SourceBuffer and MediaSource
  sourceBuffer.removeEventListener("updateend", () => {});
  mediaSource.removeEventListener("sourceopen", () => {});

  // Notify user (e.g., display a "Playback finished" message)
  const messageElement = document.createElement("p");
  messageElement.textContent = "Playback finished.";
  document.body.appendChild(messageElement);
});

規範

規範
Media Source Extensions™
# dfn-sourceended

瀏覽器相容性

另見

MediaSource.endOfStream()