You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows平台下使用QtMultimedia无法获取可用摄像头列表问题求助

问题原因

Windows 10平台下PyQt5的QtMultimedia模块识别不到摄像头是常见兼容性问题,核心原因可分为三类,且和本地视频播放能力不冲突:本地视频播放走解码渲染链路,不需要调用摄像头采集接口,因此你可以正常播放本地视频不代表摄像头采集链路正常。

解决方案
  • 检查系统摄像头权限
    Windows 10 1903及后续版本默认禁止桌面应用调用摄像头,需手动开启权限:打开「设置→隐私和安全性→摄像头」,先开启顶部的「允许应用访问你的摄像头」开关,再确保下方「允许桌面应用访问你的摄像头」开关处于开启状态,重启脚本测试。

  • 修复PyQt5依赖与代码错误
    你提供的测试代码存在缩进错误,且部分精简版PyQt5安装包会缺失DirectShow后端插件,先执行以下命令重装完整组件:

pip install --force-reinstall PyQt5 PyQt5-sip PyQt5Multimedia

再使用修正后的代码测试:

from PyQt5.QtMultimedia import QCameraInfo
from PyQt5.QtWidgets import QApplication, QWidget
import sys

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        myList = QCameraInfo.availableCameras()
        print('List = ', myList)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())
  • 切换到PyQt6使用兼容更好的多媒体后端
    如果上述方案无效,是因为Qt5的Windows摄像头采集默认依赖老旧的DirectShow接口,对很多新的USB采集卡、高分辨率内置摄像头兼容较差。Qt6重写了QtMultimedia模块,Windows下默认使用Media Foundation接口,兼容性大幅提升,可替换为PyQt6实现,测试代码如下:
from PyQt6.QtMultimedia import QMediaDevices
from PyQt6.QtWidgets import QApplication, QWidget
import sys

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        myList = QMediaDevices.videoInputs()
        print('List = ', myList)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())

内容的提问来源于stack exchange,提问作者slalomchip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:18:00