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