Raspberry Pi Zero W基于OV5647的RTSP H.264推流失败求助
解决方案
核心原因
libcamera-vid本身不支持直接输出到RTSP地址,它的-o参数仅支持本地文件、标准输出或特定硬件设备,无法直接写入RTSP流地址,这是报错的根本原因。
方法1:用FFmpeg中转推流(快速实现)
这是最直接的方式,利用libcamera-vid输出H.264流到标准输出,再通过FFmpeg转成RTSP流推送:
- 先在树莓派上安装FFmpeg:
sudo apt update && sudo apt install ffmpeg - 执行推流命令(替换
<RASPI_IP>为树莓派的局域网IP,比如192.168.1.100):libcamera-vid -t 0 --width 1280 --height 720 --framerate 30 --codec h264 -o - | ffmpeg -i - -vcodec copy -f rtsp rtsp://<RASPI_IP>:554/stream - 在Ubuntu笔记本上,用VLC或FFmpeg拉流:
或者直接在VLC中打开该RTSP地址。ffplay rtsp://<RASPI_IP>:554/stream
方法2:搭建独立RTSP服务器(稳定可靠)
如果需要长期推流,推荐使用rtsp-simple-server,这是一个轻量的RTSP服务器:
- 下载适配树莓派Zero W的ARMv6版本(去官方页面获取对应架构的压缩包),上传到树莓派后解压:
tar xzf rtsp-simple-server_linux_armv6.tar.gz - 启动服务器:
./rtsp-simple-server - 用
libcamera-vid推流到本地服务器:libcamera-vid -t 0 --width 1280 --height 720 --framerate 30 --codec h264 -o rtsp://localhost:8554/stream - Ubuntu笔记本拉流地址:
rtsp://<RASPI_IP>:8554/stream
关键注意事项
- 端口权限:554是知名端口,需要root权限才能使用,不想用sudo的话,可以换成8554这类非知名端口(如方法2中的端口)。
- 防火墙设置:确保树莓派开放了对应端口,执行:
或者临时关闭防火墙测试:sudo ufw allow 554/tcp sudo ufw allow 554/udpsudo ufw disable - 摄像头兼容性:虽然本地能显示,但确认
/boot/config.txt中已添加:
之后重启树莓派生效。camera_auto_detect=0 dtoverlay=ov5647
Python脚本修正思路
不要直接让Python调用libcamera-vid输出到RTSP地址,而是通过subprocess模块执行FFmpeg中转的命令,示例代码:
import subprocess raspi_ip = "192.168.1.100" cmd = [ "libcamera-vid", "-t", "0", "--width", "1280", "--height", "720", "--framerate", "30", "--codec", "h264", "-o", "-" ] ffmpeg_cmd = [ "ffmpeg", "-i", "-", "-vcodec", "copy", "-f", "rtsp", f"rtsp://{raspi_ip}:554/stream" ] # 启动管道 vid_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) ffmpeg_proc = subprocess.Popen(ffmpeg_cmd, stdin=vid_proc.stdout) # 等待进程结束 try: ffmpeg_proc.wait() except KeyboardInterrupt: vid_proc.terminate() ffmpeg_proc.terminate()
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

