使用 gstreamer 将 RTP 转换为 RTSP

Transform RTP into RTSP with gstreamer

我有一个第三方应用程序,它从热像仪读取数据并生成到给定 UDP 源的 RTP 流。我正在尝试将此 RTP 包装到 RTSP 流中,但我 运行 遇到了问题...

第三方应用基本上是用这个命令运行gstreamer

appsrc format=GST_FORMAT_TIME is-live=true block=true caps=video/x-raw,width=640,height=480,format=GRAY8,clock-rate=90000,framerate=10/1 ! openjpegenc ! rtpj2kpay ! udpsink host=127.0.0.1 port=3000

使用下面的命令我可以在我的机器上可视化流

gst-launch-1.0 udpsrc port=3000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG2000, sampling=(string)GRAYSCALE, width=(int)640, height=(int)480, payload=(int)96" ! queue ! rtpj2kdepay ! openjpegdec ! videoconvert ! xvimagesink

然而,当尝试使用默认的 RTP 到 RTSP 应用程序示例时,使用 https://github.com/freedesktop/gstreamer-gst-rtsp-server/blob/master/examples/test-launch.c 仅使用 RTSP 容器转发它时,VLC 连接失败。命令如下:

./rtp-src-to-rtsp '( udpsrc port=3000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG2000, sampling=(string)GRAYSCALE, width=(int)640, height=(int)480, payload=(int)96" ! queue ! rtpj2kdepay ! rtpj2kpay )'

我做错了什么? VLC 仅给出非描述性错误

live555 error: Nothing to play for rtsp://{IP}:{PORT}/test

可能是 VLC 不支持 J2K(我使用的是 3.0.8-0 版本)。 模拟您的来源:

gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480,framerate=10/1,format=GRAY8 ! openjpegenc ! rtpj2kpay ! udpsink host=127.0.0.1 port=3000

并作为 RSTP 中继:

./test-launch "udpsrc port=3000 auto-multicast=0 ! application/x-rtp,encoding-name=JPEG2000,sampling=GRAYSCALE ! queue ! rtpj2kdepay ! image/x-jpc ! jpeg2000parse ! rtpj2kpay name=pay0 "

在 Linux 上使用 X 使用:

gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8554/test ! application/x-rtp, encoding-name=JPEG2000,sampling=GRAYSCALE ! rtpj2kdepay ! jpeg2000parse ! openjpegdec ! videoconvert ! xvimagesink -v

不过,我无法使用 VLC 接收,也无法为 VLC 或 ffmpeg 制作正确的 J2K/RTP SDP。更熟练的人可能会进一步建议。