我制作了一个iOS插件,它捕获音频数据并以字节流的形式将其转发给侦听器。它在模拟器和各种设备上运行得完美无缺,但是在运行iPhone 6的iOS 11.3上,它在初始化过程中崩溃了。我跟踪了这个问题,直到下面的代码:
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?据我所知,我认为这是一个权限问题,因为我请求麦克风许可之前,应用程序达到这一点的代码。我唯一能想到的就是这款手机根本没有麦克风的功能.但这是一部手机,因此麦克风的配备似乎相当标准。
编辑:我拿出了一个运行iPad 12的iOS Air,它也有同样的问题。
发布于 2018-10-12 16:06:12
我发现了问题。在尝试设置频道数量之前,我需要添加session.setActive(true)。我以前从来没有这样做过,但我想这是你无论如何都应该做的事情,以防万一。
发布于 2018-10-12 03:30:25
AVAudioSession.sharedInstance()您可以更改它,搜索它吗?
https://stackoverflow.com/questions/52768437
复制相似问题