Cómo conseguir que SpeechKit y AVCaptureDevice funcionen entre sí.

Estoy usando SpeechKit de Nuance para transcribir text del video mientras lo grabo. Sin embargo, cuando SpeechKit está activo, AVAudioSession genera el siguiente error:

AVAudioSession.mm:646: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session. 

Deshabilitar SpeechKit me permite grabar y previsualizar el video. Al habilitarlo, se genera el text transcrito, pero no se graba el video.

He puesto un ejemplo de proyecto en línea en:

https://github.com/jeffreality/iOSVideoTranscriber

Mi objective es save el video con audio, además de tener una transcripción.

Puede mover la siguiente línea para verDidLoad:

 #if ENABLE_TRANSCRIPTION [SpeechKit setupWithID:@"Your ID" host:@"dfo.nmdp.nuancemobility.net" port:443 useSSL:NO delegate:nil]; #endif 

Esto garantiza que ya se haya configurado speechKit cuando cree su propia session de captura en viewDidAppear.

El método de delegado de SpeechKit recognizerDidFinishRecording CallDidFinishRecording cuando el reconocedor deja de grabar audio. Se llama automáticamente cuando se detecta un silencio, o se llama manualmente cuando haces [voiceSearch stopRecording] . Cuando esto sucede, su propia grabación no ha finalizado, necesita time para save el file de audio en el disco, y el post de error indica que todas las I / O deberían detenerse antes de desactivar una session de audio. Puede ver un logging de la release audio session 1 sdk release audio session 1 , que creo que está desactivando una session y la libera. Entonces, creo que debería agregar esto en el método anterior.

 [[self.session.outputs[1] connectionWithMediaType:AVMediaTypeAudio] setEnabled:NO]; 

La salida es AVCaptureMovieFileOutput que configuró anteriormente, y la connection es una connection de audio, haciendo esto parece hacer que el error desaparezca.