MediaSource: addSourceBuffer() method
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.
Phương thức addSourceBuffer() của giao diện MediaSource tạo một SourceBuffer mới với MIME type đã cho và thêm nó vào danh sách sourceBuffers của MediaSource. SourceBuffer mới cũng được trả về.
Cú pháp
addSourceBuffer(mimeType)
Tham số
mimeType-
Một chuỗi chỉ định MIME type của
SourceBuffercần tạo và thêm vàoMediaSource.
Giá trị trả về
Một đối tượng SourceBuffer đại diện cho source buffer mới đã được tạo và thêm vào media source.
Ngoại lệ
InvalidAccessErrorDOMException-
Ném ra nếu giá trị chỉ định cho
mimeTypelà một chuỗi rỗng thay vì một MIME type hợp lệ. InvalidStateErrorDOMException-
Ném ra nếu
MediaSourcekhông ở trạng thái"open"readyState. NotSupportedErrorDOMException-
Ném ra nếu
mimeTypeđược chỉ định không được user agent hỗ trợ, hoặc không tương thích với các MIME type của các đối tượngSourceBufferkhác đã có trong danh sáchsourceBufferscủa media source. QuotaExceededError-
Ném ra nếu tác nhân người dùng không thể xử lý thêm đối tượng
SourceBuffer, hoặc việc tạoSourceBuffermới vớimimeTypeđã cho sẽ dẫn đến một cấu hìnhSourceBufferkhông được hỗ trợ.
Ví dụ
Đoạn code sau từ một ví dụ do Nick Desaulniers viết (xem demo trực tiếp đầy đủ, hoặc tải mã nguồn xuống để xem kỹ hơn). Hàm getMediaSource(), không được định nghĩa ở đây, trả về một MediaSource.
const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
const mediaSource = getMediaSource();
if ("MediaSource" in window && MediaSource.isTypeSupported(mimeCodec)) {
console.log(mediaSource.readyState); // closed
mediaSource.addEventListener("sourceopen", sourceOpen);
video.src = URL.createObjectURL(mediaSource);
} else {
console.error("Unsupported MIME type or codec: ", mimeCodec);
}
function sourceOpen() {
console.log(this.readyState); // open
const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, (buf) => {
sourceBuffer.addEventListener("updateend", () => {
mediaSource.endOfStream();
video.play();
console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
}
Thông số kỹ thuật
| Specification |
|---|
| Media Source Extensions™> # dom-mediasource-addsourcebuffer> |