SourceBuffer
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.
Giao diện SourceBuffer đại diện cho một đoạn phương tiện được truyền vào HTMLMediaElement và được phát thông qua đối tượng MediaSource. Điều này có thể được tạo thành từ một hoặc một số phân đoạn phương tiện truyền thông.
Thuộc tính phiên bản
SourceBuffer.appendWindowEnd-
Kiểm soát dấu thời gian ở cuối cửa sổ chắp thêm.
SourceBuffer.appendWindowStart-
Kiểm soát dấu thời gian để bắt đầu nối thêm cửa sổ. Đây là phạm vi dấu thời gian có thể được sử dụng để lọc dữ liệu phương tiện nào được thêm vào
SourceBuffer. Các khung phương tiện được mã hóa có dấu thời gian trong phạm vi này sẽ được thêm vào, trong khi những khung nằm ngoài phạm vi này sẽ bị lọc ra. SourceBuffer.audioTracksRead only-
Danh sách các bản âm thanh hiện có trong
SourceBuffer. SourceBuffer.bufferedRead only-
Trả về phạm vi thời gian hiện được lưu vào bộ đệm trong
SourceBuffer. SourceBuffer.mode-
Kiểm soát cách xử lý thứ tự của các phân đoạn phương tiện trong
SourceBuffer, về việc chúng có thể được thêm vào theo bất kỳ thứ tự nào hay chúng phải được giữ theo một trình tự nghiêm ngặt. SourceBuffer.textTracksRead only Experimental-
Danh sách các đoạn văn bản hiện có trong
SourceBuffer. SourceBuffer.timestampOffset-
Kiểm soát độ lệch được áp dụng cho dấu thời gian bên trong các phân đoạn phương tiện được thêm vào
SourceBuffer. SourceBuffer.updatingRead only-
Một boolean cho biết liệu
SourceBufferhiện có đang được cập nhật hay không - tức là, một thao tácappendBuffer()hayremove()hiện đang được tiến hành. SourceBuffer.videoTracksRead only-
Danh sách các bản nhạc video hiện có trong
SourceBuffer.
Các phương thức thực thể
Kế thừa các phương thức từ giao diện chính của nó, EventTarget.
SourceBuffer.abort()-
Hủy bỏ phân đoạn hiện tại và đặt lại trình phân tích cú pháp phân đoạn.
SourceBuffer.appendBuffer()-
Nối dữ liệu phân đoạn phương tiện từ đối tượng
ArrayBuffer,TypedArrayhoặcDataViewvàoSourceBuffer. SourceBuffer.appendBufferAsync()Non-standard Experimental-
Bắt đầu quá trình thêm không đồng bộ bộ đệm được chỉ định vào
SourceBuffer. Trả vềPromiseđược hoàn thành sau khi bộ đệm được thêm vào. SourceBuffer.changeType()-
Thay đổi MIME type mà các lệnh gọi trong tương lai tới
appendBuffer()sẽ yêu cầu dữ liệu mới tuân theo. SourceBuffer.remove()-
Xóa các phân đoạn phương tiện trong một phạm vi thời gian cụ thể khỏi
SourceBuffer. SourceBuffer.removeAsync()Non-standard Experimental-
Bắt đầu quá trình loại bỏ không đồng bộ các phân đoạn phương tiện trong phạm vi được chỉ định khỏi
SourceBuffer. Trả vềPromiseđược thực hiện sau khi tất cả các phân đoạn phù hợp đã bị xóa.
Sự kiện
abort-
Được kích hoạt khi việc thêm bộ đệm bị hủy bỏ, vì phương thức
SourceBuffer.abort()hoặcMediaSource.removeSourceBuffer()được gọi trong khi thuật toánSourceBuffer.appendBuffer()vẫn đang chạy.SourceBuffer.updatingthay đổi từtruethànhfalse. error-
Được kích hoạt khi xảy ra lỗi trong quá trình xử lý thao tác
appendBuffer().SourceBuffer.updatingthay đổi từtruethànhfalse. update-
Được kích hoạt bất cứ khi nào
SourceBuffer.appendBuffer()hoặcSourceBuffer.remove()hoàn thành.SourceBuffer.updatingthay đổi từtruethànhfalse. updateend-
Được kích hoạt sau khi hoàn thành (không nhất thiết thành công) thao tác
appendBuffer()hoặcremove(). Sự kiện này được kích hoạt sau các sự kiệnupdate,errorhoặcabort. updatestart-
Được kích hoạt khi thao tác
appendBuffer()hoặcremove()bắt đầu.updatingthay đổi từfalsethànhtrue.
Ví dụ
>Đang tải từng đoạn video
Ví dụ sau đây tải từng đoạn video nhanh nhất có thể, phát video đó ngay khi có thể.
Bạn có thể xem mã hoàn chỉnh tại https://github.com/mdn/dom-examples/tree/main/sourcebuffer và dùng thử bản demo trực tiếp tại https://mdn.github.io/dom-examples/sourcebuffer/.
const video = document.querySelector("video");
const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
function loadVideo() {
if (MediaSource.isTypeSupported(mimeCodec)) {
const mediaSource = new MediaSource();
console.log(mediaSource.readyState); // closed
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener("sourceopen", sourceOpen);
} else {
console.error("Unsupported MIME type or codec: ", mimeCodec);
}
}
async function sourceOpen() {
console.log(this.readyState); // open
const sourceBuffer = this.addSourceBuffer(mimeCodec);
const response = await fetch(assetURL);
const buffer = await response.arrayBuffer();
sourceBuffer.addEventListener("updateend", () => {
this.endOfStream();
video.play();
console.log(this.readyState); // ended
});
sourceBuffer.appendBuffer(buffer);
}
const load = document.querySelector("#load");
load.addEventListener("click", loadVideo);
```## Thông số kỹ thuật
If you're able to see this, something went wrong on this page.
## Khả năng tương thích của trình duyệt
If you're able to see this, something went wrong on this page.
## Xem thêm
- MediaSource- SourceBufferList