Desidero registrare video con audio utilizzando AVCaptureSession
. Per questo ho bisogno di AudioSessionCategory AVAudioSessionCategoryPlayAndRecord
, poiché la mia app riproduce anche i video con audio.AVAudioSession AVAudioSessionCategoryPlayAndRecord glitch
Desidero che l'audio sia udibile dall'altoparlante predefinito e voglio che si mischi con altro audio. Quindi ho bisogno delle opzioni AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers
.
Se faccio la seguente mentre altri la riproduzione dell'audio v'è una chiara anomalia udibile l'audio dal altra applicazione:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
Esiste un modo per sbarazzarsi di questo problema tecnico?
Sembra che si verifichi quando c'è un AVAudioSessionRouteChangeReasonRouteConfigurationChange
come notificato da AVAudioSessionRouteChangeReasonCategoryChange
da nessun ingresso microfonico, all'ingresso mic.
La modifica della configurazione (e glitch) si verifica anche quando l'app passa allo sfondo (con o senza disattivare la sessione audio). Quando si ritorna dallo sfondo senza disattivare la sessione audio, i glitch iniziano a verificarsi quando la configurazione dello AVCaptureSession
viene cambiata, cioè quando la telecamera viene commutata dalla parte anteriore a quella posteriore. In questo caso il routing audio non viene toccato e si verifica solo quando si torna dallo sfondo senza disattivare la sessione audio. La notifica che il percorso cambia viene licenziato due volte. Una volta per disabilitare il microfono, e una volta per abilitarlo di nuovo.
Si noti che questo comportamento è facilmente riproducibile scaricando l'esempio AVCamManual di Apple. Aggiungere quanto segue alla viewDidLoad
di AAPLCameraViewController.m
:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
…
session.usesApplicationAudioSession = YES;
session.automaticallyConfiguresApplicationAudioSession = NO;
Qualche altra cosa strana, che potrebbe essere correlato:
Impostare la categoria audio AVAudioSessionCategoryAmbient
prima e attivarlo:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:0 error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
e poi cambia la categoria:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
altri audio interrompe la riproduzione nonostante il flag di opzioni. Non vengono lanciati errori
Ho tutti gli stessi problemi. Alla lettera. Qualche novità al riguardo? – ancajic
Per l'ultimo esempio in cui l'audio interrompe la riproduzione nonostante il flag delle opzioni. Audio continua a giocare se si disattiva sessione audio ('[[AVAudioSession sharedInstance] setactive: NO withOptions: errore AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation: nil];') prima di impostare la categoria '[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions: AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error: nil]; '. E riattivare dopo ('[[AVAudioSession sharedInstance] setActive: YES errore: nil];') – ancajic
Avendo anche gli stessi problemi, ho provato a utilizzare 'PlayAndRecord' tutto il tempo: http://stackoverflow.com/questions/35496563/avcapturesession-addinput che causano glitch-in-background-audio. Ho anche provato a lavorare cambiando la categoria da "Ambient" quando inizia la registrazione: http://stackoverflow.com/questions/35615707/avaudiosession-setcategory-not-working. Per favore fatemi sapere se avete trovato una soluzione per entrambi i metodi – Cbas