SourceBuffer
注意:此功能在 專用 Web Workers 中可用。
SourceBuffer 介面代表要透過 物件傳遞給 MediaSource 並播放的媒體塊。這可以由一個或多個媒體片段組成。HTMLMediaElement
例項屬性
SourceBuffer.appendWindowEnd-
控制追加視窗的結束時間戳。
SourceBuffer.appendWindowStart-
控制 追加視窗 的開始時間戳。這是一個時間戳範圍,可用於過濾要追加到
SourceBuffer的媒體資料。時間戳在此範圍內的編碼媒體幀將被追加,而範圍外的將被過濾掉。 SourceBuffer.audioTracks只讀-
當前包含在
SourceBuffer中的音訊軌列表。 SourceBuffer.buffered只讀-
返回當前在
SourceBuffer中緩衝的時間範圍。 SourceBuffer.mode-
控制
SourceBuffer中媒體片段的排序方式,即它們是否可以按任意順序追加,還是必須保持嚴格的順序。 SourceBuffer.textTracks只讀 實驗性-
當前包含在
SourceBuffer中的文字軌列表。 SourceBuffer.timestampOffset-
控制應用於後續追加到
SourceBuffer的媒體片段內的時間戳的偏移量。 SourceBuffer.updating只讀-
一個布林值,指示
SourceBuffer當前是否正在更新 — 即,是否正在進行SourceBuffer.appendBuffer()或SourceBuffer.remove()操作。 SourceBuffer.videoTracks只讀-
當前包含在
SourceBuffer中的影片軌列表。
例項方法
繼承其父介面 EventTarget 的方法。
SourceBuffer.abort()-
中止當前片段並重置片段解析器。
SourceBuffer.appendBuffer()-
將來自
ArrayBuffer、TypedArray或DataView物件的媒體片段資料追加到SourceBuffer。 SourceBuffer.appendBufferAsync()非標準 實驗性-
開始非同步將指定緩衝區追加到
SourceBuffer的過程。返回一個,該PromisePromise在緩衝區被追加後 fulfilled。 SourceBuffer.changeType()-
更改未來對
appendBuffer()的呼叫所期望的新資料遵循的 MIME 型別。 SourceBuffer.remove()-
從
SourceBuffer中刪除特定時間範圍內的媒體片段。 SourceBuffer.removeAsync()非標準 實驗性-
開始非同步從
SourceBuffer中刪除指定範圍內媒體片段的過程。返回一個,該PromisePromise在所有匹配的片段都被刪除後 fulfilled。
事件
abort-
當緩衝區追加被中止時觸發,因為在
SourceBuffer.appendBuffer()演算法仍在執行時呼叫了SourceBuffer.abort()或MediaSource.removeSourceBuffer()方法。從SourceBuffer.updatingtrue變為false。 error-
當在處理
appendBuffer()操作時發生錯誤時觸發。從SourceBuffer.updatingtrue變為false。 update-
每當
SourceBuffer.appendBuffer()或SourceBuffer.remove()完成時觸發。從SourceBuffer.updatingtrue變為false。 updateend-
在
appendBuffer()或remove()操作(無論是否成功)完成之後觸發。此事件在update、error或abort事件之後觸發。 updatestart-
當
appendBuffer()或remove()操作開始時觸發。從updatingfalse變為true。
示例
分塊載入影片
以下示例以儘可能快的速度分塊載入影片,並在能夠播放時立即播放。
您可以在 https://github.com/mdn/dom-examples/tree/main/sourcebuffer 找到完整的程式碼,並在 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);
規範
| 規範 |
|---|
| Media Source Extensions™ # sourcebuffer |
瀏覽器相容性
載入中…