Ios A音频会话A音频会话类别播放和记录故障
我想使用Ios A音频会话A音频会话类别播放和记录故障,ios,objective-c,avfoundation,avcapturesession,avaudiosession,Ios,Objective C,Avfoundation,Avcapturesession,Avaudiosession,我想使用AVCaptureSession录制带音频的视频。为此,我需要AudioSessionCategoryAvaudioSessionCategory播放和录制,因为我的应用程序也会播放带有声音的视频 我希望音频可以从默认扬声器听到,并希望它与其他音频混合。因此,我需要选项AVAudioSessionCategoryOptionDefaultToSpeaker | AvaudioSessionCategoryOptionMix with Others 如果在播放其他音频时执行以下操作,则来自
AVCaptureSession
录制带音频的视频。为此,我需要AudioSessionCategoryAvaudioSessionCategory播放和录制,因为我的应用程序也会播放带有声音的视频
我希望音频可以从默认扬声器听到,并希望它与其他音频混合。因此,我需要选项AVAudioSessionCategoryOptionDefaultToSpeaker | AvaudioSessionCategoryOptionMix with Others
如果在播放其他音频时执行以下操作,则来自其他应用的音频中会出现明显的音频故障:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
有没有办法解决这个问题
当AVAudioSessionRouteChangeReasonRouteConfigurationChange从无麦克风输入更改为麦克风输入时,AVAudioSessionRouteChangeReasonCategoryChange
通知AvaudioSessionRouteChangeReasonRouteConfiguration更改时,似乎会发生这种情况
当应用程序进入后台时(无论是否禁用音频会话),配置更改(和故障)也会发生。当从后台返回而未停用音频会话时,当AVCaptureSession
配置发生更改时,即当摄像头从前到后切换时,故障开始出现。在这种情况下,音频路由不会被触动,它仅在从后台返回时发生,而不会停用音频会话。路由更改的通知将触发两次。一次禁用麦克风,一次再次启用
请注意,通过下载Apple的AVCamManual示例,这种行为很容易重现。将以下内容添加到aaplcameravewcontroller.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];
其他音频停止播放,尽管有选项标志。没有抛出错误。正如@Cbas在评论中指出的,苹果公司的一名员工已经确认,当从仅输出切换到输入+输出路径时,存在故障,并且没有解决该问题的方法,一种可能的解决方法是,即使应用程序未录制,也要始终使用AVAudioSessionCategoryPlayAndRecord
类别,以完全避免从仅输出切换到输入-输出路由。
此外,如果音频会话类别已设置为AVAudioSessionCategoryPlayAndRecord,则不要再次设置音频会话类别,否则会出现故障
[self.captureSession startRunning];
[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[[AVAudioSession sharedInstance] setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
当capureSession开始播放时,取消激活当前音频会话并在后台恢复其他中断的音乐应用程序,请使用此选项AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
使用当前音频会话重置类别AvaudioSessionCategoryPlay和Record,然后重新设置Avctive
我希望它对你有用。我也有同样的问题。不折不扣地。这方面有什么消息吗?最后一个例子是,尽管有选项标志,音频仍停止播放。如果在设置类别之前停用音频会话([[AVAudioSession sharedInstance]设置活动:否,带选项:AvaudioSessionSetActiveOption NotifyOthersOn停用错误:nil];
),音频将继续播放setCategory:AvaudioSessionCategoryPlay和RecordwithOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker错误:nil]代码>。并且在([[AVAudioSession sharedInstance]setActive:YES error:nil];
)出现同样问题后重新激活,一直尝试使用播放和录制。还尝试在录制开始时将类别从环境更改为。请告诉我您是否找到了这两种方法的解决方案。苹果表示,Play和Record的音频故障没有解决方法:。所以我想唯一的选择是改变类别,但这也不行?警告:使用AudioSessionCategoryPlay和Record将禁用MPNowPlayingFoCenter(在锁定屏幕上)