RTSP GStreamer UDP 流媒体 & 热像仪的延迟修复

使用 GStreamer 进行 RTSP 流媒体 – 真实客户问题&案例 (UDP 与 TCP)

本文记录了我们的关于 RTSP 流媒体的真实客户支持对话 热像仪 使用 GSTREAMER.
我们正在分享它 Q&对话框格式 以便其他面临类似问题的客户可以快速遵循故障排除流程.


1. RTSP流地址

顾客:
你好, 我们收到了您的热像仪, 一切正常, 谢谢, 但我们似乎找不到 RTSP 流的地址. 什么是 /stream/sub?

支持:
我们的摄像头 RTSP 流 URL 是:

rtsp://192.168.2.254:554/live

2. RTSP 延迟问题

顾客:
我们测试了 RTSP 流,发现与管理面板预览相比有相当大的延迟.

支持:
这是预期的行为. Web管理预览使用内部优化的管道, 而 RTSP 取决于网络条件和客户端缓冲.


3. UDP 流媒体要求

顾客:
RTSP 流也无法在我需要 UDP 的播放器上运行. 如何获取 UDP 流?

支持:
我可以知道你用的是什么播放器吗? VLC?

顾客:
我的播放器是集成在 Android 应用程序中的 GStreamer.


4. UDP 单播与 UDP 组播

支持:
如果 GStreamer 客户端使用以下方式访问设备 UDP多播, 这是目前 不支持.
我们需要澄清您是否正在使用 UDP单播 要么 UDP多播.

顾客:
我的 GStreamer 管道使用 rtspsrcudp 设置在 protocols 范围.
我没有使用 udp-mcast 价值, 所以应该是UDP单播.


5. 平台澄清

支持:
这个 GStreamer 是否在 Windows 上运行, Linux的, 或安卓?
我们的软件工程师想在我们这边进行测试.

顾客:
我的应用程序在 Android 上使用 GStreamer, 但 rtspsrc 也可以在Linux上测试.


6. 已知的 Linux GStreamer 问题 (参考案例)

支持:
我们在中文技术论坛上发现了类似的问题.

解决方案:
卸载以下插件:

sudo apt-get remove gstreamer1.0-plugins-ugly

该插件可能会发送一些相机无法识别的 RTSP 标头, 导致拒绝服务错误.

RTSP GStreamer UDP Streaming & Latency Fix for Thermal Cameras 1

参考:
https://forums.developer.nvidia.com/t/rtsp-gstreamer-simple-recieve-and-store-in-file/157535/14

您能否提供您的 rtspsrc 管道 (Linux首选)? 应用程序版本也可以用于测试.


7. RTSP DESCRIBE 标头兼容性

支持:
另一个可能的原因是,如果 RTSP 描述 请求不包含:

application/sdp

设备可能会拒绝服务.

这个验证逻辑可能过于严格, 我们计划在未来的固件更新中放宽此条件.


8. Android GStreamer 版本确认

顾客:
在安卓上, 我正在使用:

  • gstreamer-1.0-android-universal-1.26.8

它不包括丑陋的插件. 我的 Makefile 包含:

GSTREAMER_PLUGINS := \
    coreelements \
    playback \
    typefindfunctions \
    rtsp \
    rtp \
    rtpmanager \
    udp \
    tcp \
    videoparsersbad \
    androidmedia \
    opengl

9. 建议的 GStreamer 运行时参数

支持:
我们建议尝试 short-header=truertspsrc.

顾客:
这是 UDP 的标头吗?

支持:
它是一个 RTSP 标头选项,通常可以提高兼容性.

例子:

gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> short-header=true
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> do-rtcp=false short-header=true

10. 内部测试结果 (Linux的)

支持:
我们的工程师使用以下方法测试了 RTSP 流 GSTREAMER 1.0 在Linux上, 它工作正常.

GStream-1 test on linux
Linux 上的 GStream-1 测试
GStream-1 test on linux working well
GStream-1 在 Linux 上测试运行良好

TCP示例:

gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
  name=src \
  latency=0 \
  protocols=tcp \
src. \
  ! decodebin \
  ! autovideosink

UDP示例 (消除 protocols=tcp):

gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
  name=src \
  latency=0 \
src. \
  ! decodebin \
  ! autovideosink

Linux 和 Android GStreamer 内部逻辑是相同的, 因此跨平台的行为应该一致.


11. 结论

此案例强调了将 RTSP 与 GStreamer 结合使用时的几个要点:

  • RTSP 网址: rtsp://<camera_ip>:554/live
  • UDP 单播 支持; UDP 多播不是
  • 避免有问题的插件 (仅限Linux)
  • 尝试 short-header=true 为了更好的兼容性
  • Linux测试结果一般可以应用到Android上

如果您遇到类似问题, 请提供您的 GStreamer 管道或测试客户端, 我们的工程团队将进一步提供帮助.

问一个问题

← 返回

感谢您的回复。 ✨