环境信息:
- 系统:Pop!_OS 24.04,内核 6.17.9
- 显卡:Intel Arrow Lake-U 集显 + NVIDIA 独显(双显卡)
- 腾讯会议版本:3.26.10.401(deb 包)
- 桌面:COSMIC(Wayland,已自动切换 XWayland)
- 摄像头:Syntek Integrated Camera(UVC,/dev/video0)
问题现象:
进入会议开启摄像头后画面黑屏,无法显示视频。摄像头指示灯亮起,说明设备已被打开,但无画面输出。使用 ffmpeg、微信视频等其他软件摄像头均正常。
日志关键报错(xcast log):
v4l2.c:320 | Not enough buffer on device:/dev/video0
v4l2.c:333 | Could not requeue buffer on device:/dev/video0
video_capture_linux.c:416 | camera[0x29f46150].is.busy
摄像头 init、config(1280x720 MJPEG)、start 均成功,但紧接着 V4L2 buffer requeue 持续失败,累计数百次。
根因分析:
腾讯会议默认使用 NVIDIA EGL 渲染,NVIDIA 私有驱动的 EGL 实现与 V4L2 mmap buffer 管理机制存在冲突,导致视频帧 buffer 无法正常回收和重新排队。
临时解决方案:
在 /opt/wemeet/wemeetapp.sh 中添加以下环境变量,强制使用 Mesa(Intel 集显)渲染后摄像头恢复正常:
export __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json
export __GLX_VENDOR_LIBRARY_NAME=mesa
建议:
请在启动脚本中增加双显卡环境检测逻辑,当检测到 NVIDIA + Intel 双显卡时自动回退至 Mesa EGL,或修复 V4L2 采集模块与 NVIDIA EGL 的兼容性问题。
相似问题