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 |