标准HTML5 video
元素似乎可以使用byte ranges。问题是我用来提供视频内容的服务器不支持字节范围。它只支持时间范围(因为它基于ffmpeg)。
E.g。我可以进行查询(以秒为单位)http://example.com/myvideo.mkv?range=3.40-49
,并将视频内容从第3秒返回到40秒到第49秒。
问题:是否可以使用时间范围提供媒体源缓冲区?我如何知道媒体缓冲区需要什么时间范围以及何时需要(例如,如果客户端寻求使用进度条)?
我已经检查了几个像dash.js这样的玩家,但他们都假设服务器支持字节范围,所以我不能使用它们。
到目前为止我尝试过的事情: 我正在考虑使用timestampOffset为数组缓冲区提供正确的字节(基于时间范围),但我不知道客户端何时寻找以及在什么位置(以秒为单位)。另外我认为我应该填补错过的范围,但timestampOffset仅提供偏移/起点。我如何知道范围,以便我可以避免覆盖可能已缓存/缓冲的内容?
我觉得有很多边缘情况,所以我想知道是否已经有这样的播放器支持时间范围而不是字节范围。我基本上只想提供一个function (videoSourceBuffer, startTime, stopTime)
,其中videoSourceBuffer
填充的视频内容从startTime
开始并停在stopTime
。
var mediaSource = new MediaSource();
mediaSource.addEventListener('sourceopen', function() {
var sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"');
sourceBuffer.timestampOffset = 0;
sourceBuffer.appendBuffer(videoBinary);
});