AVAudioSession开发中遇到的问题

355 阅读1分钟

基本知识:juejin.cn/post/684490…

我们开发中遇到的问题 快捷操作的时候需要播放动效视频,播放视频是无声视频,这个时候其他app(qq音乐)的声音就听不见了.然后就设置

 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];

    [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

设置为混音模式,这样的话播放动效视频不影响qq音乐的声音

但是离开这个页面的时候需要设置为不是混音的状态,但是官方并没有提供这一状态,最后多番尝试,发现

 [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:0 error:nil];

这样是可以的.setCategory:AVAudioSessionCategoryAmbient是混音模式,但是options设置为0后混音不能生效,也不会影响其他app的播放 如果设置为AVAudioSessionCategorySoloAmbient九变成当前app独占音频了,其他app不会播放 设置为AVAudioSessionCategoryPlayback的话,发现还是会混音.

在人耳定制音效模块和快捷操作学习模块,需要app去抢占音频,这个时候我们用到了 

[[AVAudioSession sharedInstance] setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];

category用到了AVAudioSessionCategorySoloAmbient独占,options用到了AVAudioSessionCategoryOptionMixWithOthers.只设置AVAudioSessionCategorySoloAmbient的话会彻底中断其他qq音乐等app的声音,就算setActive设为NO,也恢复不了.最后恢复其他app播放

    [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

目前遇到的问题是:在快捷操作学习中,因为要无缝循环播放,所以用了两个AVPlayer的方式,导致了以上面方法设置后,别的app会中断,最后恢复不了播放的问题