首页 > 解决方案 > 新 M1 mac 上的 coreaudio 崩溃

问题描述

我正在尝试在新的 M1 mac 上编写类似于PhantomAudioDriver或(SoundFlower基于它)的音频内核扩展。

我构建了它,它加载并且我还能够将它设置为默认设备。
在初始化期间,我检查每个部分,并且所有内容都初始化并创建没有任何错误,但是当我将虚拟设备设置为默认值时播放某些内容时,它就会冻结。使用 QuickTime 播放器时,它什么也不做,但是当我尝试使用 vlc 播放视频时,它会冻结几秒钟,但它确实播放视频,没有音频。

在内核日志中,我看到它肯定会启动音频引擎:

kernel: (IOAudioFamily)   engine started  

因为IOAudioFamily's代码是开源的,所以我能够根据内核日志检查和分析我的代码,它可以正常工作并且不会返回任何错误。

但是几秒钟后,在内核日志中,我看到调用了引擎停止命令。我能够确定它在此日志之后开始关闭:

coreaudiod: (CoreAudio)  HALS_IOContext::IOWorkLoop: could not establish a timeline after waiting 10000000 microseconds for context 214 <private>

你见过吗?HALS_IOContext's不幸的是,代码不是开源的,我不明白为什么会这样。

在代码中:

wl = getWorkLoop();
if (!wl) {
    goto Done;
}
    
timerEventSource = IOTimerEventSource::timerEventSource(this, timerFired);
    
if (!timerEventSource) {
    goto Done;
}

所以它肯定不会失败。

之后IOAudioFamily's调用日志停止命令并停止引擎并关闭客户端。我看到了那个CoreAudio错误:

coreaudiod: (CoreAudio)  HALS_IOContext::StartIOThread: the IO thread failed to start, Error: 1852797029 (<private>)

QuickTime 播放器得到这个:

QuickTime Player: (CoreAudio)  HALC_ProxyIOContext::IOWorkLoop: the server failed to start, Error: 0x6E6F7065

我还检查了启动和关闭客户端日志之间的日志(我认为那里没有什么用处和可以理解的),也许我应该一些特定的进程日志?

另外,也许还有其他方法可以查看HALS源代码。我非常感谢您的专业知识和帮助。

标签: c++macoscore-audiokernel-extensionapple-m1

解决方案


推荐阅读