配置 Jetson Nano 摄像头使用 GStreamer 传输 RTSP 流到本地

配置 Jetson Nano 摄像头使用 GStreamer 传输 RTSP 流到本地

目录


GStreamer 是一个功能强大的开源多媒体框架,用于构建处理音频、视频和多媒体流的应用程序。它提供了丰富的工具和库,帮助开发者创建、处理和播放多媒体内容。

最佳方案:在 Jetson Nano 上使用 GStreamer 推送 RTSP 流

Jetson Nano 使用 GStreamer 可以利用其硬件加速(H.264 编码),同时通过 UDP 或 TCP 推送视频流到笔记本。


1. 配置 GStreamer 步骤

1.1 确保 GStreamer 已安装

在 Jetson Nano 上安装 GStreamer 和相关插件:

sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
  • gstreamer1.0-tools: 包含 GStreamer 命令行工具(如 gst-launch-1.0)。
  • gstreamer1.0-plugins-base: 基础插件集,支持常见格式。
  • gstreamer1.0-plugins-good: 高质量插件集,支持更多格式和功能。
  • gstreamer1.0-plugins-bad: 实验性插件集。
  • gstreamer1.0-plugins-ugly: 包含一些有专利问题的插件。
  • gstreamer1.0-libav: 提供基于 FFmpeg 的编解码器支持。

1.2 运行 GStreamer 命令

使用以下命令从 Jetson Nano 的 CSI 摄像头捕获视频并通过 UDP 推送到笔记本:

gst-launch-1.0 nvarguscamerasrc ! \
'video/x-raw(memory:NVMM),width=640,height=480,framerate=30/1' ! \
nvvidconv ! 'video/x-raw,width=640,height=480,format=I420' ! \
x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! \
rtph264pay config-interval=1 pt=96 ! udpsink host=<PC_IP_ADDRESS> port=5000
  • nvarguscamerasrc: 调用 Jetson Nano 上的 CSI 摄像头。
  • video/x-raw(memory:NVMM): 指定视频格式为 NVMM(NVIDIA 内存管理),分辨率为 640x480,帧率为 30fps。
  • nvvidconv: 使用 NVIDIA 硬件加速进行视频格式转换。
  • x264enc: 使用 H.264 编码器,优化为低延迟传输。
    • tune=zerolatency: 设置为零延迟模式。
    • bitrate=500: 设置比特率为 500 kbps。
    • speed-preset=superfast: 使用超快编码预设以降低延迟。
  • rtph264pay: 将 H.264 视频流封装为 RTP 包。
  • udpsink: 通过 UDP 协议传输视频流。
    • host=<PC_IP_ADDRESS>: 替换为笔记本的 IP 地址。
    • port=5000: 视频流传输的目标端口。

2. 在笔记本上接收 RTSP 流

笔记本可以通过 OpenCVGStreamer 接收并解码 RTSP 视频流。

2.1 使用 OpenCV 接收 RTSP 流

调用 OpenCV 在笔记本端接收并显示摄像头视频流:

import cv2

cap = cv2.VideoCapture("udp://@:5000")   # 接收来自 Jetson Nano 的视频流

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Failed to receive frame. Exiting...")
        break

    cv2.imshow("RTSP Stream", frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
  • udp://@:5000: 从 UDP 端口 5000 接收视频流。
  • cv2.imshow: 显示视频流。
  • cv2.waitKey(1): 检测按键输入,按下 q 键退出。

2.2 使用 GStreamer 接收 RTSP 流

调用 GStreamer 接收并显示视频流:

gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,media=video,encoding-name=H264,payload=96 ! rtph264depay ! avdec_h264 ! autovideosink
  • udpsrc port=5000: 从 UDP 端口 5000 接收数据。
  • rtph264depay: 解封装 RTP 包。
  • avdec_h264: 解码 H.264 视频流。
  • autovideosink: 自动选择视频输出设备。

3. 优化建议

3.1 压缩与分辨率调整

  • 降低分辨率:如果网络带宽有限,可以降低视频分辨率(例如 320x240)。
  • 调整比特率:根据网络条件调整比特率(例如 bitrate=300)。
  • 帧率调整:降低帧率以减少带宽占用(例如 framerate=15/1)。

3.2 使用轻量化模型

  • 若使用 YOLO 进行目标检测,可以切换到轻量化模型(如 YOLOv5nYOLOv7-tiny 之类)以提高推理速度。

3.3 使用硬件加速

  • Jetson Nano:确保使用 NVIDIA 硬件 加速(如 nvvidconvx264enc)。
  • 本地:如果笔记本有 GPU,可以使用 CUDA 加速 OpenCV 或 GStreamer 的视频处理。

3.4 网络优化

  • 使用 TCP 协议:如果 UDP 丢包严重,可以改用 TCP 传输。

    • 在 Jetson Nano 上:

      gst-launch-1.0 nvarguscamerasrc ! \
      'video/x-raw(memory:NVMM),width=640,height=480,framerate=30/1' ! \
      nvvidconv ! 'video/x-raw,width=640,height=480,format=I420' ! \
      x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! \
      rtph264pay config-interval=1 pt=96 ! tcpserversink host=<PC_IP_ADDRESS> port=5000
      
    • 在笔记本上:

      gst-launch-1.0 tcpclientsrc host=<JETSON_IP_ADDRESS> port=5000 ! \
      application/x-rtp,media=video,encoding-name=H264,payload=96 ! \
      rtph264depay ! avdec_h264 ! autovideosink
      

4. 常见问题排查

emmm,这是我当时遇到的一些问题。。。

4.1 视频流无法显示

  • 确保本地的 OpenCV 支持 GStreamer
  • 检查 Jetson Nano 和笔记本的网络连接,可以在同一 局域网 下。
  • 确保防火墙允许 UDP/TCP 端口 5000 的通信。
  • 检查 GStreamer 命令中的 IP 地址端口 是否正确。

4.2 视频延迟过高

  • 降低 分辨率比特率
  • 使用更快的编码预设 speed-preset=ultrafast

有想交流或获取源码的朋友可以私信,或微信公众号:咚叶的小铺,欢迎大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值