新 M1 mac 上的 coreaudio 崩溃

时间:2021-04-06 07:55:47

标签: c++ macos core-audio kernel-extension apple-m1

我正在尝试在新的 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 源代码。 我非常感谢您的专业知识和帮助。

0 个答案:

没有答案