Я сделал медиаплеер, который воспроизводит практически все, что ему запланировано, через текстовый файл. Плеер также может воспроизводить один и тот же клип на нескольких компьютерах (ПК). Проблема в синхронизации. Одно и то же видео начинает воспроизводиться на каждой из машин, но оно выходит примерно на 400 мс, что выглядит дерьмом, а если есть звук, то еще хуже.
На данный момент я делаю:
Одна машина настроена как ведущая, а все остальные машины настроены как подчиненные. Мастер решает, какой предмет будет сыгран. Он ожидает сообщения от каждого из ведомых, после того как все ведомые подключены (или по истечении времени ожидания), он передает идентификатор элемента файла, который необходимо воспроизвести. Затем все машины начнут воспроизводить этот файл.
Что я тоже пробовал:
Я подумал, что время загрузки файла может быть основным фактором, влияющим на несоответствие синхронизации, поэтому я изменил код, чтобы сделать следующее.
Мастер по-прежнему решает, какой файл воспроизводить. Он ожидает сообщения о подключении от каждого ведомого устройства (или тайм-аута) и передает идентификатор элемента файла для воспроизведения. Все машины начинают воспроизводить этот файл, но немедленно приостанавливают его. Затем мастер снова ожидает готового сообщения от каждого из подчиненных. Как только все подчиненные устройства ответили, мастер посылает сообщение воспроизведения всем подчиненным. Затем все машины продолжают файл.
Это, к сожалению, не улучшило проблему. Теперь я почти уверен, что рассогласование синхронизации связано с задержкой в сети. Как я могу компенсировать это? Или, может быть, определить задержку для каждого раба?
Все сетевые коммуникации выполняются с помощью winsock.
Любые мысли или идеи очень ценятся.