我在3台不同的机器上运行3个持续时间相同的视频,并使用websocket服务器同步它们。我可以在机器之间获得非常准确的时间同步,但更改任何视频的currentTime
属性会导致显着且不可预测的延迟。
过去使用WebAudio,我已经能够使用start()
安排播放音频源,但video.play()
没有此功能。而且几乎不可能说“此时播放视频的这一部分”。
这不是HTML5视频的选项吗?是否有一个我应该尝试的开箱即用的解决方案(例如媒体流,画布)。我正在使用Chrome,但我可以轻松使用其他浏览器。
答案 0 :(得分:2)
不幸的是,没有方法可以用这种方式同步视频源。
设置currentTime
的问题在于它是异步操作。设置时间后,无法保证视频会立即播放。浏览器将检查缓存,可能从网络加载并在视频实际播放之前进行解码(当它通过seeked
事件报告时)。
只要我们错过Web Audio API中的 cue 方法(也需要数据驻留在内存中),我们的选项有限。
我们可能会得到一个解决方案,就像使用两个视频元素“双缓冲”时间/位置,当预定时间到期,开始和交换第二个元素(可能会或可能不会)根据系统,浏览器,网络,缓存,服务器响应时间等工作。)。
根据视频的大小和长度,您可以预先加载图片而不是视频。这将允许即时同步,但代价是初始加载时间和内存。
我认为更稳定的解决方案是使用专用解决方案同步服务器端上的流,并将浏览器用作被动客户端。 VideoLAN或OBS可以执行此操作,或者与广播相关的一些商业专用软件/硬件能够处理同步参考信号。
只需2美分。