Как кормить источник видео на основе временного диапазона?
Стандартный HTML5 video
Элемент, кажется, работает с использованием байтовых диапазонов. Проблема в том, что сервер, который я использую для обслуживания видео контента, не поддерживает байтовые диапазоны. Он поддерживает только временные диапазоны (так как он основан на ffmpeg).
Например, я могу сделать запрос (в секундах) такой 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);
});