javascript - 跨机器安排和/或同步 HTML5 视频播放

标签 javascript html5-video

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

过去使用 WebAudio,我可以使用 start() 安排音频源的播放,但是 video.play() 没有这个功能。这使得几乎不可能说“在这个时间点播放视频的这一部分”。

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

最佳答案

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

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

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

我们现在可能会得到一个 hackish 解决方案,比如使用两个视频元素为时间/位置“双缓冲”,当预定时间到期时,开始并交换第二个元素(可能会也可能不会工作取决于系统、浏览器、网络、缓存、服务器响应时间等)。

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

不过,我认为更稳定的解决方案是使用专用解决方案在服务器端 同步流,并将浏览器用作被动客户端。 VideoLANOBS可能会成功,或者一些与广播相关的商业专用软件/硬件能够处理同步引用信号。

只是我的 2 美分。

关于javascript - 跨机器安排和/或同步 HTML5 视频播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577669/

相关文章:

jQuery - 如何在点击时检测视频栏播放按钮而不是视频本身

webview - android webview html5混合应用程序的本地视频文件放置在哪里

javascript - Aurelia JS 依赖项

javascript - 从加载的 KML 向标记添加点击事件

javascript - 如何使用条件运算符

php - 日常风采网站

html - 视频无法在浏览器中播放

video - .mp4 的正确 MIME 类型

angular - 在特定时间启动视频并跟踪视频

javascript - 如何制作一次显示三个图像的 jQuery 或 javascript 幻灯片