我制作了一个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,它也遇到了同样的问题。
答案 0 :(得分:0)
我发现了问题。在尝试设置频道数之前,我需要添加session.setActive(true)
。我以前从来没有做过此事,但我想您还是应该这样做,以防万一。
答案 1 :(得分:-2)
AVAudioSession.sharedInstance() 您仍然可以更改它, 搜索吗?