You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Yocto的树莓派3 RTSP摄像头视频流配置技术求助

嘿,我来帮你搞定树莓派3 Yocto系统上的RTSP摄像头流问题!既然UDP推流已经正常工作了,那RTSP的配置其实就是在这个基础上搭建一个流媒体服务器的事儿,咱们一步步梳理:

第一步:确保Yocto镜像里的GStreamer组件完整

因为你的系统没启用仓库,所有组件必须提前集成到镜像里,这是关键前提:

  • 如果是手动修改镜像recipe(比如recipes-core/images/my-custom-image.bb),在文件里添加这些核心包:
    IMAGE_INSTALL:append = " gstreamer1.0-rtsp-server gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-ugly"
    
    解释下:gstreamer1.0-rtsp-server是RTSP服务器的核心依赖,后面三个插件包包含了RTSP流需要的所有处理元素(比如你已经在用的v4l2srcjpegenc,还有RTSP专用的rtspsrcrtph264pay等)。
  • 如果你用Toaster操作更顺手,直接在Customize Image界面的Packages搜索框里搜这些包,勾选后添加到镜像即可——Toaster会自动处理所有依赖,不用手动改配置文件,非常省心。
第二步:启动RTSP流媒体服务器

UDP是直接推流到指定IP,而RTSP是让客户端主动来拉流,所以需要启动一个RTSP服务器。gstreamer1.0-rtsp-server包自带了一个现成的工具test-launch,直接用它就行:
在树莓派终端执行:

test-launch "v4l2src device=/dev/video0 ! videoconvert ! jpegenc ! rtpjpegpay name=pay0 pt=26"

这个命令会启动一个默认的RTSP服务器,地址是 rtsp://<你的树莓派IP>:8554/test,客户端直接用这个地址就能访问流。

如果想自定义端口和流路径,比如改成端口8555、流路径/my_cam,可以这么写:

test-launch --port=8555 "v4l2src device=/dev/video0 ! videoconvert ! jpegenc ! rtpjpegpay name=pay0 pt=26" /my_cam

对应的访问地址就变成 rtsp://<树莓派IP>:8555/my_cam

第三步:客户端测试RTSP流
  • 用GStreamer客户端测试:
    gst-launch-1.0 rtspsrc location=rtsp://<树莓派IP>:8554/test ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
    
  • 用VLC测试:直接打开「网络串流」,输入上面的RTSP地址就行,不用再写SDP文件(当然你非要用SDP的话,把文件里的IP改成树莓派的IP,端口改成8554即可)。
第四步:Toaster操作的关键注意点

你之前看教程分不清手动和自动步骤,这里给你明确Toaster里的操作逻辑:

  • 层配置:你现在的层列表(openembedded-core meta-poky meta-yocto-bsp meta-oe meta-raspberrypi toaster-custom-images)完全够用——meta-oe提供GStreamer相关包,meta-raspberrypi负责树莓派硬件驱动支持,不用额外加层。
  • 镜像定制:在Toaster里选中你的自定义镜像(基于core-image-sato-dev),进入「Customize」→「Packages」,搜索并勾选第一步里的GStreamer包,Toaster会自动把这些包和依赖加入镜像编译清单。
  • 编译与验证:编译完成烧写后,在树莓派上执行gst-inspect-1.0 rtspserverwhich test-launch,如果能输出组件信息和test-launch的路径,说明组件已经正确安装。
常见问题排查

如果遇到问题,按下面的顺序排查:

  1. RTSP服务器启动失败
    • 检查摄像头设备:执行ls /dev/video*,如果没有/dev/video0,说明摄像头驱动没加载。如果是USB摄像头,meta-raspberrypi默认支持;如果是CSI摄像头,需要在Toaster的「Customize」→「Kernel Configuration」里启用CSI支持,或者修改树莓派的config.txt添加enable_csi=1
    • 检查端口占用:执行netstat -tulpn | grep 8554,如果有其他进程占用,换个端口试试。
  2. 客户端无法连接
    • 确认网络连通性:ping一下树莓派的IP,确保客户端和树莓派在同一局域网。
    • 检查防火墙:Yocto默认没开防火墙,但如果你的系统有配置,要开放RTSP端口(默认8554,TCP和UDP都要开放,RTSP用TCP传控制指令,UDP传视频流)。
  3. 画面卡顿/无画面
    • 降低分辨率:在v4l2src后面加分辨率限制,减少带宽压力:
      test-launch "v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! videoconvert ! jpegenc ! rtpjpegpay name=pay0 pt=26"
      
    • 换编码格式:如果JPEG编码不稳定,试试H264(需要gstreamer1.0-plugins-ugly包):
      服务器命令:
      test-launch "v4l2src device=/dev/video0 ! videoconvert ! x264enc ! rtph264pay name=pay0 pt=96"
      
      客户端命令:
      gst-launch-1.0 rtspsrc location=rtsp://<树莓派IP>:8554/test ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! h264dec ! autovideosink
      

内容的提问来源于stack exchange,提问作者Montė

火山引擎 最新活动