Подтвердить что ты не робот

Обнаружение задержки AirPlay

Хотя я понимаю, что AirPlay имеет присущую задержку/задержку, мне интересно, есть ли способ для (в настоящее время гипотетического) приложения iPhone определить, что такое латентность. Если да, то насколько точным может быть это значение задержки? Мне более любопытно, может ли приложение "знать" свою собственную задержку AirPlay, а не просто минимизировать ее.

4b9b3361

Ответ 1

Задержка не возникает из-за сетевого дрожания, а скорее определяется исходным устройством (вашим iPhone).

Короче говоря:

  • Он всегда составляет ровно 2 с (до миллисекунды) с устройствами Apple.
  • Невозможно настроить его с помощью общедоступных API.

Задержка звука должна быть очень точной, чтобы можно было синхронизировать несколько выходов.

Некоторые объяснения внедрения AirPlay:

  • Протокол начинается с нескольких команд RTSP. Во время этого рукопожатия источник передает rtpTime, время начала воспроизведения, которое также является вашей задержкой. Типичное значение: 88200 = 2 с х 44100 Гц.
  • Устройства AirPlay могут синхронизировать свои часы с источником с помощью NTP для уменьшения латентности сети.
  • Во время воспроизведения источник периодически отправляет пакет SYNC для настройки задержки звука и следит за тем, чтобы все устройства все еще находились в синхронизации.

Можно изменить задержку, если вы используете пользовательскую реализацию, но Apple обычно отклоняет их.

Для получения дополнительной информации просмотрите запись. Вы также можете прочитать неофициальную протокольную документацию .

Ответ 2

Короткий ответ: нет, Apple не предоставляет способ сделать это. Предполагая, что ваше приложение должно быть одобрено в App Store, вам не повезло. Если вы можете запустить свое приложение на джейлбрейк-устройстве, вы можете искать его для недокументированных API-интерфейсов, которые позволят вам делать больше.

Если вам нужно, чтобы ваше приложение было доступно в Apple App Store, большинство вещей, которые вы можете сделать по сети, изложены в приложении примера "Достижимость".

Единственный способ, с помощью которого я могу думать, - это использовать Bonjour для идентификации хоста (см. пример кода https://developer.apple.com/library/ios/#samplecode/BonjourWeb/Introduction/Intro.html), а затем ping хоста.

Однако:

  • Если есть более 1 станции Airplay, вам нужно угадать или спросить, к чему подключен пользователь, или, может быть, взять среднее значение.
  • Устройство не может отвечать на пинг вообще (Apple TV и Airport Express отвечают на ping, не уверены в сторонних устройствах.)
  • Пинг может не отражать фактическую задержку звука

Вместо того, чтобы тратить слишком много времени на это, вы должны следовать рекомендациям Apple для подготовки своего аудио для AirPlay и обогащения своего приложения для AirPlay: http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/PreparingYourMediaforAirPlay/PreparingYourMediaforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH4-SW1

Надеюсь, это поможет!:)