son*_*nam 3 javascript media-source mpeg-dash
我正在使用 HTML5 视频元素编写一个简单的 mpeg-dash 流媒体播放器。我正在创建MediaSource
并将其附加SourceBuffer
到它。然后我将破折号片段附加到这个源缓冲区中,一切正常。
现在,我想要做的是,我想根据媒体元素的当前时间动态预取这些片段。这样做时有很多疑问,MediaSource文档没有回答这些疑问。
是否可以知道 sourceBuffer 一次可以支持多少数据?如果我有一个非常大的视频并将所有片段附加到源缓冲区中,它会容纳所有片段或导致错误还是会降低浏览器的速度?
如何计算源缓冲区中的片段数?
如何计算最后一个片段的呈现时间或结束时间SourceBuffer
?
我们如何仅从中删除特定的片段集SourceBuffer
并将其替换为具有其他分辨率的片段?(我想这样做是为了支持自适应分辨率切换运行时。)
谢谢。
最大缓冲数据量是一个实现细节,不会以任何方式暴露给开发人员 AFAIK。根据规范,当添加新数据时,浏览器将执行编码帧驱逐算法,该算法删除浏览器认为不必要的任何缓冲数据。浏览器倾向于删除已经播放过的流的任何部分,并且不会删除相对于当前时间在未来的流部分。这意味着如果流非常大并且dash player 下载它非常快,比MSE 可以播放它快,那么将有很多流无法被编码帧驱逐算法删除,这可能会导致附加缓冲区抛出QuotaExceededError 的方法。当然,一个好的破折号播放器应该监控缓冲的数量,而不是下载过多的数据。
纯文本:您无需担心,除非您的播放器在不考虑当前缓冲量的情况下尽快下载所有流。
MSE API 处理数据流(音频或视频)。它不知道段。从理论上讲,您可以获得缓冲的时间范围并使用 MPD 中提供的计时数据映射到一对段。但恕我直言,这是脆弱的。更好的是跟踪下载和馈送的片段。
查看缓冲属性。获取最后附加段的结束时间(以秒为单位)的最简单方法很简单:videoElement.buffered.end(0)
如果presentation time
您的意思是Presentation TimeStamp
最后一个缓冲帧的 ,那么除了解析流本身之外没有办法做到这一点。
要删除缓冲数据,您可以使用remove方法。
Quality switching
虽然规范没有说太多,但实际上很容易。要切换质量,您唯一要做的就是将新质量的 init 标头附加到SourceBuffer
. 之后,您可以像往常一样附加新质量的段。
我个人认为youtube dash mse 测试播放器是一个学习的好地方。
归档时间: |
|
查看次数: |
2815 次 |
最近记录: |