【发布时间】:2015-11-09 02:21:36
【问题描述】:
我想在多个客户端上同步播放视频。 一个客户端会给服务器一个指向可以流式传输的视频的 URL,然后单击播放,然后每个客户端都应该在完全相同的时间开始播放视频。并且在播放时必须确保每个客户端仍然保持同步。如果有人突然停止演奏,其他人也必须尽快停止。 (此时停止的客户将落后 1 秒左右。)然后当同一个人再次开始玩时,其他人显然必须等待一秒钟,直到一个客户赶上然后也开始玩。
我的第一次尝试是建立一个 mySQL 数据库,让每个客户不断地向它报告他们当前的视频时间。然后服务器计算数据库中是否有任何客户端落后,如果是,则为每个客户端计算他们必须暂停多长时间才能让它赶上。
但这并没有真正奏效。它在很大程度上取决于您的延迟,我无法让它在延迟小于 300 毫秒的情况下可靠地工作(为此需要非常好的延迟)。
那么我可以做些什么来改进它呢?我应该更改我的设置(javscriptajaxphpmySQL)吗?
如何可靠地计算服务器向客户端发送响应的传输时间?我的意思是,我不能仅仅假设客户端的系统时间与服务器的系统时间相同...... 我能想到的最好的事情是这样的:
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;
});
知道如何改进整个概念吗?
顺便说一句,视频不能在我自己的服务器上。
【问题讨论】:
-
每个客户报告他们播放视频的时间如何?然后服务器可以根据每个客户端播放的差异计算“暂停时间”。
-
研究NTP中的时钟同步算法:en.wikipedia.org/wiki/…
-
@Grasshopper 你不明白。假设服务器计算出您必须暂停 2 秒。现在如果(由于延迟)包含暂停时间的响应需要 0.5 秒才能到达您的计算机,会发生什么?您将有效地暂停 0.5 秒,因为服务器不可能提前减去数据包的传输时间。
标签: javascript php ajax websocket video-streaming