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.
Hàm khởi tạo
ManagedMediaSource()Experimental-
Tạo và trả về một phiên bản đối tượng
ManagedMediaSourcemớ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.streamingRead only Experimental-
Một boolean cho biết liệu đối tượng
ManagedMediaSourcecó đ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.
startstreamingExperimental-
Được kích hoạt khi thuộc tính
streamingcủaManagedMediaSourcethay đổi từfalsethànhtrue, nghĩa là nguồn phương tiện đã bắt đầu phát trực tuyến. endstreamingExperimental-
Được kích hoạt khi thuộc tính
streamingcủaManagedMediaSourcethay đổi từtruethànhfalse, 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 startstreaming và endstreaming để 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.
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> |