This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The MediaSource
interface of the Media Source Extensions API represents a source of media data for an HTMLMediaElement
object. A MediaSource
object can be attached to a HTMLMediaElement
to be played in the user agent.
MediaSource()
MediaSource
object with no associated source buffers.MediaSource.sourceBuffers
Read only
SourceBufferList
object containing the list of SourceBuffer
objects associated with this MediaSource
.MediaSource.activeSourceBuffers
Read only
SourceBufferList
object containing a subset of the SourceBuffer
objects contained within MediaSource.sourceBuffers
— the list of objects providing the selected video track, enabled audio tracks, and shown/hidden text tracks.MediaSource.readyState
Read only
MediaSource
, whether it is not currently attached to a media element (closed
), attached and ready to receive SourceBuffer
objects (open
), or attached but the stream has been ended via MediaSource.endOfStream()
(ended
.)MediaSource.duration
MediaSource.onsourceclose
sourceclose
event.MediaSource.onsourceended
sourceended
event.MediaSource.onsourceopen
sourceopen
event.Inherits methods from its parent interface, EventTarget
.
MediaSource.addSourceBuffer()
SourceBuffer
of the given MIME type and adds it to the MediaSource.sourceBuffers
list.MediaSource.removeSourceBuffer()
SourceBuffer
from the MediaSource.sourceBuffers
list.MediaSource.endOfStream()
MediaSource.setLiveSeekableRange()
MediaSource.clearLiveSeekableRange()
MediaSource.isTypeSupported()
Boolean
value indicating if the given MIME type is supported by the current user agent — this is, if it can successfully create SourceBuffer
objects for that MIME type.The following simple example loads a video with XMLHttpRequest
, 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(); };
Specification | Status | Comment |
---|---|---|
Media Source Extensions The definition of 'MediaSource' in that specification. | Candidate Recommendation | Initial definition. |
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 23-webkit 31 | (Yes) |
25.0 (25.0)[1] 42.0 (42.0) | 11[2] | 15 | 8 |
setLiveSeekableRange(), clearLiveSeekableRange() | 62 | No support | No support | No support | No support | No support |
Feature | Android | Edge | Firefox Mobile (Gecko) | Firefox OS (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 4.4.4 | (Yes) | 41.0 | 41.0 | 11 | 30 | No support |
setLiveSeekableRange(), clearLiveSeekableRange() | ? | ? | ? | No support | ? | ? | ? |
[1] Available after switching the about:config
preference media.mediasource.enabled
to true
. In addition, support was limited to a whitelist of sites, for example YouTube, Netflix, and other popular streaming sites. The whitelist was removed and Media Source Extensions was enabled by default in 42+ for all sites.
[2] Only works on Windows 8+.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/MediaSource