安排 and/or 同步 HTML5 跨机器的视频播放

Scheduling and/or Synchronizing HTML5 Video Playback Across Machines

我在 3 台不同的机器上 运行 3 个具有相同持续时间的不同视频,并使用 websocket 服务器同步它们。我可以在机器之间获得非常准确的时间同步,但是更改任何视频的 currentTime 属性会导致显着且不可预测的延迟。

过去使用 WebAudio,我可以使用 start() 安排音频源的播放,但 video.play() 没有此功能。这几乎不可能说 "play this part of the video at this point in time".

这不是 HTML5 视频的选项吗?是否有我应该尝试的开箱即用的解决方案(例如媒体流,canvas)。我正在使用 Chrome,但我可以轻松地使用其他浏览器。

遗憾的是,目前还没有视频以这种方式同步源的方法。

设置currentTime的问题在于它是一个异步操作。设置时间后,无法保证视频会从该时间立即播放。浏览器将检查缓存,可能从网络加载并在视频实际播放之前解码(当它通过 seeked 事件报告时)。

只要我们错过了一种形式的 cue 方法,例如 Web Audio API(它也需要数据驻留在内存中),我们就会受到限制选项。

我们现在可能会得到一个 hackish 解决方案,比如使用两个视频元素 "double buffer" 来代替 time/positions,当预定时间到期时,开始并交换第二个元素(根据系统、浏览器、网络、缓存、服务器响应时间等,它可能会或可能不会工作。

根据视频的大小和长度,您可以预加载图像帧而不是视频。这将允许即时同步,但以初始加载时间和内存为代价。

我认为更稳定的解决方案是使用专用解决方案在服务器端同步流,并将浏览器用作被动客户端。 VideoLAN or OBS 可能会成功,或者某些与广播相关的专业 software/hardware 能够处理同步参考信号。

只是我的 2 美分。