树莓派4B实战:USB摄像头RTSP推流与开机自启服务部署
1. 为什么需要RTSP推流家里有个闲置的树莓派4B和USB摄像头想做个24小时运行的监控系统或者打算搭建一个小型直播工作室RTSP推流就是你的最佳选择。RTSPReal Time Streaming Protocol作为主流的流媒体传输协议能够将摄像头画面实时推送到局域网内的任何设备无论是手机、平板还是电脑都能随时查看实时画面。相比直接通过树莓派访问摄像头RTSP推流有三个明显优势一是跨平台兼容性几乎所有播放器都支持RTSP协议二是低延迟传输实测下来画面延迟可以控制在500ms以内三是多客户端支持同一个视频流可以同时被多个设备观看。我在家里部署这套系统后用手机就能随时查看门口情况再也不用担心快递被误拿了。2. 硬件准备与环境配置2.1 选择合适的USB摄像头不是所有USB摄像头都能完美兼容树莓派。经过多次测试我推荐使用免驱型UVC摄像头这类设备在Linux系统下即插即用。具体可以用以下命令检测摄像头是否被识别lsusb ls /dev/video*如果看到类似/dev/video0的设备节点说明摄像头已被识别。我用的是一款百元左右的1080P摄像头实测在树莓派4B上能稳定输出30帧画面。2.2 系统基础配置建议使用官方Raspberry Pi OS原Raspbian系统并确保系统是最新版sudo apt update sudo apt full-upgrade -y sudo reboot安装必要工具链和依赖库这些是后续编译FFmpeg的基础sudo apt install -y build-essential git autoconf libtool pkg-config3. 编译支持硬件加速的FFmpeg3.1 为什么需要自定义编译树莓派4B搭载的Broadcom BCM2711芯片内置了H.264硬件编解码器但官方仓库的FFmpeg默认不启用这些优化。自己编译可以充分释放硬件潜力实测硬件编码能将CPU占用率从90%降到30%以下。3.2 分步编译指南先安装x264编码器这是H.264编码的基础git clone https://code.videolan.org/videolan/x264.git cd x264 ./configure --enable-static --disable-opencl make -j4 sudo make install接着编译FFmpeg关键是要启用树莓派的硬件加速选项git clone https://git.ffmpeg.org/ffmpeg.git cd ffmpeg ./configure \ --enable-gpl --enable-libx264 \ --enable-omx --enable-omx-rpi \ --enable-mmal --enable-hwaccelh264_mmal \ --enable-decoderh264_mmal make -j4 sudo make install这个过程大约需要1小时建议在树莓派空闲时进行。如果遇到OMX_Core.h not found错误需要先安装sudo apt install libomxil-bellagio-dev4. 搭建RTSP流媒体服务器4.1 轻量级服务器选择经过对比测试我推荐使用node-rtsp-rtmp-server这个基于Node.js的实现资源占用小配置简单git clone https://github.com/iizukanao/node-rtsp-rtmp-server.git cd node-rtsp-rtmp-server npm install sudo npm install -g coffeescript4.2 启动服务与推流测试启动RTSP服务器sudo coffee server.coffee新开一个终端窗口用FFmpeg推送摄像头画面ffmpeg -f v4l2 -i /dev/video0 \ -c:v h264_omx -b:v 2M \ -f rtsp rtsp://localhost:8554/live用VLC播放器打开rtsp://树莓派IP:8554/live就能看到实时画面了。如果画面卡顿可以调整-b:v参数降低码率。5. 配置开机自启动服务5.1 创建服务脚本在/home/pi目录下创建start_stream.sh#!/bin/bash cd /home/pi/node-rtsp-rtmp-server sudo coffee server.coffee sleep 5 ffmpeg -f v4l2 -i /dev/video0 -c:v h264_omx -b:v 2M -f rtsp rtsp://localhost:8554/live给脚本执行权限chmod x /home/pi/start_stream.sh5.2 配置systemd服务创建/etc/systemd/system/rtsp_stream.service文件[Unit] DescriptionRTSP Streaming Service Afternetwork.target [Service] ExecStart/home/pi/start_stream.sh Restartalways Userpi [Install] WantedBymulti-user.target启用并启动服务sudo systemctl enable rtsp_stream.service sudo systemctl start rtsp_stream.service现在即使树莓派重启监控服务也会自动恢复。可以通过journalctl -u rtsp_stream.service -f查看实时日志排查问题。6. 常见问题排查6.1 画面延迟过高如果发现画面延迟超过1秒可以尝试以下优化在FFmpeg命令中添加-preset ultrafast参数改用TCP传输协议-rtsp_transport tcp降低分辨率-s 1280x7206.2 服务启动失败检查服务状态时如果看到失败提示确认脚本路径和权限正确查看完整日志sudo journalctl -u rtsp_stream.service -b手动运行脚本看具体报错6.3 多摄像头支持如果需要接入多个USB摄像头先确认每个摄像头分配到了不同的设备节点如/dev/video0、/dev/video1。然后为每个摄像头创建独立的推流命令和service文件即可。