ManagedMediaSource

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.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Giao diện ManagedMediaSource của Media Source Extensions API là một MediaSource quản lý tích cực nội dung bộ nhớ của nó. Khác với MediaSource thông thường, tác nhân người dùng có thể loại bỏ nội dung khỏi các đối tượng ManagedSourceBuffer của nó bất cứ lúc nào, vì lý do như giới hạn bộ nhớ hoặc phần cứng. Điều này làm cho nó phù hợp với các kịch bản phát trực tuyến tiết kiệm năng lượng, nơi tác nhân người dùng cần kiểm soát nhiều hơn đối với dữ liệu phương tiện được đệm.

Khi addSourceBuffer() được gọi trên ManagedMediaSource, nó tạo ra các đối tượng ManagedSourceBuffer (thay vì các đối tượng SourceBuffer), kích hoạt sự kiện bufferedchange để thông báo cho ứng dụng khi các phạm vi được đệm bị sửa đổi bởi tác nhân người dùng.

Note: Trên Safari, ManagedMediaSource chỉ kích hoạt khi tính năng phát lại từ xa bị tắt rõ ràng trên phần tử phương tiện (bằng cách đặt HTMLMediaElement.disableRemotePlayback thành true), hoặc khi cung cấp một nguồn AirPlay thay thế (ví dụ: phần tử HLS <source>). Nếu không có cả hai, sự kiện sourceopen sẽ không được kích hoạt.

EventTarget MediaSource ManagedMediaSource

Hàm khởi tạo

ManagedMediaSource() Experimental

Tạo và trả về một phiên bản đối tượng ManagedMediaSource mới không có bộ đệm nguồn liên kết.

Thuộc tính phiên bản

Cũng kế thừa các thuộc tính từ giao diện cha, MediaSource.

ManagedMediaSource.streaming Read only Experimental

Một boolean cho biết liệu đối tượng ManagedMediaSource có đang phát trực tuyến hay không. Khi là true, ứng dụng nên tích cực tải và nối dữ liệu phương tiện. Khi là false, ứng dụng có thể dừng tải dữ liệu mới.

Phương thức phiên bản

Kế thừa các phương thức từ giao diện cha, MediaSource.

Sự kiện

Cũng kế thừa các sự kiện từ giao diện cha, MediaSource.

startstreaming Experimental

Được kích hoạt khi thuộc tính streaming của ManagedMediaSource thay đổi từ false thành true, nghĩa là nguồn phương tiện đã bắt đầu phát trực tuyến.

endstreaming Experimental

Được kích hoạt khi thuộc tính streaming của ManagedMediaSource thay đổi từ true thành false, nghĩa là nguồn phương tiện đã dừng phát trực tuyến.

Ví dụ

Thiết lập nguồn phương tiện được quản lý

Ví dụ sau thiết lập một ManagedMediaSource, kết nối nó với phần tử <video>, và lắng nghe các sự kiện startstreamingendstreaming để kiểm soát khi nào dữ liệu phương tiện được tải. Các sự kiện bufferedchange được ghi lại bên dưới video.

js
const videoUrl =
  "https://mdn.github.io/shared-assets/videos/flower-fragmented.mp4";
const mediaType = 'video/mp4; codecs="avc1.64001F, mp4a.40.2"';
const video = document.querySelector("video");

if (!window.ManagedMediaSource?.isTypeSupported(mediaType)) {
  console.log("ManagedMediaSource is not supported in this browser.");
} else {
  const source = new ManagedMediaSource();
  video.disableRemotePlayback = true;
  video.src = URL.createObjectURL(source);

  source.addEventListener("sourceopen", () => {
    const sourceBuffer = source.addSourceBuffer(mediaType);

    sourceBuffer.addEventListener("bufferedchange", (event) => {
      for (let i = 0; i < event.addedRanges.length; i++) {
        console.log(
          `Buffered: ${event.addedRanges.start(i).toFixed(2)}s – ${event.addedRanges.end(i).toFixed(2)}s`,
        );
      }
    });

    source.addEventListener("startstreaming", async () => {
      console.log("startstreaming — fetching media data…");
      const response = await fetch(videoUrl);
      const data = await response.arrayBuffer();
      sourceBuffer.appendBuffer(data);
    });

    source.addEventListener("endstreaming", () => {
      console.log("endstreaming — enough data buffered");
    });
  });
}

Thông số kỹ thuật

Specification
Media Source Extensions™
# dom-managedmediasource

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

Xem thêm