MediaSource.endOfStream()
Experimental: 这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
MediaSource
接口的 endOfStream()
方法意味着流的结束。
语法
mediaSource.endOfStream(endOfStreamError);
参数
- endOfStreamError 可选
-
一个
DOMString
,表示当流结束之时需要抛出的异常名。可选的值为:network
-
中止播放并且发出发生网络错误的信号。这可用于创建一个与媒体流相关的自定义处理程序。例如,你可能有一个与其他网络请求分开的,单独处理媒体分块请求的函数。当你调用 XMLHttpRequest(以获取媒体分块)而触发
onabort
或onerror
时,你可能需要调用endOfStream('network')
,在 UI 中展示描述性的错误,并且立即重试网络请求或者等到网络恢复(通过某种轮询)。 decode
-
中止播放并且发出发生解码错误的信号。这可用于指示当获取媒体数据时发生了解析错误;可能数据已损坏,或者是使用浏览器不知道如何解码的编解码器进行编码。
返回值
无(undefined
)。
异常
InvalidStateError
DOMException
-
MediaSource.readyState
的状态不是open
,或者有一个或多个在MediaSource.sourceBuffers
中的SourceBuffer
对象被更新(例如它们的SourceBuffer.updating
属性是true
),则抛出该错误。
示例
以下片段基于 Nick Desaulniers 编写的一个简单示例(查看完整的在线演示,或者下载源代码进行进一步研究)。
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);
});
};
规范
Specification |
---|
Media Source Extensions™ # dom-mediasource-endofstream |
浏览器兼容性
BCD tables only load in the browser