tienen tiene suenan sonido solo porque parlantes mis los juegos graba escucha auriculares altavoz ios audio airplay

ios - suenan - mis juegos no tienen sonido iphone



Detectando la latencia de AirPlay (3)

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.


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 exactamente 2 segundos (hasta el milisegundo) con dispositivos Apple.
  • No hay forma de ajustarlo con API públicas.

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

Algunas explicaciones sobre la implementación de AirPlay:

  • El protocolo comienza con varios comandos RTSP. Durante este rtpTime , la fuente transmite rtpTime , el momento en el 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 usa una implementación personalizada, pero Apple generalmente los rechaza.

Consulte este writeup para obtener más información. También puede leer la documentación del protocolo no oficial .


La respuesta corta es: no, Apple no proporciona una forma de hacer esto. 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 ejemplo "Accesibilidad".

La única forma en que puedo pensar para obtener una buena idea sería usar Bonjour para identificar el host (vea el 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 de Airplay, tendrá que adivinar o preguntar a qué usuario está conectado, o quizás tomar un promedio.
  • Es posible que el dispositivo no responda a un ping en absoluto (Apple TV y Airport Express responden al ping, no están seguros de los dispositivos de terceros).
  • El ping puede no reflejar la latencia real del audio

En lugar de perder demasiado tiempo en esto, debe seguir las pautas 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! :)


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

De acuerdo con el documento para outputLatency :

El uso de un dispositivo habilitado con AirPlay para su contenido de audio puede ocasionar 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: ~ 10ms
  • Bluetooth: ~ 100 ms
  • AirPlay: 2s