树莓派Flask+OpenCV推流报错:/dev/video0设备忙
树莓派摄像头流媒体推送故障排查:/dev/video0 设备忙报错
问题场景
计划用树莓派、Pi Camera、Flask和OpenCV实现网页视频流媒体推送,已编写Python代码和index.html页面。Flask服务正常启动,但访问设备IP看不到流媒体画面,终端报module v4l2src1 reported: Device '/dev/video0' is busy,确认无其他程序占用该设备。
报错详情
@raspberrypi:~/opencv $ sudo python app_start.py [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory. [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created * Serving Flask app "app_start" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit) 192.168.123.9 - - [16/Jan/2024 10:29:43] "GET / HTTP/1.1" 200 - [ WARN:1] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src1 reported: Device '/dev/video0' is busy [ WARN:1] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:1] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created [ WARN:1] global ../modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index 192.168.123.9 - - [16/Jan/2024 10:29:43] "GET /video_feed HTTP/1.1" 200 -
解决步骤
1. 排查隐藏进程占用
- 执行命令查看设备关联进程:
lsof /dev/video0 - 如果输出有进程,用
sudo kill <进程PID>强制终止占用进程
2. 重置V4L2摄像头模块
- 卸载并重新加载摄像头驱动:
sudo rmmod bcm2835-v4l2 sudo modprobe bcm2835-v4l2 - 这会强制重置设备状态,释放异常占用
3. 强制指定OpenCV后端
报错多次关联GStreamer,修改代码里的摄像头初始化逻辑,强制使用V4L2后端:
# 替换原有的cv2.VideoCapture(0) cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
4. 修复设备权限
- 检查当前用户是否在
video组:groups $(whoami) - 如果没有,添加用户到组并重启:
sudo usermod -aG video $(whoami) sudo reboot - 尽量避免用
sudo运行Flask,高权限可能引发设备访问冲突
5. 验证硬件可用性
- 重新插拔Pi Camera排线,确保蓝色面朝SD卡方向插紧
- 用基础命令测试摄像头:
raspistill -o test.jpg - 如果无法生成图片,排查硬件损坏或排线问题
内容的提问来源于stack exchange,提问作者Zerg Jung
相关产品推荐
相关产品推荐

