Jor*_*ijk 11 objective-c avfoundation ios avcapturesession avaudiosession
我想使用音频录制视频AVCaptureSession
.为此,我需要AudioSessionCategory AVAudioSessionCategoryPlayAndRecord
,因为我的应用程序还播放带声音的视频.
我希望从默认扬声器中听到音频,我希望它能与其他音频混音.所以我需要选项AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers
.
如果我在播放其他音频时执行以下操作,则其他应用程序的音频中会出现明显的可听故障:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱这个小故障?
当没有麦克风输入AVAudioSessionRouteChangeReasonRouteConfigurationChange
通知AVAudioSessionRouteChangeReasonCategoryChange
麦克风输入时,似乎会出现这种情况.
当应用程序进入后台时(无论是否取消激活音频会话),也会发生配置更改(和故障).当从后台返回而不停用音频会话时,当AVCaptureSession
配置改变时,即当摄像机从前向后切换时,毛刺开始发生.在这种情况下,不触摸音频路由,并且仅在从后台返回而不停用音频会话时发生.路由更改的通知被触发两次.一旦禁用麦克风,一次再启用它.
请注意,通过下载Apple的AVCamManual示例,可以轻松重现此行为.添加以下到viewDidLoad
的AAPLCameraViewController.m
:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
…
session.usesApplicationAudioSession = YES;
session.automaticallyConfiguresApplicationAudioSession = NO;
Run Code Online (Sandbox Code Playgroud)
其他一些奇怪的事情,可能是相关的:
将音频类别设置为AVAudioSessionCategoryAmbient
第一个并激活它:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:0 error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)
然后更改类别:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
Run Code Online (Sandbox Code Playgroud)
尽管有选项标志,其他音频停止播放.没有错误被抛出.
正如@Cbas在评论中指出的那样,Apple工作人员已确认从仅输出路由切换为输入+输出路由时存在故障,并且没有针对该问题的解决方法,可能的解决方法是完全避免从输出切换。AVAudioSessionCategoryPlayAndRecord
即使应用未录制,也始终使用类别仅用于输入输出路径。另外,如果已经将音频会话类别设置为AVAudioSessionCategoryPlayAndRecord,则不要再次设置它,否则会出现故障。
归档时间: |
|
查看次数: |
4881 次 |
最近记录: |