AVAudioSession:通过听筒扬声器播放audio

我试图通过听筒扬声器播放audio,它工作正常。 相同的代码在以下情况下不起作用。

  1. 打开相机录制video
  2. 而不是开始录制,取消它
  3. 然后,试图通过听筒无法播放audio。 它正在通过主扬声器播放

这是我的代码,通过听筒播放audio。

-(void)initialAVaudioPlayer { if (player==nil) { NSError *error = nil; AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; [session setActive: YES error:nil]; AVAudioSessionPortDescription *routePort = session.currentRoute.outputs.firstObject; NSString *portType = routePort.portType; if ([portType isEqualToString:@"Receiver"]) { [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; } else { [session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error]; } NSString *path; NSError *err; NSString *name; name = @"referenceaudio"; path = [[NSBundle mainBundle] pathForResource:name ofType:@"wav"]; if ([[NSFileManager defaultManager]fileExistsAtPath:path]) { NSURL *url = [NSURL fileURLWithPath:path]; player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&err]; if (!err) { player.numberOfLoops = -1; } else{ //NSLog(@"%@",[err description]); } } } } 

这里是代码,而用户按取消,

 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { NSLog(@"here"); [self dismissViewControllerAnimated:YES completion:nil]; } 

改变取消button的audio路线解决问题

 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { NSError *error = nil; AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:&error]; [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; [session setActive: YES error:nil]; videoPicker = nil; [self dismissViewControllerAnimated:YES completion:nil]; }