我想在多个客户端上同步播放视频。 一个客户端将为服务器提供一个视频的URL,该视频可以流式传输并点击播放,然后每个客户端都应该在同一时间开始播放视频。在播放时必须确保每个客户端仍然保持同步。如果有人突然停止播放,其他人必须尽快停止。 (此时停止的客户端将落后1秒左右。)然后当同一个人再次开始播放时,其他人显然必须等待一秒钟,直到一个客户端赶上并开始播放。
我的第一个尝试是设置mySQL数据库,让每个客户端不断向其报告当前的视频时间。然后,服务器计算数据库中的任何客户端是否落后,如果是,则为每个客户端计算他们必须暂停多长时间才能让它赶上来。
但这并没有真正奏效。它强烈依赖于你的延迟,我无法在延迟<300ms的情况下可靠地工作(需要非常好的延迟)。
那么我该怎么做才能改善呢?我应该更改我的设置(javscript&lt; - &gt; ajax&lt; - &gt; php&lt; - &gt; mySQL)?
如何可靠地计算服务器发送客户端的响应时间?我的意思是,我不能只假设客户端的系统时间与服务器的系统时间相同...... 我能想到的最好的事情就是这样:
var start = new Date().getTime()
$.post( "sync.php", "")
.done(function(data) {
var end = new Date().getTime()/1000;
var clientServerClientTravelTime = (end-start);
var estimatedServerClientTravelTime = clientServerClientTravelTime/2;
});
知道如何改进这整个概念吗? Btw视频不能在我自己的服务器上。
答案 0 :(得分:4)
最准确的方法可能是使用套接字:通过这种方式,您可以向其他系统发出信号,并且不需要等待ajax轮询。您将无法准确地补偿延迟,但可以通过使用一些测试消息测量往返来平衡事情。
所以计划是:
我使用的东西非常类似于将3台汽车同步18台投影机用于AV显示系统。 (https://vimeo.com/97191170)。尽管Xorifelse在他的回答中发表了评论,但PHP完全能够接受,处理和处理来自控制器(浏览器中基于jquery的应用程序,通过套接字连接)每秒多达100个套接字命令,过滤掉重复项,将它们全部记录到mySQL中按需轮询的第二个过程(大约每秒10次,由Flash(Adobe Air)脚本的套接字请求触发,然后还将灯光指示传递给车下照明(也通过插座)或其他车辆(也通过事实上,PHP / MySQL解决方案比试图直接将套接字指令直接引入Flash更加强大。这很可能。项目的技术细节在这里:http://labs.soapcreative.com/cars-that-feel-vivid-sydney/
答案 1 :(得分:0)
您是否尝试过使用WebRTC,它用于点对点连接,也用于流式传输。使用WebRTC,您可以将多个流从一个客户端传输到其他客户端,我已经使用它将视频流式传输给其他人,并且每个连接的人都在获取视频,但我不是在流式传输服务器,我只是控制视频,暂停,声音,......
您可以尝试使用它,但在您的情况下,每个客户端都可以控制流。就个人而言,我没有尝试过类似的东西,但这样你就没有延迟,暂停等问题。