【发布时间】:2015-10-28 08:44:49
【问题描述】:
我有一个可以显示视频的应用,我想要以下行为。
当视频首次出现在屏幕上并开始播放时,其音频应与可能已经在播放的其他应用程序的音频混合。例如,如果用户正在收听 Spotify,他们应该会听到来自 Spotify 和正在播放的视频的音频。
如果用户点击特定按钮,其他应用的音频应静音,以便仅播放视频中的音频。
如果用户再次点击该按钮,来自其他应用的音频应该会恢复,并且视频的音频应该与来自其他应用的音频再次混合。
基本上,我希望能够在“混合”和“非混合”之间切换应用的音频模式。
这里有一些代码显示了我如何修改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];
我遇到的问题是,在之前关闭音频混合后打开音频混合,并没有通知其他应用他们可以再次恢复播放音频。我真的,真的很想要那种行为。这是不可能的事情吗?
似乎通知其他应用可以恢复的唯一方法是将我的应用的音频会话设置为“非活动”。不幸的是,在播放视频时这样做会导致控制台中打印出一条警告,说我应该在停用音频会话之前停止播放音频。这也有基本破坏 AVPlayer 的效果,因为它不能再播放任何音频了。
有人知道如何解决这些问题吗?任何解决方案都会受到欢迎,即使是非常复杂或使用私有 API 的解决方案。
【问题讨论】:
标签: ios video avfoundation avplayer avaudiosession