Я хотел бы синхронизировать воспроизведение видео на нескольких клиентах. Один клиент предоставит серверу URL-адрес видео, которое может быть передано по потоку, и нажмите кнопку воспроизведения, и каждый клиент должен начать воспроизведение видео в одно и то же время. И во время игры нужно убедиться, что каждый клиент все еще синхронизирован. Если кто-то внезапно перестает играть, все остальные должны как можно скорее остановиться. (В этот момент клиент, который остановился, будет отставать от 1 секунды или около того). Затем, когда тот же самый человек начинает играть снова, все остальные, очевидно, должны будут ждать секунду, пока один клиент не поймает, а затем тоже начнет играть.
Моя первая попытка состояла в том, чтобы настроить mySQL db и позволить каждому клиенту постоянно сообщать о своем текущем видеоролике. Затем сервер вычисляется, если какой-либо клиент в db отстает, и если да, рассчитан для каждого клиента, как долго им придется приостановить, чтобы догнать его.
Но это не очень хорошо работает. Это сильно зависело от вашей задержки, и я не смог заставить ее надежно работать с задержкой < 300ms (для этого требовалась действительно хорошая латентность).
Так что я могу сделать, чтобы улучшить его? Должен ли я изменить свою настройку (javscript ↔ ajax ↔ php ↔ 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 не может быть на моем собственном сервере.