在iOS上录制音频而不停止播放音乐

10

使用AVAudioSession录制音频时,来自音乐应用或其他应用的音频播放会停止。在音频会话文档中描述了这一点:

AVAudioSessionCategoryRecord

用于录制音频;此类别会静音播放音频。

是否有方法可以更改此行为并执行以下操作之一?

1)继续播放其他应用程序的音频并允许手机记录正在播放的音频。

2)在简短的录制完成后恢复其他应用程序的音频。当音频中断开始或结束时,应用程序可以响应通知。其他应用程序接收这些通知必须执行特定的操作吗?

3个回答

6

经过24小时的努力搜索和拼凑,这其实非常简单:

let session = AVAudioSession.sharedInstance()
session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers, .allowBluetoothA2DP])

对于仍在寻找如何完成此操作的任何人,这就是全部内容。


0
你可以使用 Obj-C。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];

或者

Swift

let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord,
                                         with: AVAudioSessionCategoryOptions.mixWithOthers)
        } catch let error as NSError {
            print("audioSession error: \(error.localizedDescription)")
        }

-2

1) 对于AVAudioSession来说是不可能的。你所能做的就是检查[[AVAudioSession sharedInstance] isOtherAudioPlaying]并询问用户是否想停止音乐流。

2) 当iPod状态改变时,应用程序无法接收任何通知,我们甚至不能观察isOtherAudioPlaying属性... 我在我的项目中使用的解决方案是添加一个NSTimer,并每秒钟检查一次[[AVAudioSession sharedInstance] isOtherAudioPlaying] BOOL值。


1
Snapchat刚刚实现了这个功能,这样你就可以记录背景中播放的任何音频。肯定有一种方法可以做到,只是我还不确定怎么做。 - Oren
@Oren 是的...我正在检查所有的网站,但是没有地方描述为什么和如何Snapchat和Periscope可以在不间断和连续录制视频的情况下工作...这里也没有找到解决方案。链接 - Bhavin Bhadani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接