iPhone - синхронизируйте два айфона, чтобы они одновременно запускали задание - PullRequest
2 голосов
/ 14 марта 2012

Мне нужно сделать приложение, которое начнет проигрывать один и тот же медиафайл на двух (или более) айфонах одновременно, проблема в том, что оно должно быть идеальным, без секундных задержек и тому подобное.Возможно ли, что у iPhone есть какая-то универсальная отметка времени, которая идеально (или почти идеально) на каждом устройстве.Или, может быть, у меня есть другие варианты?

Ответы [ 4 ]

1 голос
/ 14 марта 2012

2 правил:

  1. Найдите способ иметь одинаковое время на каждом устройстве
  2. Используйте функцию "startAtTime", используя это общее единое время.Нет функции «startNow».

Предполагается, что айфоны смогут синхронизировать дату и время с помощью удаленного сервера, если это не достаточно точно (кто знает), способ достижения этого (при условии, что ваш iPhone уже может обмениваться данными между ними):

  • Мастер посылает свое время подчиненному 10 (или более) раз.
  • Каждый раз, когда подчиненное устройство сравнивает свое время сполученный и составляет дельту
  • После 10 попыток составьте среднее значение дельт и используйте это значение для соответствующей корректировки времени ведомого
0 голосов
/ 14 марта 2012

Нет внутренних часов, которые бы отличались от системных часов, так что это означает, что у каждого из устройств могут быть совершенно разные настройки времени (на самом деле, весьма вероятно, что они будут иметь разные настройки времени, даже если только на секунду или два).

Использование сетевого / интернет-соединения для синхронизации с центральным сервером времени может быть подходом, который может потребоваться, но для этого потребуется сетевое / интернет-соединение, и вам нужно будет установить часы с учетом задержек соединения к / от сервера времени.

Возможно, вам нужна локальная система синхронизации. Если они находятся в непосредственной близости, один из подходов может состоять в том, чтобы создать специальное соединение Bluetooth между устройствами в вашем приложении, а затем использовать некоторый код синхронизации в вашем приложении, чтобы получить те же внутренние таймеры. Например, у вас может быть первое приложение для запуска, которое будет «контроллером», а затем все другие приложения будут искать этот контроллер и синхронизироваться с ним. Синхронизация может быть просто тем, что контроллер отправляет сообщения с метками времени, которые могут получить другие устройства, и устанавливает соответствующий внутренний счетчик.

Не зная намного больше о требованиях, трудно сказать, как лучше всего к этому подойти, поскольку могут быть ограничения относительно времени между запуском приложения и его звучанием, или если вам нужен сигнал запуска, или если он как раз вовремя х, они должны сделать звук.

0 голосов
/ 14 марта 2012

Один из вариантов, который у вас есть, - получить доступ к времени с общего сервера, а затем запустить таймер на обоих устройствах соответственно (вычисление зависит от времени, полученного от услуги), чтобы у вас было точное время на обоих устройствах, а затем воспроизвести его...

Даже в этом есть одна загвоздка, так как скорость интернета может варьироваться, и на одном из двух устройств может быть небольшая задержка при получении ответа от сервера по сравнению с другим устройством и при просмотре вашегоТребование, что они могут быть не синхронизированы примерно на миллисекунду или около того, что будет видно ..: / Любые другие идеи кто-нибудь ..?

0 голосов
/ 14 марта 2012

Если они находятся в одном и том же часовом поясе и установлены одинаковое время, вы можете запланировать его запуск в определенную точку времени, используя NSTimer

- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...