摘要:对象表示元素的一个媒体数据源。对象由应用创建然后绑定到元素上。当需要播放的时候,从对象中读取媒体数据。每个对象都由一个实时的可检索的变量来存储归一化后的对象。类型,只读对象的当前状态,刚创建的时候一定是。和方法会更新在特定的情况下。
2. MediaSource Object
MediaSource对象表示HTMLMediaElement元素的一个媒体数据源。它会记录源的readyState和一个可以添加媒体数据去展示的SourceBuffer对象的列表。MediaSource对象由web应用创建然后绑定到HTMLMediaElement元素上。web应用通过添加SourceBuffer对象给sourceBuffers属性从而添加媒体数据到source中。当需要播放的时候,HTMLMediaElement从MediaSource对象中读取媒体数据。
每个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); };2.1 属性值
sourceBuffers 类型:SourceBufferList,只读
MediaSource相关的SourceBuffer列表,当readyState=="closed"的时候总是空的,一旦readyState变为"open"状态时,就可以通过 addSourceBuffer()方法添加SourceBuffer对象到列表中
activeSourceBuffers 类型:SourceBufferList,只读
sourceBuffers中selected video track, the enabled audio track(s), and the "showing" or "hidden" text track(s)的一个子集。
readyState 类型:ReadyState,只读
MediaSource对象的当前状态,刚创建的时候一定是‘closed’。
duration 类型:unrestricted double
MediaSource刚创建的时候,初始化值为NaN。
如何获取?
如果readyState为closed,则返回NaN,这一步可以丢弃
返回该属性当前值
如何设置?
如果设置了负值或者NaN,会抛出TypeError异常,并丢弃剩余步骤
如果readyState不是open,会抛出InvalidStateError异常,并丢弃剩余步骤
sourceBuffers属性中的任何一个SourceBuffer的updating值为true, ,会抛出InvalidStateError异常,并丢弃剩余步骤
运行duration change algorithm算法可以设置新的duration给当前属性
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需要执行:
如果type为空字符串(""),则抛出TypeError异常,并丢弃剩余步骤
如果type为不支持的MIME类型,则抛出 NotSupportedError异常,并丢弃剩余步骤
如果ua不能处理更多的SourceBuffer内容,则抛出QuotaExceededError异常,并丢弃剩余步骤
比如当媒体元素到了HAVE_METADATA状态的时候,ua就不支持播放中更多track的添加了
如果readyState不是open,则抛出InvalidStateError异常,并丢弃剩余步骤
常见一个新的SourceBuffer对象和相关资源
设置新对象的generate timestamps flag为相关类型的[MSE-REGISTRY] entry
如果generate timestamps flag值为true,设置新对象的mode属性为“sequence”,否则设置为“segments”
把新对象添加到sourceBuffers中,并且触发一个addsourcebuffer事件
返回这个新对象
removeSourceBuffer
endOfStream
入参:error(EndOfStreamError),无返回值
setLiveSeekableRange*
更新 HTMLMediaElement Extensions元素的live seekable range变量
clearLiveSeekableRange*
isTypeSupported* static
检测MediaSource对象是否支持创建特定MIME类型的SourceBuffer
2.3 事件只代表浏览器是否支持的能力,不代表addSourceBuffer()方法有足够的资源创建新的SourceBuffer
事件名称 | 描述 |
---|---|
sourceopen | readyState 从close到open 或 从ended到open |
sourceended | readyState 从open到ended |
sourceclose | readyState 从open到closed 或 从open到ended |
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91967.html
摘要:对象表示元素的一个媒体数据源。对象由应用创建然后绑定到元素上。当需要播放的时候,从对象中读取媒体数据。每个对象都由一个实时的可检索的变量来存储归一化后的对象。类型,只读对象的当前状态,刚创建的时候一定是。和方法会更新在特定的情况下。 2. MediaSource Object MediaSource对象表示HTMLMediaElement元素的一个媒体数据源。它会记录源的readySt...
摘要:特性描述了实例允许的二进制流格式。一个对象必须支持以下至少一个设置一个拥有音频和或视频的两个,其中一个单独处理音频轨道,一个单独处理视频轨道一个二进制流数据结构,提供了单个需要的,设置和其他。用于识别二进制流数据属于那个的标识。 摘要 本说明通过允许javascript来生成看到播放的流媒体扩展了HTMLMediaElement[HTML51]对象。允许javascript来生成流促进...
阅读 1178·2021-09-26 09:55
阅读 3080·2019-08-30 15:55
阅读 917·2019-08-30 15:53
阅读 2242·2019-08-30 13:59
阅读 2337·2019-08-29 13:08
阅读 1070·2019-08-29 12:19
阅读 3260·2019-08-26 13:41
阅读 390·2019-08-26 13:24