Asahi Linux(M1 MacBook Air)下PySide6调用QML Camera组件报错求助
在M1 MacBook Air的Asahi Linux系统中,使用PySide6的QQmlApplicationEngine加载包含Camera和CaptureSession的QML代码时,出现以下错误:
No QtMultimedia backends found. Only QMediaDevices, QAudioDevice, QSoundEffect, QAudioSink, and QAudioSource are available.
Failed to initialize QMediaCaptureSession "Not available"
Failed to initialize QCamera "Not available"
Failed to create QVideoSink "Not available"
已尝试将PySide6从6.8版本降级到6.7.0,但问题未解决。
QML代码片段:
CaptureSession { camera: Camera { id: camera focusMode: Camera.FocusModeAutoNear customFocusPoint: Qt.point(0.2, 0.2) // Focus relative to top-left corner } videoOutput: videoOutput } VideoOutput { id: videoOutput anchors.fill: parent }
解决方案
1. 安装QtMultimedia的系统后端依赖
Asahi Linux基于Arch Linux ARM,QtMultimedia的多媒体功能依赖GStreamer后端组件,默认可能未完整安装。执行以下命令补充依赖:
sudo pacman -S qt6-multimedia qt6-multimedia-gstreamer gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly
2. 确认后端插件存在
检查系统中是否已安装Qt6多媒体后端插件:
ls /usr/lib/qt6/plugins/multimedia/
若输出包含libgstreamermediaplugin.so等GStreamer相关文件,说明后端已就绪;若为空,重新安装qt6-multimedia-gstreamer包。
3. 强制指定GStreamer后端
在运行Python脚本前,通过环境变量指定QtMultimedia使用GStreamer后端:
export QT_MEDIA_BACKEND=gstreamer
也可以在Python代码开头添加:
import os os.environ['QT_MEDIA_BACKEND'] = 'gstreamer'
4. 修复摄像头访问权限
普通用户默认可能没有摄像头访问权限,将当前用户加入video用户组:
sudo usermod -aG video $USER
注销并重新登录后生效。
5. 更新系统内核
M1系列摄像头依赖Asahi Linux的内核驱动,确保使用最新内核版本:
sudo pacman -Syu
内容的提问来源于stack exchange,提问作者Newtron Malayalam

