我有一个第三方应用程序,它从热摄像机读取数据,并生成RTP流到给定的UDP源。我试图将这个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
发布于 2022-03-10 20:45:07
这可能是在VLC中缺乏对J2K的支持(我使用的是3.0.80-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 "
使用X在Linux上工作,使用:
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。更熟练的人可能会提出进一步的建议。
https://stackoverflow.com/questions/71417704
复制相似问题