我有一个可以显示视频的应用,我希望以下行为。
本质上,我希望能够在“混合”和“非混合”之间切换应用程序的音频模式。
这是一些代码,显示了我如何修改
AVAudioSession
以尝试获得此功能。打开混合模式
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryAmbient
withOptions:AVAudioSessionCategoryOptionMixWithOthers
error:nil];
[session setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
关闭混合模式
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback
withOptions:0
error:nil];
[session setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
我遇到的问题是,在事先关闭音频混合功能之后再打开它,并不会通知其他应用程序它们可以重新开始播放音频。我真的非常想要这种行为。那是不可能的吗?
通知其他应用程序可以恢复的唯一方法似乎是将我的应用程序的 Audio Session 设置为“非事件”。不幸的是,在播放视频时执行此操作会导致控制台中打印出警告,提示我应在停止 Audio Session 之前停止播放音频。这也具有基本上破坏AVPlayer的效果,因为它不再播放任何音频。
有谁知道如何解决这些问题?任何解决方案都将受到欢迎,即使是非常复杂的解决方案或使用私有(private)API的解决方案也是如此。
最佳答案
我觉得你不走运。甚至AVAudioSessionCategoryOptionDuckOthers
(听起来像应该适合您的用例)也要求您停用 session 以使其他应用的音量恢复正常,但是如您所见,这会导致错误。
关于ios - AVAudioSession在混合和非混合模式之间切换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33386405/