iOS 16 Beta 5 AVAudioSession setCategory 产生奇怪的错误“什么”

coh*_*n72 9 ios avaudiosession swift avaudiosessioncategory ios16

最近安装 iOS 16 beta 5 后,我们遇到了一个问题try AVAudioSession.sharedInstance().setCategory(<category>, options: .mixWithOthers),出现错误并失去连接。

这是错误:

AVAudioSession_iOS.mm:2365 Failed to set category, error: 'what'

没有关于此错误的其他信息。任何帮助将不胜感激。

仅供参考:这仅在 iOS Beta 5 中才开始出现,之前在 iOS Beta 4 中也曾出现过。

Rob*_*ier 2

您的类别可能是错误的。从文档.mixWithOthers

仅当音频会话类别为 playAndRecord、playback 或多Route 时,您才可以显式设置此选项。如果您将音频会话类别设置为环境音,则会话会自动设置此选项。同样,设置 duckOthers 或 InterruptSpokenAudioAndMixWithOthers 选项也会启用此选项。

我希望您的类别不是 playAndRecord、播放或多路由。许多 AVAudioSession 配置都有不明显的要求,这些要求可能会或可能不会在特定版本的操作系统中强制执行。我强烈建议您阅读您调用的每个 AVAudioSession 方法和您使用的每个常量的文档。音频框架充满了一些并不完全符合其名称含义的东西。

'what'是一个4 字符代码(一种将 32 位整数表示为“类似字符串的东西”的旧方法)。这意味着 AVAudioSessionErrorCodeUnspecified (请参阅AudioSessionTypes.h标头。)

  • @dianaqq 是的,我最终解决了这个问题,因为我们终于明白 iOS 16 在内部添加了在某些条件下设置 AVAudioSession 类别的要求。在我们的例子中,我们调用了“AudioQueueStart”,当它启动时,我们尝试将类别更改为“record”,但它抛出了一个错误。所以我们改变了逻辑,首先将类别设置为“playAndRecord”,然后使用“AudioQueueStart” (3认同)