NodeJS Симуляция потокового видео - PullRequest
2 голосов
/ 03 мая 2019

У меня есть видеофайл, который я хотел бы начать вещать с NodeJS, предпочтительно через Express, в указанное время. То есть, если видео станет доступным с отметкой времени t0, то, если клиент достигнет конечной точки видео в момент времени t0 + 60, воспроизведение видео начнется через 60 секунд.

Мое ключевое требование заключается в том, чтобы при подключении клиента в определенный момент времени доступное видео было не больше, чем то, что можно было увидеть до сих пор, поэтому клиент, подключающийся в момент времени t0 + 60, не сможет смотреть за минуту. Отметьте (плюс некоторый порог ошибки) изначально, и каждую ~ секунду будет добавляться еще одна секунда доступности видео, имитирующая живое взаимодействие, синхронизированное между всеми клиентами независимо от того, когда каждый загружает поток.

До сих пор я попытал счастья, конвертируя видео в протокол Apple HLS (поскольку название звучит многообещающе), и мне удалось разместить файлы m3u8 с помощью библиотеки hls-server Node, где вызов очень прост:

import HLSServer = require('hls-server');
import http = require('http');

const source = __dirname + '/resources';

const server = http.createServer();
const hls = new HLSServer(server, {
    path: '/streams',     // Base URI to output HLS streams
    dir: source  // Directory that input files are stored
});
server.listen(8000);

Тем не менее, он отправляет все видео в браузер по запросу и, по-видимому, не предлагает опцию принудительного запуска в данном кадре. (Я предполагаю, что форсирование начальной позиции может быть сделано вне полосы, просто отправив текущее время клиенту, а затем заставив клиента делать все необходимое с HTML и Javascript, чтобы перейти на последнюю позицию).

В Интернете есть несколько туманных подходов, использующих MP4, но из того, что я понимаю, из-за его сжатия трудно понять, сколько байтов видеоданных соответствует длительности отснятого материала, поскольку оно может широко варьироваться.

Есть также некоторые другие учебные пособия, в которых есть прямой канал от источника входного сигнала, такого как веб-камера, что требует живучести, но для моего сравнительно простого варианта использования, где видеофайл уже присутствует, я удовлетворен возможностью поддерживать ограниченную точность, например ± 10 секунд, до тех пор, пока все клиенты вынуждены приблизительно синхронизироваться.

Большое спасибо заранее, и я ценю любые указатели.

...