我目前正在使用JavaScript和MediaSource API
开发DASH播放器流媒体工作正常,但我不知道改变表示。在播放过程中改变表示的最强制方式可能是替换HTML文档中的< video> 元素。
Hovewer,我想知道是否有一种简单的方法可以使用Media Source API实现自适应(更改表示)。我已经读过单个Media Source对象可以处理许多源缓冲区,但是在添加第二个视频缓冲区之后会引发异常。
我使用的是Chrome 43.0.2357.65m
var mediaSource = MediaSource();
var url = URL.createObjectURL(mediaSource);
videoElement.src = url;
mediaSource.addEventListener('sourceopen', function () {
var buffer1 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
var buffer2 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
}
例外:
Uncaught QuotaExceededError: Failed to execute 'addSourceBuffer' on 'MediaSource': This MediaSource has reached the limit of SourceBuffer objects it can handle. No additional SourceBuffer objects may be added.
答案 0 :(得分:5)
不幸的是,MSE规范并没有说明顺利改变表示。学习如何操作的方法是阅读现有仪表板播放器的代码,看看它是如何做到的。为了节省大量时间,以下是如何操作:
首先,您只需要一个源缓冲区。不同表示的编解码器是不同的并不重要。您可以创建一个源缓冲区并将其用于播放器的整个生命周期。切换表示的次数并不重要。
切换表示的方法实际上非常简单。您只需将目标表示的初始化头附加到源缓冲区。就是这样。之后,解码器已重新初始化,您可以开始附加属于新表示的段。
附加目标表示的片段并享受平滑过渡。