分类
嵌入式开发 开发计划

如何减少串流延时:GStreamer vs gst-rtsp-server 的关系

GStreamer vs gst-rtsp-server 的关系

不可以只安装gst-rtsp-server

gst-rtsp-server 依赖于 GStreamer,它只是一个RTSP协议封装层,不能独立工作。实际的视频采集、H.264处理、RTP封装都是由GStreamer的核心插件完成的。

┌─────────────────────────────────────┐
│     gst-rtsp-server (RTSP协议层)     │  ← 只负责RTSP握手、会话管理
├─────────────────────────────────────┤
│         GStreamer (多媒体框架)        │  ← 负责实际的视频处理
│  ├─ v4l2src (摄像头采集)             │
│  ├─ h264parse (H.264解析)           │
│  └─ rtph264pay (RTP封装)            │
└─────────────────────────────────────┘
         ↓
    UVC摄像头 (H.264输出)

实际上你需要安装什么

最小化安装(必需)

# GStreamer核心(必须)
opkg install gstreamer1 gstreamer1-libs

# 必需的插件(必须)
opkg install gstreamer1-plugins-base    # 基础插件
opkg install gstreamer1-plugins-good    # v4l2、udpsink等

# 如果OpenWRT仓库有这些(可选,但推荐)
opkg install gstreamer1-plugins-bad     # 可能包含h264parse
opkg install gstreamer1-plugins-ugly    # 可能包含更多编码器

可选:gst-rtsp-server

# 如果仓库中有这个包
opkg install gstreamer1-rtsp-server

# 如果仓库中没有,需要自己编译(但不是必需的)

为什么gst-rtsp-server不是必需的?

方案A:使用gst-rtsp-server(简化RTSP)

# 需要编译或找到这个包
/usr/bin/test-launch \
  "( v4l2src device=/dev/video0 ! \
     video/x-h264 ! \
     h264parse ! \
     rtph264pay name=pay0 )"

# 输出:rtsp://0.0.0.0:8554/test

优点:自动处理RTSP协议细节
缺点:需要额外编译,OpenWRT仓库通常没有

方案B:只用GStreamer核心(无需gst-rtsp-server)

# 只需要GStreamer核心和插件
gst-launch-1.0 -e \
  v4l2src device=/dev/video0 ! \
  video/x-h264,width=640,height=480,framerate=30/1 ! \
  h264parse ! \
  rtph264pay config-interval=1 pt=96 ! \
  udpsink host=224.0.0.1 port=5004 sync=false

# 输出:udp://224.0.0.1:5004 (原始RTP流)

优点:只需安装核心包,无需额外编译
缺点:客户端需要直接连接UDP,不是标准RTSP

对比:v4l2rtspserver vs GStreamer

组件 v4l2rtspserver GStreamer (无gst-rtsp-server) GStreamer (有gst-rtsp-server)
核心库 live555 gstreamer1 gstreamer1
RTSP支持 ✅ 内置 ❌ 需要自己实现 ✅ 通过库
安装复杂度 中(需编译)
H.264透传
延时 50-100ms 30-50ms 30-50ms

我的建议

1. 如果你想用标准RTSP协议

继续用v4l2rtspserver,它已经内置了RTSP支持:

v4l2rtspserver -fH264 -Q 1 /dev/video0

2. 如果你想用GStreamer但不编译gst-rtsp-server

只用GStreamer核心 + UDP传输

# 安装
opkg install gstreamer1 gstreamer1-libs gstreamer1-plugins-base gstreamer1-plugins-good

# 运行
gst-launch-1.0 -e v4l2src device=/dev/video0 ! \
  video/x-h264 ! h264parse ! rtph264pay ! \
  udpsink host=224.0.0.1 port=5004 sync=false

# 客户端连接
vlc udp://@224.0.0.1:5004

3. 如果你坚持要GStreamer + RTSP且不编译

用简单的HTTP包装

# 启动GStreamer UDP流
gst-launch-1.0 v4l2src device=/dev/video0 ! \
  video/x-h264 ! h264parse ! rtph264pay ! \
  udpsink host=127.0.0.1 port=5004 sync=false &

# 用FFmpeg转成RTSP
ffmpeg -i udp://@127.0.0.1:5004 -c:v copy -f rtsp rtsp://0.0.0.0:8554/stream

结论

回答你的问题
– ❌ 不可以只安装gst-rtsp-server配合v4l2
– ✅ 必须安装GStreamer核心(gstreamer1 + 插件)
– ✅ gst-rtsp-server是可选的,只是提供了更方便的RTSP接口

最简单的低延时方案

# 只需要这些包
opkg install gstreamer1 gstreamer1-libs gstreamer1-plugins-base gstreamer1-plugins-good

# 直接运行(无需gst-rtsp-server)
gst-launch-1.0 -e v4l2src device=/dev/video0 ! \
  video/x-h264 ! h264parse ! rtph264pay ! \
  udpsink host=224.0.0.1 port=5004 sync=false

这样你就能获得比v4l2rtspserver更低的延时(30-50ms),而且安装更简单。

要试试这个方案吗?