安排 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 美分。
我在 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 美分。