2012-04-03 19 views
21

Si bien me doy cuenta de que AirPlay tiene retardo/latencia inherente, me pregunto si hay una forma de que una aplicación de iPhone (actualmente hipotética) detecte qué es esa latencia. Si es así, ¿qué tan preciso puede ser ese valor de latencia? Tengo más curiosidad por saber si una aplicación puede "conocer" su propia latencia de AirPlay, en lugar de simplemente minimizarla.Detectando la latencia de AirPlay

+3

¿Enviar un blip y luego escuchar el sonido que regresa por el micrófono? – trapper

+0

Estoy buscando la latencia pre-altavoz. El tiempo que tarda la señal en viajar a través de la red. Esperar el parlante y la transmisión acústica agregará una latencia adicional en la que no estoy necesariamente interesado. ¡Gracias! –

Respuesta

4

La respuesta corta es: no, Apple no proporciona una forma de hacerlo. Suponiendo que necesita que su aplicación sea aprobada en la App Store, no tiene suerte. Si puede ejecutar su aplicación en un dispositivo con jailbreak, puede buscar API indocumentadas que le permitirán hacer más.

Si necesita que su aplicación esté disponible en la App Store de Apple, la mayoría de las cosas que puede hacer en red se describen en la aplicación de muestra "Accesibilidad".

La única forma en que puedo pensar para obtener una buena idea sería usar Bonjour para identificar el host (vea código de ejemplo aquí https://developer.apple.com/library/ios/#samplecode/BonjourWeb/Introduction/Intro.html) y luego hacer ping al host.

Sin embargo:

  • Si hay más de 1 estación Airplay tendrá que adivinar o pedir a los que el usuario está conectado a, o tal vez tomar un promedio.
  • El dispositivo no puede responder a un ping en absoluto (Apple TV y Airport Express Ambos responden a un ping, no está seguro acerca de los dispositivos de 3 ª parte.)
  • el ping puede no reflejar la latencia real del audio

en lugar de gastar demasiado tiempo en esto, usted debe seguir las directrices de Apple para preparar su audio para AirPlay y enriquecer su aplicación para AirPlay: http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/PreparingYourMediaforAirPlay/PreparingYourMediaforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH4-SW1

Espero que esto ayude! :)

34

La latencia no proviene de la fluctuación de fase de la red, sino que se decide por el dispositivo fuente (su iPhone).

Larga historia corta:

  • Siempre es precisamente 2s (abajo a la milésima de segundo) con los dispositivos de Apple.
  • No hay forma de modificarlo con API públicas.

La latencia de audio debe ser muy precisa para que varias salidas puedan reproducirse de forma sincronizada.

Algunas explicaciones acerca de la implementación de AirPlay:

  • El protocolo comienza con varios comandos RTSP. Durante este intercambio, la fuente transmite rtpTime, el momento en que comienza la reproducción, que también es su latencia. El valor típico es 88200 = 2s x 44100 Hz.
  • Los dispositivos AirPlay pueden sincronizar su reloj con la fuente con NTP para mitigar la latencia de la red.
  • Durante la reproducción, la fuente envía periódicamente un paquete SYNC para ajustar la latencia de audio y asegurarse de que todos los dispositivos estén sincronizados.

Es posible cambiar la latencia si utiliza una implementación personalizada, pero Apple generalmente los rechaza.

Compruebe esto writeup para más información. También puede leer el unofficial protocol documentation.

+0

Gracias por los enlaces Laurent. He estado luchando con este problema de latencia y tu comentario de 2 segundos ordena mucho. Parece que AVPlayer over Airplay no tiene esta latencia, pero tiene otras limitaciones. – amergin

+0

¡Fantásticas referencias! Borra parte del misterio innecesario en torno a una función que podría ser mucho más impresionante con más control. –

0

Puede consultar la latencia de audio hardware actual de iOS por -[AVAudioSession outputLatency],

De acuerdo con el documento para outputLatency:

El uso de un dispositivo compatible con AirPlay para su contenido de audio puede resultar en un retraso de 2 segundos. Compruebe esta demora en el contenido del juego.

Y según mi experiencia, este valor cambia cuando se cambia el dispositivo de salida, por ejemplo:

  • altavoz: ~ 10 ms
  • Bluetooth: ~ 100 + ms
  • AirPlay: 2s