ios airplay avaudiosession

AVAudioSessionCategoryPlayAndRecord con Airplay



(4)

Mi aplicación usa el micrófono y emite audio, por lo que estoy configurando mi sesión de audio en la categoría Play and Record, pero esto parece desactivar Airplay. Si configuro la categoría Play, Airplay funciona bien con mi salida (pero obviamente la entrada no funciona).

Intenté sobreescribir la ruta de salida al hablante, en caso de que fuera necesario para emitir en Airplay, pero no en la alegría.

¿Algunas ideas?


¿Qué dispositivo AirPlay estás tratando de usar? ¿Tiene un micrófono?

De lo contrario, iOS no lo presentará como una opción cuando use la categoría PlayAndRecord, porque ese dispositivo no puede reproducir y grabar. Sin embargo, se mostraría al usar la categoría Jugar.

Además, si el dispositivo que está utilizando es un dispositivo Bluetooth, ¿ha configurado AVAudioSessionCategoryOptionAllowBluetooth en YES?


Desde la Guía de programación de la sesión de audio> Cómo trabajar con categorías> Cómo elegir categorías y modos para AirPlay :

Solo categorías y modos específicos son compatibles con AirPlay. Las siguientes categorías son compatibles con las versiones duplicadas y no duplicadas de Airplay:

  • AVAudioSessionCategorySoloAmbient
  • AVAudioSessionCategoryAmbient
  • AVAudioSessionCategoryPlayback

La categoría AVAudioSessionCategoryPlayAndRecord solo admite Airplay duplicado.


Puedes probar este código

// Set AVAudioSession NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; // Change the default output audio route UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);


Si desea cambiar el destino del audio, debe llamar a AudioSessionSetProperty y pasarle la constante que especifica dónde desea que vaya el audio. Estas constantes son

kAudioSessionOverrideAudioRoute_None, que especifica que desea que el audio se enrute al receptor (el airplay si es hacia allí), o

kAudioSessionOverrideAudioRoute_Speaker, que especifica que el audio debe enrutarse al altavoz en la parte inferior del teléfono.