macOS下AudioKit为mixer添加输入源时抛出-10878错误如何解决
错误码-10878的含义与修复方案
-10878是Core Audio框架定义的标准错误码,对应常量为kAudioUnitErr_CannotDoInCurrentContext,核心含义是当前执行的音频操作无法在当前上下文下完成。在AudioKit开发场景下,该错误绝大多数是操作音频节点的时机或线程错误导致的,比如在音频引擎未完成启动、或已经停止的状态下修改节点关系,或是在非主线程/音频渲染线程执行节点增删操作。
修复方案可按以下顺序排查:
- 确认
mixer.addInput(myAudioPlayer)的执行时机:必须在AudioKit.engine完成启动之后、主动停止之前调用,不要在引擎初始化阶段执行节点修改操作 - 所有音频节点的增删、启停操作统一放到主线程执行,不要在子线程或音频回调线程中执行这类操作
- 检查
myAudioPlayer的状态:确认添加到mixer前该播放器没有被释放,也没有被关联到其他父节点,如果之前已经添加到其他mixer,需要先调用对应mixer的removeInput方法移除后再进行新增操作 - 如果需要频繁动态修改mixer的输入节点,可先临时暂停音频引擎,执行完
addInput操作后再重启引擎,普通场景下该操作不会产生可感知的卡顿
日志字段
ShowTime[16140:1611137]的含义与定位能力 该字段可以拆分为三部分解释:
ShowTime是你当前运行应用的显示名称,对应Xcode项目中配置的Display Name- 第一个数字
16140是当前应用进程的PID(进程唯一标识符),同一应用每次启动都会分配新的PID - 第二个数字
1611137是输出该条日志的线程的TID(线程唯一标识符)
仅通过这串数字无法直接定位到代码的具体故障位置,你可以配合Xcode的自定义日志、断点能力结合TID确认执行违规操作的线程类型,辅助排查问题。如果要直接定位到具体代码行,可添加全局异常断点,或针对Core Audio错误抛出点添加符号断点。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

