Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios A音频会话A音频会话类别播放和记录故障_Ios_Objective C_Avfoundation_Avcapturesession_Avaudiosession - Fatal编程技术网

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
录制带音频的视频。为此,我需要AudioSessionCategory
AvaudioSessionCategory播放和录制,因为我的应用程序也会播放带有声音的视频

我希望音频可以从默认扬声器听到,并希望它与其他音频混合。因此,我需要选项
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(在锁定屏幕上)