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
相关产品推荐
相关产品推荐

