Как использовать GStreamer для отправки и получения RTSP-фида на том же компьютере в Windows - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь отправить изображения Opencv по сети. Мне предложили использовать GStreamer для этой цели.

Я установил GStreamer и сейчас тестирую его на своем Windows 10.

Я могу отобразить тестовое видео с помощью следующей команды:

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

Теперь я пытаюсь отправить видео с использованием RTSP. Сейчас я хочу транслировать свой рабочий стол с помощью GStreamer и смотреть его в VL C. Для отправки видео я использую:

gst-launch-1.0 -v gdiscreencapsrc  ! queue  ! videoconvert !  video/x-raw,format=I420 ! jpegenc ! rtpjpegpay ! queue ! udpsink host=172.16.15.147 port=8554 

Для ответа:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
/GstPipeline:pipeline0/GstGDIScreenCapSrc:gdiscreencapsrc0.GstPad:src: caps = video/x-raw, format=(string)BGR, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, format=(string)BGR, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-raw, format=(string)BGR, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, format=(string)I420
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, format=(string)I420
/GstPipeline:pipeline0/GstJpegEnc:jpegenc0.GstPad:sink: caps = video/x-raw, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, format=(string)I420
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, format=(string)I420
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)BGR, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstJpegEnc:jpegenc0.GstPad:src: caps = image/jpeg, sof-marker=(int)0, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, payload=(int)26, ssrc=(uint)665894884, timestamp-offset=(uint)2085395382, seqnum-offset=(uint)6071
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, payload=(int)26, ssrc=(uint)665894884, timestamp-offset=(uint)2085395382, seqnum-offset=(uint)6071
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, payload=(int)26, ssrc=(uint)665894884, timestamp-offset=(uint)2085395382, seqnum-offset=(uint)6071
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, payload=(int)26, ssrc=(uint)665894884, timestamp-offset=(uint)2085395382, seqnum-offset=(uint)6071
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, payload=(int)26, ssrc=(uint)665894884, timestamp-offset=(uint)2085395382, seqnum-offset=(uint)6071
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0: timestamp = 2085395391
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0: seqnum = 6294

Но я не могу смотреть его на VL C, используя rtsp: //172.16. 15.147: 8554

Я даже пытался отправить его на 127.0.0.1:5000

Как узнать, что я даже отправляю пакет? Я попытался захватить пакеты на Wireshark, но это бесполезно.

Пожалуйста, предложите метод для отправки и получения потока с использованием GStreamer на том же P C.

1 Ответ

0 голосов
/ 27 февраля 2020

Короче говоря, вам нужен файл .sdp .

Это минимум, который ваш файл SDP должен содержать

v=<version>
c=IN IP4 <IP4 ADDRESS>
m=<media> <udp port> RTP/AVP <payload>
a=rtpmap:<payload> <encoding-name>/<clock-rate>

Я только что протестировал в потоке с камеры, которая у меня дома, и параметры которой очень похожи на ваши, вам просто нужно изменить IP-адрес:

v=0
c=IN IP4 192.168.1.188
m=video 5200 RTP/AVP 26
a=rtpmap:26 JPEG/90000

Тогда следующая команда будет работать

vlc stuff.sdp
...