Javascript 从mediasource sourcebuffer动态附加和删除mpeg短划线段
我正在使用HTML5视频元素编写一个简单的mpeg dash流媒体播放器。 我正在创建Javascript 从mediasource sourcebuffer动态附加和删除mpeg短划线段,javascript,media-source,mpeg-dash,Javascript,Media Source,Mpeg Dash,我正在使用HTML5视频元素编写一个简单的mpeg dash流媒体播放器。 我正在创建MediaSource,并在其中附加SourceBuffer。然后我将破折号片段添加到这个sourcebuffer中,一切都正常工作 现在,我想做的是,我想根据媒体元素的当前时间动态地预取这些片段。 在这样做的过程中,有很多疑问,这些疑问没有得到文件的回答 是否有可能知道sourceBuffer一次可以支持多少数据?如果我有一个非常大的视频,并将所有片段附加到sourcebuffer中,它会容纳所有片段还是会导
MediaSource
,并在其中附加SourceBuffer
。然后我将破折号片段添加到这个sourcebuffer中,一切都正常工作
现在,我想做的是,我想根据媒体元素的当前时间动态地预取这些片段。
在这样做的过程中,有很多疑问,这些疑问没有得到文件的回答
SourceBuffer
中最后一段的显示时间或结束时间SourceBuffer
中删除特定的片段集,并用具有其他分辨率的片段替换它们?(我想这样做是为了支持自适应分辨率切换运行时。)谢谢。sourceBuffer可以支持的数据量取决于MSE实现,因此取决于浏览器供应商。一旦达到最大值,这当然会导致错误 无法直接获取SourceBuffer中的段数,但可以获取实际的缓冲时间。结合分段的持续时间,您可以计算它 我建议您看看开放源码的DASH player项目,比如or,它实现了您想要的所有功能。或者甚至可以使用商业解决方案,如
videoElement.buffered.end(0)
如果表示时间
指的是最后一个缓冲帧的时间,那么除了解析流本身之外,没有其他方法可以做到这一点
质量切换
实际上相当容易,尽管规范没有对此做太多说明。要切换质量,您只需将新质量的init头添加到SourceBuffer
。之后,您可以像往常一样附加新质量的段
我个人认为这是一个学习的好地方。关于第1点:这就是用户代理应该做的,但是在目前,他们似乎做得并不好。其中,我从来没有在Chrome中看到过
quotaExceedeError
,你甚至可以看到throw
异常在中被注释掉。目前,您可能需要实现自己的缓冲区管理。我在Electron 3.0.4(铬衍生物)中遇到了quotaExceedeError
。