我想使用AVCaptureSession
录制带有音频的视频。为此,我需要AudioSessionCategory AVAudioSessionCategoryPlayAndRecord
,因为我的应用程序还会播放带有声音的视频。
我希望从默认扬声器听到音频,并且希望它与其他音频混合在一起。因此,我需要选项AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers
。
如果我在其他音频正在播放时执行以下操作,其他应用程序中的音频会出现明显的听觉故障:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
有没有办法解决这个故障?
当通知由AVAudioSessionRouteChangeReasonCategoryChange
从无麦克风输入切换到麦克风输入时,似乎会发生AVAudioSessionRouteChangeReasonRouteConfigurationChange
。
配置更改(和故障)也会在应用程序进入后台(带或不带取消音频会话)时发生。当从后台返回而没有取消音频会话时,当AVCaptureSession
配置更改即相机从前置切换到后置时,故障开始发生。在此情况下,不会触及音频路由,并且仅在从后台返回而没有取消音频会话时才会发生。更改路线的通知将被触发两次。一次是禁用麦克风,另一次是重新启用它。
请注意,通过下载Apple的AVCamManual示例可以轻松地复现此行为。将以下内容添加到AAPLCameraViewController.m
的viewDidLoad
中:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
…
session.usesApplicationAudioSession = YES;
session.automaticallyConfiguresApplicationAudioSession = NO;
可能与此相关的另一件奇怪的事情:
首先将音频类别设置为AVAudioSessionCategoryAmbient
并激活它:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:0 error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
然后更改类别:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
尽管选项标志位被设置,其他音频仍停止播放。不会抛出任何错误。
[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
),则音频将继续播放。 并在之后重新激活([[AVAudioSession sharedInstance] setActive:YES error:nil];
),同时设置类别[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
。 - AndroCPlayAndRecord
:https://dev59.com/EZTfa4cB1Zd3GeqPNz7f。同时也尝试通过在录音开始时更改类别来解决问题:https://dev59.com/GpTfa4cB1Zd3GeqPQ3EI。如果您已经找到了任何一种方法的解决方案,请告诉我。 - Cbas