AudioSession maximumInputNumberOfChannels返回0

时间:2018-10-11 20:27:33

标签: ios swift microphone avaudiosession

我制作了一个iOS插件,可捕获音频数据并将其以字节流的形式转发给侦听器。它可以在模拟器和各种设备上正常运行,但是在运行iOS 11.3的iPhone 6上,它在初始化期间崩溃。我已将此问题跟踪到以下代码:

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
    try session.setPreferredInputNumberOfChannels(1) // This is the line that is throwing
    try session.setPreferredIOBufferDuration(65)
} catch {
    print(error.localizedDescription) // Prints: The operation couldn’t be completed. (OSStatus error -50.)
    return -1
}

如注释所示,错误是由于调用session.setPreferredIOBufferDuration引起的。查看文档,它说如果输入数字大于session.maximumInputNumberOfChannels,则会抛出该调用,从错误消息来看,似乎是这种情况。在此手机上检查该值,它返回0。

什么将导致该值为0?据我所知,我认为这不是权限问题,因为我在应用程序到达代码中的这一点之前就请求了麦克风权限。我唯一能想到的是电话本质上没有麦克风功能...但是它是一部电话,因此包含麦克风似乎相当标准。

编辑:我拔出了一个运行iOS 12的iPad Air,它也遇到了同样的问题。

2 个答案:

答案 0 :(得分:0)

我发现了问题。在尝试设置频道数之前,我需要添加session.setActive(true)。我以前从来没有做过此事,但我想您还是应该这样做,以防万一。

答案 1 :(得分:-2)

AVAudioSession.sharedInstance() 您仍然可以更改它, 搜索吗?