Limited availability
Note: This feature is available in Dedicated Web Workers.
The addSourceBuffer()
method of the MediaSource
interface creates a new SourceBuffer
of the given MIME type and adds it to the MediaSource
's sourceBuffers
list. The new SourceBuffer
is also returned.
addSourceBuffer(mimeType)
Parameters
mimeType
A string specifying the MIME type of the SourceBuffer
to create and add to the MediaSource
.
A SourceBuffer
object representing the new source buffer that has been created and added to the media source.
InvalidAccessError
DOMException
Thrown if the value specified for mimeType
is an empty string rather than a valid MIME type.
InvalidStateError
DOMException
Thrown if the MediaSource
is not in the "open"
readyState
.
NotSupportedError
DOMException
Thrown if the specified mimeType
isn't supported by the user agent, or is not compatible with the MIME types of other SourceBuffer
objects that are already included in the media source's sourceBuffers
list.
QuotaExceededError
DOMException
Thrown if the user agent can't handle any more SourceBuffer
objects, or creating a new SourceBuffer
using the given mimeType
would result in an unsupported configuration of SourceBuffer
s.
The following snippet is from an example written by Nick Desaulniers (view the full demo live, or download the source for further investigation). The function getMediaSource()
, which is not defined here, returns a 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);
});
}
Specifications Browser compatibility See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4