cmd
Fatal error in: ../../media/engine/adm_helpers.cc, line 39
last system error: 88
Check failed: 0 == adm->Init() (0 vs. -1)
Failed to initialize the ADM.
这个报错是WebRTC/音频设备初始化失败
的典型错误,尤其是在Linux下用sudo
启动GUI程序时常见。
- ADM = Audio Device Module(音频设备模块)
adm->Init()
失败意味着程序无法访问音频设备- 原因:用
sudo
启动桌面程序时:- ** root用户没有访问普通用户的PulseAudio / ALSA 的权限**
- 桌面程序依赖的 X11/Wayland session 环境变量 (
$DISPLAY
、$XDG_RUNTING_DIR
等)通常属于普通用户。
- Linux 下用
sudo
启动GUI程序 + 音频,大概率会报ADM初始化失败。
在 Linux 上,用 root 运行GUI + 音频程序几乎总会遇到ADM初始化失败的问题,通常只监听或操作不涉及GUI/音频的部分,用普通用户跑最简单。
我用了一些方法可以正常去初始化ADM,但与我要解决的问题背道而驰。
我是想sudo
启动,让自动化测试工具可以监听到。
尝试多种方法后,最后我直接干掉了:flutter_webrtc
插件。
- WebRTC 在 Linux 上会尝试初始化 音频/视频设备
- 如果 sudo 运行: - PulseAudio / PipeWire 的 socket 在普通用户目录
/run/user/UID/...
- sudo 会切换到 root,导致 UID 不匹配 -> ADM 初始化失败 - 也就是sudo下WebRTC尝试访问音频设备就报#39 ADM错误