Javascript 使用媒体源API平滑表示更改
我目前正在使用JavaScript和 流媒体工作正常,但我一直在改变表现形式。在播放过程中更改表示形式最粗暴的方法可能是替换HTML文档中的元素 Hovewer,我想知道是否有一种简单的方法来实现媒体源API的自适应(改变表示)。我已经读到,单个媒体源对象可以处理多个源缓冲区,但在添加第二个视频缓冲区后,会引发异常 我使用的是Chrome 43.0.2357.65mJavascript 使用媒体源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
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。