我有一个视频文件,我想在给定时间开始从NodeJS开始广播,最好是通过Express。也就是说,如果视频在时间戳t0开始可用,则如果客户端在时间t0 + 60到达视频端点,则视频回放将在60秒后开始。
我的关键要求是,当客户端在给定时间进行连接时,该视频不可用,比到目前为止所看到的更多,因此,在t0 + 60时连接的客户端将无法在一分钟后观看标记(加上一些错误阈值),然后,每秒钟〜秒,就会增加一秒钟的视频可用性,以模拟在所有客户端之间同步的实时体验,而不管每个客户端何时加载流。
到目前为止,我已经尝试过将视频转换为Apple的HLS协议的运气(因为该名称听起来很有希望),并且我能够使用Node的hls-server
库托管m3u8文件,该调用非常简单:
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的模糊方法,但是据我了解,由于其压缩,很难知道有多少字节的视频数据对应于持续时间长的镜头。< / p>
还有其他一些教程,它们具有来自输入源(例如网络摄像头)的直接管道,因此需要活跃性,但是对于我已经存在视频文件的相对简单的用例,我很满意能够只要强制所有客户端大致同步,就可以保持有限的精度,例如±10秒。
非常感谢您,我感谢您提出的建议。