SourceBuffer
interface represents a chunk of media to be passed into an
HTMLMediaElement
and played, via a
MediaSource
object. This can be made up of one or several media segments.
<div id="interfaceDiagram" style="display: inline-block; position: relative; width: 100%; padding-bottom: 11.666666666666666%; vertical-align: middle; overflow: hidden;"><svg style="display: inline-block; position: absolute; top: 0; left: 0;" viewbox="-50 0 600 70" preserveAspectRatio="xMinYMin meet"><a xlink:href="../API/EventTarget.html" target="_top"><rect x="1" y="1" width="110" height="50" fill="#fff" stroke="#D4DDE4" stroke-width="2px" /><text x="56" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">EventTarget</text></a><polyline points="111,25 121,20 121,30 111,25" stroke="#D4DDE4" fill="none"/><line x1="121" y1="25" x2="151" y2="25" stroke="#D4DDE4"/><a xlink:href="../API/SourceBuffer" target="_top"><rect x="151" y="1" width="120" height="50" fill="#F4F7F8" stroke="#D4DDE4" stroke-width="2px" /><text x="211" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">SourceBuffer</text></a></svg></div>
a:hover text { fill: #0095DD; pointer-events: all;}
SourceBuffer.appendWindowEnd
Controls the timestamp for the end of the append window.
SourceBuffer.appendWindowStart
SourceBuffer
. Coded media frames with timestamps within this range will be appended, whereas those outside the range will be filtered out.
SourceBuffer.audioTracks
只读
SourceBuffer
.
SourceBuffer.buffered
只读
SourceBuffer
.
SourceBuffer.mode
SourceBuffer
is handled, in terms of whether they can be appended in any order, or they have to be kept in a strict sequence.
SourceBuffer.textTracks
只读
SourceBuffer
.
SourceBuffer.timestampOffset
SourceBuffer
.
SourceBuffer.trackDefaults
SourceBuffer
.
SourceBuffer.updating
只读
SourceBuffer
is currently being updated — i.e. whether an
SourceBuffer.appendBuffer()
,
SourceBuffer.appendStream()
,或
SourceBuffer.remove()
operation is currently in progress.
SourceBuffer.videoTracks
只读
SourceBuffer
.
SourceBuffer.onabort
SourceBuffer.appendBuffer()
or
SourceBuffer.appendStream()
is ended by a call to
SourceBuffer.abort()
.
SourceBuffer.updating
改变从
true
to
false
.
SourceBuffer.onerror
SourceBuffer.appendBuffer()
or
SourceBuffer.appendStream()
.
SourceBuffer.updating
改变从
true
to
false
.
SourceBuffer.onupdate
SourceBuffer.appendBuffer()
method or the
SourceBuffer.remove()
completes.
SourceBuffer.updating
改变从
true
to
false
. This event is fired before
onupdateend
.
SourceBuffer.onupdateend
SourceBuffer.appendBuffer()
method or the
SourceBuffer.remove()
has ended. This event is fired after
onupdate
.
SourceBuffer.onupdatestart
SourceBuffer.updating
transitions from
false
to
true
.
Inherits methods from its parent interface,
EventTarget
.
SourceBuffer.abort()
Aborts the current segment and resets the segment parser.
SourceBuffer.appendBuffer()
ArrayBuffer
or
ArrayBufferView
对象到
SourceBuffer
.
SourceBuffer.appendBufferAsync()
SourceBuffer
。返回
Promise
which is fulfilled once the buffer has been appended.
SourceBuffer.appendStream()
ReadableStream
对象到
SourceBuffer
.
SourceBuffer.changeType()
appendBuffer()
will expect the new data to conform to.
SourceBuffer.remove()
SourceBuffer
.
SourceBuffer.removeAsync()
SourceBuffer
。返回
Promise
which is fulfilled once all matching segments have been removed.
The following simple example loads a video chunk by chunk as fast as possible, playing it as soon as it can. This example was written by Nick Desaulniers and can be viewed live here (you can also download the source for further investigation.)
var video = document.querySelector('video');
var assetURL = 'frag_bunny.mp4';
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) {
var 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);
}
function sourceOpen (_) {
//console.log(this.readyState); // open
var mediaSource = this;
var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, function (buf) {
sourceBuffer.addEventListener('updateend', function (_) {
mediaSource.endOfStream();
video.play();
//console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
}
function fetchAB (url, cb) {
console.log(url);
var xhr = new XMLHttpRequest;
xhr.open('get', url);
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
cb(xhr.response);
};
xhr.send();
}
| 规范 | 状态 | 注释 |
|---|---|---|
|
媒体源扩展
The definition of 'SourceBuffer' in that specification. |
推荐 | 初始定义。 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
SourceBuffer
|
Chrome 31 | Edge 12 | Firefox 42 | IE 11 | Opera 18 | Safari 8 | WebView Android 4.4.3 | Chrome Android 31 | Firefox Android 不支持 No | Opera Android 18 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
abort
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 25 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 2.0 |
appendBuffer
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
appendBufferAsync
|
Chrome 不支持 No | Edge 不支持 No | Firefox 62 | IE 不支持 No | Opera 不支持 No | Safari 不支持 No | WebView Android 不支持 No | Chrome Android Yes | Firefox Android 不支持 No | Opera Android 不支持 No | Safari iOS 不支持 No | Samsung Internet Android Yes |
appendStream
弃用
非标
|
Chrome 不支持 No | Edge 不支持 12 — 79 | Firefox 不支持 No | IE ? | Opera 不支持 No | Safari ? | WebView Android ? | Chrome Android ? | Firefox Android 不支持 No | Opera Android ? | Safari iOS 不支持 No | Samsung Internet Android ? |
appendWindowEnd
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
appendWindowStart
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
audioTracks
|
Chrome 23 | Edge 12 | Firefox 不支持 No | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
buffered
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
changeType
非标
|
Chrome 70 | Edge 79 | Firefox 63 | IE ? | Opera ? | Safari ? | WebView Android 70 | Chrome Android 70 | Firefox Android 不支持 No | Opera Android ? | Safari iOS 不支持 No | Samsung Internet Android 10.0 |
mode
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
onabort
|
Chrome 53 | Edge 17 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android ? | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android ? |
onerror
|
Chrome 53 | Edge 17 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android ? | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android ? |
onupdate
|
Chrome 53 | Edge 17 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android ? | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android ? |
onupdateend
|
Chrome 53 | Edge 17 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android ? | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android ? |
onupdatestart
|
Chrome 53 | Edge 17 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android ? | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android ? |
remove
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
removeAsync
|
Chrome 不支持 No | Edge 不支持 No | Firefox 62 | IE 不支持 No | Opera 不支持 No | Safari 不支持 No | WebView Android 不支持 No | Chrome Android Yes | Firefox Android 不支持 No | Opera Android 不支持 No | Safari iOS 不支持 No | Samsung Internet Android Yes |
textTracks
|
Chrome 不支持 No | Edge 18 | Firefox 不支持 No | IE 不支持 No | Opera 不支持 No | Safari 8 | WebView Android 不支持 No | Chrome Android 不支持 No | Firefox Android 不支持 No | Opera Android 不支持 No | Safari iOS 不支持 No | Samsung Internet Android 不支持 No |
timestampOffset
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
trackDefaults
弃用
非标
|
Chrome ? | Edge ? | Firefox 不支持 No | IE ? | Opera ? | Safari ? | WebView Android ? | Chrome Android ? | Firefox Android 不支持 No | Opera Android ? | Safari iOS 不支持 No | Samsung Internet Android ? |
updating
|
Chrome 23 | Edge 12 | Firefox 42 | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
videoTracks
|
Chrome 23 | Edge 12 | Firefox 不支持 No | IE 11 | Opera 15 | Safari 8 | WebView Android 4.4.3 | Chrome Android 33 | Firefox Android 不支持 No | Opera Android 14 | Safari iOS 不支持 No | Samsung Internet Android 3.0 |
完整支持
不支持
兼容性未知
非标。预期跨浏览器支持较差。
弃用。不要用于新网站。
见实现注意事项。
用户必须明确启用此特征。
要求使用供应商前缀或不同名称。