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

树莓派4B+Pi Camera V3无法捕获帧,RTSP推流报错求助

树莓派4B搭配Pi Camera V3搭建RTSP流服务器失败的解决方法

环境与操作背景

使用Raspberry Pi 4 Model B + Pi Camera Module v3,尝试基于zephyr RTSP库搭建RTSP流服务器,运行以下Python脚本:

import cv2
from zephyr import Stream

if __name__ == "__main__":
  stream = Stream(
    url="rtsp://localhost:8554/test",
    resolution=(1280, 720),
    fps=30,
    bitrate="2M"
  )

  cap = cv2.VideoCapture(0)
  while True:
    ret, frame = cap.read()
    stream.send(frame)

错误信息

运行后抛出OpenCV断言错误:

Traceback (most recent call last):
  File "/home/pi/testserver1.py", line 15, in <module>
    stream.send(frame)
  File "/home/pi/innov/venv/lib/python3.11/site-packages/zephyr/stream/stream.py", line 174, in send
    frame = cv2.resize(frame, self.resolution)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cv2.error: OpenCV(4.8.1) /io/opencv/modules/imgproc/src/resize.cpp:4062: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

摄像头检测状态

摄像头可被正常识别:

(venv) pi@YassinePi:~ $ libcamera-still --list-cameras
Available cameras
-----------------
0 : imx708 [4608x2592 10-bit RGGB] (/base/soc/i2c0mux/i2c@1/imx708@1a)
    Modes: 'SRGGB10_CSI2P' : 1536x864 [120.13 fps - (768, 432)/3072x1728 crop]
                             2304x1296 [56.03 fps - (0, 0)/4608x2592 crop]
                             4608x2592 [14.35 fps - (0, 0)/4608x2592 crop]

已尝试无效操作

  • 更换摄像头索引为1、-1、2
  • 重装系统及所有依赖

问题根源

错误!ssize.empty()表明cv2.VideoCapture(0)未能成功读取到摄像头帧,核心原因是Pi Camera V3采用libcamera驱动栈,而传统OpenCV的VideoCapture接口默认使用旧版V4L2驱动栈,二者不兼容。

解决方法

方法1:用Picamera2替代OpenCV读取帧

Picamera2是树莓派官方适配libcamera的Python库,可直接获取摄像头帧并传给zephyr流:

from picamera2 import Picamera2
import cv2
from zephyr import Stream

if __name__ == "__main__":
    stream = Stream(
        url="rtsp://localhost:8554/test",
        resolution=(1280, 720),
        fps=30,
        bitrate="2M"
    )

    # 初始化Picamera2并配置参数
    picam2 = Picamera2()
    config = picam2.create_video_configuration(
        main={"size": (1280, 720), "format": "RGB888"}
    )
    picam2.configure(config)
    picam2.start()

    while True:
        # 获取帧并转换为OpenCV兼容的BGR格式
        frame = picam2.capture_array()
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        stream.send(frame)

安装依赖:pip install picamera2 opencv-python

方法2:启用传统摄像头驱动栈(不推荐)

通过raspi-config切换到旧版V4L2驱动,让OpenCV可以直接调用摄像头:

  1. 运行sudo raspi-config
  2. 进入Interface Options → Legacy Camera
  3. 选择启用,重启系统
    之后原脚本的cv2.VideoCapture(0)即可正常工作,但会损失libcamera带来的性能和功能优势。

替代方案:用原生工具推流(更稳定)

放弃Python库,直接用libcamera-vid和ffmpeg配合RTSP服务器推流,稳定性更高:

  1. 安装依赖:sudo apt update && sudo apt install ffmpeg libcamera-tools
  2. 部署RTSP服务器(以轻量的rtsp-simple-server为例):
    • 下载对应树莓派的二进制包,解压后运行./rtsp-simple-server(后台运行可加&)
  3. 执行推流命令:
libcamera-vid -t 0 --width 1280 --height 720 --framerate 30 --codec h264 --bitrate 2000000 -n -o - | ffmpeg -i - -vcodec copy -f rtsp rtsp://localhost:8554/test

客户端可通过rtsp://<树莓派IP>:8554/test访问流。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:12:24