2.MediaSource对象MediaSource对象表示HTMLMediaElement元素的媒体数据源。它将记录源的就绪状态和可以添加媒体数据以显示的SourceBuffer对象列表。MediaSource对象由Web应用程序创建并绑定到HTMLMediaElement元素。Web应用程序通过将SourceBuffer对象添加到sourceBuffers属性来将媒体数据添加到源。当需要播放时,HTMLMediaElement从MediaSource对象中读取媒体数据。每个MediaSource对象都有一个实时可检索范围变量来存储规范化的TimeRanges对象。创建MediaSource对象时,此变量被初始化为一个空的TimeRanges对象,由setLiveSeekableRange()和clearLiveSeekableRange()方法维护,然后HTMLMediaElement.seekable属性由HTMLMediaElementExtensions更改。ReadyState状态值说明closed表示source还没有绑定到mediaelement。opensource由media元素打开,在sourceBuffers中有可用的SourceBuffer对象。endedsource也绑定到媒体元素上,但是endOfStream()已经执行了构造函数[Constructor]interfaceMediaSource:EventTarget{readonlyattributeSourceBufferListsourceBuffers;只读属性SourceBufferListactiveSourceBuffers;只读属性ReadyStatereadyState;属性不受限制的双重持续时间;属性事件处理程序onsourceopen;属性事件处理程序onsourceended;属性EventHandleronsourceclose;SourceBufferaddSourceBuffer(DOMString类型);voidremoveSourceBuffer(SourceBuffersourceBuffer);voidendOfStream(可选的EndOfStreamError错误);voidsetLiveSeekableRange(双开始,双结束);voidclearLiveSeekableRange();staticbooleanisTypeSupported(DOMStringtype);};2.1属性值sourceBufferstype:SourceBufferList,只读的与MediaSource相关的SourceBuffer列表,当readyState==”closed”时始终为空,一旦readyState变为”open”,可以通过addSourceBuffer()方法向列表中添加SourceBuffer对象activeSourceBuffers类型:SourceBufferList,只读sourceBuffers中选择的视频轨道、启用的音频轨道和“显示”或“隐藏”文本轨道readyState类型:ReadyState,只读MediaSource对象的当前状态,只需创建时“关闭”。durationtype:unrestricteddoubleMediaSource在第一次创建时用NaN初始化。如何获得?如果readyState关闭,会返回NaN,这一步可以放弃,返回这个属性的当前值。如何设置?如果设置了负值或NaN,将抛出TypeError异常,并丢弃剩余的步骤。如果readyState没有打开,将抛出InvalidStateError异常,并抛出剩余步骤的sourceBuffers属性中SourceBuffer的任何更新值。如果任何一个SourceBuffer的updating值为true,就会抛出InvalidStateError异常,剩下的步骤将被丢弃。运行持续时间更改算法,为当前属性Note设置新的持续时间。如果存在结束时间更高的缓冲帧,持续时间更改算法将调整新的更大的持续时间。appendBuffer()和endOfStream()方法将在某些情况下更新持续时间。onsourceopen类型:EventHandlersourceopen事件处理回调onsourceended类型:EventHandlersourceended事件处理回调onsourceclose类型:EventHandlersourceclose事件处理回调2.2方法addSourceBuffer入参:类型,返回SourceBuffer对象,调用如:sourceBuffer=ms.addSourceBuffer('video/mp4;codecs="avc1.4d401f"');在sourceBuffers属性中添加一个新的SourceBuffer对象,然后ua需要执行:如果type是一个空字符串(''),抛出TypeError异常,并丢弃剩余的步骤如果type是ForunsupportedMIMEtypes,抛出NotSupportedError并丢弃剩余步骤。如果ua无法处理更多的SourceBuffer内容,则抛出QuotaExceededError并丢弃剩余的步骤。比如media元素达到HAVE_METADATA状态,ua就不支持了。在播放过程中添加了更多曲目。如果readyState未打开,则抛出InvalidStateError异常并丢弃剩余步骤。通常创建一个新的SourceBuffer对象和相关资源。如果generatetimestampsflag值为true,则将新对象的generatetimestampsflag设置为[MSE-REGISTRY]条目的相关类型,将新对象的mode属性设置为“sequence”,否则设置为“segments”添加将新对象添加到sourceBuffers,并触发addsourcebuffer事件返回新对象removeSourceBufferendOfStreaminput:error(EndOfStreamError),NoreturnvaluesetLiveSeekableRange*更新HTMLMediaElementExtensions元素的liveseekablerange变量支持创建特定的MIMESourceBuffer的类型只代表浏览器是否支持,并不代表addSourceBuffer()方法有足够的资源新建SourceBuffer2.3事件名称描述sourceopenreadyStatefromclosetoopenorfromendedtoopensourceendedreadyStatefromopentoendedsourceclosereadyStatefromopentoclosed或者fromopentoended2.4算法(待补充)
