MediaSource: sourceclose 事件

可用性有限

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

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

MediaSource 对象的 readyState 变为 "closed" 时,会触发 sourceclose 事件。这表明 MediaSource 已从媒体元素中分离。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

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

onsourceclose = (event) => { }

事件类型

一个通用的 Event

示例

处理 sourceclose 事件

此示例演示如何将媒体元素与 MediaSource 分离,并处理 sourceclose 事件以进行适当的资源管理。代码设置一个 MediaSource,将其附加到视频元素,并侦听 sourceclose 事件。当事件触发时,它会执行清理任务(revokeObjectURL)。

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);
    });
});

function detachMediaSource() {
  video.src = null; // Detach the MediaSource
}

mediaSource.addEventListener("sourceclose", (event) => {
  console.log("MediaSource sourceclose:", event);
  // Perform cleanup tasks here, e.g., release resources, update UI
  URL.revokeObjectURL(video.src); // Clean up the object URL
});

// Call detachMediaSource() when appropriate, e.g., on a button click
document
  .getElementById("detachButton")
  .addEventListener("click", detachMediaSource);

规范

规范
Media Source Extensions™
# dfn-sourceclose

浏览器兼容性