Reproducción de files de audio mientras se graba video en iOS

Quiero reproducir files de audio mientras grabo con la camera. Utilicé AVAudioPlayer para reproducir audio y AVCamCaptureManager para grabar.

Pero cuando el audio comienza a reproducirse, la pantalla de vista previa se está congelando. ¿Que debería hacer?

Gracias por tu ayuda. Aquí está el código. (Estoy trabajando en el ejemplo de AVCam.)

Esta es una vista previa de la parte.

if ([self captureManager] == nil) { AVCamCaptureManager *manager = [[AVCamCaptureManager alloc] init]; [self setCaptureManager:manager]; [[self captureManager] setDelegate:self]; if ([[self captureManager] setupSession]) { AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[[self captureManager] session]]; UIView *view = [self videoPreviewView]; CALayer *viewLayer = [view layer]; [viewLayer setMasksToBounds:YES]; CGRect bounds = CGRectMake(0, 0, 480, 320); [newCaptureVideoPreviewLayer setFrame:bounds]; if ([newCaptureVideoPreviewLayer isOrientationSupported]) { [newCaptureVideoPreviewLayer setOrientation:[DeviceProperties setPreviewOrientation]]; } [newCaptureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; [viewLayer insertSublayer:newCaptureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]]; [self setCaptureVideoPreviewLayer:newCaptureVideoPreviewLayer]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [[[self captureManager] session] startRunning]; }); [self updateButtonStates]; } 

Y esta es la parte de reproducción de audio.

 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@", sound] ofType:@"wav"]]; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [audioPlayer play]; 

Si uso AudioServicesPlaySystemSound normal sin congelar, pero esta vez solo funciona en viewDidLoad.

 CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileRef; soundFileRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) CFBridgingRetain(@"sound"), CFSTR ("wav"), NULL); UInt32 soundID; AudioServicesCreateSystemSoundID(soundFileRef, &soundID); AudioServicesPlaySystemSound(soundID); 

Mi problema no era para el video, sino que era para reproducir un sonido mientras estaba en una llamada (aplicación de tipo voip) y la respuesta a esta pregunta funcionó para mí:

Usando vibrate y AVCaptureSession al mismo time

La esperanza de establecer la categoría AVAudioSession en AVAudioSessionCategoryPlayAndRecord resolverá el problema. Y también establezca sus opciones de categoría en AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionMixWithOthers . Por favor verifique el set de código a continuación.

 @property (strong, nonatomic) AVAudioPlayer *audioPlayer; NSURL *soundUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"VoicemailSound" ofType:@"mp3"]]; //Download and add a system sound to your project and mention its name and type here self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil]; [[AVAudioSession shanetworkingInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionMixWithOthers error: nil]; [self.audioPlayer prepareToPlay]; [self.audioPlayer play];