MediaSource: sourceended event

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Note: This feature is available in Dedicated Web Workers.

Sự kiện sourceended được phát ra khi readyState của đối tượng MediaSource thay đổi thành "ended". Điều này cho biết ứng dụng đã hoàn tất việc gửi dữ liệu đến MediaSource. Khi ứng dụng đã hoàn tất việc thêm tất cả dữ liệu media vào các đối tượng SourceBuffer liên kết với một MediaSource, nó gọi phương thức MediaSource.endOfStream() trên MediaSource. Điều này khiến readyState chuyển sang "ended" và kích hoạt sự kiện sourceended.

Cú pháp

Sử dụng tên sự kiện trong các phương thức như addEventListener(), hoặc đặt thuộc tính xử lý sự kiện.

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

onsourceended = (event) => {}

Loại sự kiện

Một Event chung.

Ví dụ

Xử lý sự kiện sourceended

Ví dụ này minh họa cách thiết lập một video element để phát lại và xử lý sự kiện sourceended để quản lý tài nguyên đúng cách. Code thiết lập một MediaSource, khởi tạo phát lại bằng cách lấy và đệm dữ liệu video, sau đó sử dụng sự kiện sourceended để thực hiện các tác vụ dọn dẹp như xóa các trình xử lý sự kiện và thông báo cho người dùng khi phát lại hoàn tất.

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

Thông số kỹ thuật

Specification
Media Source Extensions™
# dfn-sourceended

Tương thích trình duyệt

Xem thêm

MediaSource.endOfStream()