Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用媒体源API平滑表示更改_Javascript_Mpeg Dash_Media Source - Fatal编程技术网

Javascript 使用媒体源API平滑表示更改

Javascript 使用媒体源API平滑表示更改,javascript,mpeg-dash,media-source,Javascript,Mpeg Dash,Media Source,我目前正在使用JavaScript和 流媒体工作正常,但我一直在改变表现形式。在播放过程中更改表示形式最粗暴的方法可能是替换HTML文档中的元素 Hovewer,我想知道是否有一种简单的方法来实现媒体源API的自适应(改变表示)。我已经读到,单个媒体源对象可以处理多个源缓冲区,但在添加第二个视频缓冲区后,会引发异常 我使用的是Chrome 43.0.2357.65m var mediaSource=mediaSource(); var url=url.createObjectURL(mediaS

我目前正在使用JavaScript和

流媒体工作正常,但我一直在改变表现形式。在播放过程中更改表示形式最粗暴的方法可能是替换HTML文档中的元素

Hovewer,我想知道是否有一种简单的方法来实现媒体源API的自适应(改变表示)。我已经读到,单个媒体源对象可以处理多个源缓冲区,但在添加第二个视频缓冲区后,会引发异常

我使用的是Chrome 43.0.2357.65m

var mediaSource=mediaSource();
var url=url.createObjectURL(mediaSource);
videoElement.src=url;
mediaSource.addEventListener('sourceopen',函数(){
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.

不幸的是,MSE规范没有太多关于平稳更改表示的内容。学习如何做到这一点的方法是阅读现有dash player的代码并了解它是如何做到的。为了节省大量时间,以下是如何做到这一点:

  • 首先,您只需要一个源缓冲区。不同表示的编解码器是否不同并不重要。您可以创建一个源缓冲区,并在播放器的整个生命周期内使用它。切换表示的次数也不重要

  • 切换表示的方法实际上非常简单。您只需将目标表示的初始化头附加到源缓冲区。就是这样。之后解码器已重新初始化,您可以开始附加属于新表示的段

  • 附加目标表示的片段并享受平滑过渡


  • 就这样。一旦你想好你要做什么就不难了。

    Svetlin Mladenov,关于表示转换:正如我从你的回答中理解的,缓冲区看起来像:INIT_q1,segment_q1,…,INIT_q2,segment_q2,segment_q2,…。这是正确的吗?对视频的不同表示有什么要求吗o或者,如果目标表示具有不同的带宽+不同的分辨率,它是否也能工作?@Silvia,是的,这是正确的。带宽或分辨率没有限制。我认为需要保持一致的首要问题是帧的PTS,对吗?切换视频表示时,我被困了一整天。您指出,每当我切换时,我只需要在初始化头中附加这个参数。谢谢@SvetlinMladenov。