MediaSource对象表示HTMLMediaElement元素的一个媒体数据源。它会记录源的readyState和一个能够添加媒体数据去展现的SourceBuffer对象的列表。MediaSource对象由web应用建立而后绑定到HTMLMediaElement元素上。web应用经过添加SourceBuffer对象给sourceBuffers属性从而添加媒体数据到source中。当须要播放的时候,HTMLMediaElement从MediaSource对象中读取媒体数据。web
每一个MediaSource对象都由一个实时的可检索的range变量来存储归一化后的TimeRanges对象。当MediaSource对象建立的时候这个变量初始化为一个空的TimeRanges对象,经过setLiveSeekableRange() 和 clearLiveSeekableRange()方法来维护,而后经过HTMLMediaElement Extensions 来更改HTMLMediaElement.seekable属性。
ReadyState 算法
状态值 | 描述 |
---|---|
closed | 表示source尚未绑定到media元素上 |
open | source被media元素打开而且有可用的SourceBuffer对象在sourceBuffers中 |
ended | source还被绑定在media元素上,可是endOfStream() 执行过了 |
构造函数 浏览器
[Constructor] interface MediaSource : EventTarget { readonly attribute SourceBufferList sourceBuffers; readonly attribute SourceBufferList activeSourceBuffers; readonly attribute ReadyState readyState; attribute unrestricted double duration; attribute EventHandler onsourceopen; attribute EventHandler onsourceended; attribute EventHandler onsourceclose; SourceBuffer addSourceBuffer(DOMString type); void removeSourceBuffer(SourceBuffer sourceBuffer); void endOfStream(optional EndOfStreamError error); void setLiveSeekableRange(double start, double end); void clearLiveSeekableRange(); static boolean isTypeSupported(DOMString type); };
sourceBuffers 类型:SourceBufferList,只读
MediaSource相关的SourceBuffer列表,当readyState=="closed"的时候老是空的,一旦readyState变为"open"状态时,就能够经过 addSourceBuffer()方法添加SourceBuffer对象到列表中app
activeSourceBuffers 类型:SourceBufferList,只读ide
sourceBuffers中selected video track, the enabled audio track(s), and the "showing" or "hidden" text track(s)的一个子集。函数
readyState 类型:ReadyState,只读
MediaSource对象的当前状态,刚建立的时候必定是‘closed’。rest
duration 类型:unrestricted double
MediaSource刚建立的时候,初始化值为NaN。
如何获取?code
Note
若是当前有更高end time的缓冲帧,duration change algorithm会调整新的更大的duration。
appendBuffer()和 endOfStream()方法会更新duration在特定的状况下。对象
onsourceopen 类型:EventHandler
sourceopen事件的处理回调事件
onsourceended 类型:EventHandler
sourceended事件的处理回调
onsourceclose 类型:EventHandler
sourceclose事件的处理回调
addSourceBuffer
入参:type, 返回SourceBuffer对象,调用如:
sourceBuffer = ms.addSourceBuffer('video/mp4; codecs="avc1.4d401f"');
添加一个新的SourceBuffer对象到sourceBuffers属性,接下来ua须要执行:
好比当媒体元素到了HAVE_METADATA状态的时候,ua就不支持播放中更多track的添加了
removeSourceBuffer
endOfStream
入参:error(EndOfStreamError),无返回值
只表明浏览器是否支持的能力,不表明addSourceBuffer()方法有足够的资源建立新的SourceBuffer
事件名称 | 描述 |
---|---|
sourceopen | readyState 从close到open 或 从ended到open |
sourceended | readyState 从open到ended |
sourceclose | readyState 从open到closed 或 从open到ended |