具有udpsrc的GStreamer管道显示并保存到文件

时间:2019-12-10 17:53:08

标签: gstreamer gstreamer-1.0

我很难理解如何构建gstreamer管道。我已经在Google和stackoverflow上阅读了许多与我的问题非常相似的问题,但是大多数问题都以为我知道我在做什么,而事实并非如此。

我正在阅读文档,但是阅读文档并生成有效的管道似乎是完全不同的事情,而我的失败了。

我正在使用gst-launch-1.0发送此管道:

gst-launch-1.0 videotestsrc  ! video/x-raw,width=640,height=480 ! \
    videoconvert ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5600

并且我正在尝试使用gst_parse_launch通过以下管道在C应用程序中显示和记录管道:

udpsrc port=5600 ! application/x-rtp, clock-rate=90000,payload=96 \
  ! rtph264depay ! video/x-h264 ! queue ! h264parse !
    tee name=qgc
    qgc. ! queue ! decodebin ! glupload ! glcolorconvert ! qmlglsink name=sink
    qgc. ! queue ! mp4mux ! filesink location=bleh.mp4

此管道可以正确显示视频,但生成的文件在磁盘中完全为空。

由于Gstreamer存在很多非常相似的问题,因此我想提出一些问题,以帮助我以后不再问这个问题。

0-管道是否正确编写?发球区的参考有点奇怪,我不确定我是否正确使用它们。

1-如何发现管道中的问题?是否可以使用任何类型的调试器来粘贴管道并让pipeline compiler告诉我是否一切正常-或者至少我创建的管道中存在明显的缺陷(例如缺少大写字母或不兼容)端口)

2-如何解决该管道问题,以接收视频(正确播放)并将其保存在磁盘中?我很确定这很简单,但是我没有弄清楚。

针对类似问题的其他答案大部分是删除可在用户的ccomputer上运行的管道,而在旧版本的gstreamer中,该管道今天不再可用。 抱歉,我的文字太长了。

圣诞节快乐。

3 个答案:

答案 0 :(得分:1)

the documentation开始,mp4mux需要一个EOF才能正确完成文件,您可以使用gst-launch-1.0 -e udpsrc port=5600 ! ...强制EOF

以下是不带tee / qmlsink管道的示例:

gst-launch-1.0 -e udpsrc port=5600 ! application/x-rtp, clock-rate=90000,payload=96 \
! rtph264depay ! video/x-h264 ! queue ! h264parse ! queue ! mp4mux ! filesink location=bleh.mp4

您也可以在C中使用此代码强制EOF:

        gst_element_send_event(pipeline, gst_event_new_eos())

答案 1 :(得分:0)

答案 2 :(得分:0)

HOST=192.168.31.175

发件人:

gst-launch-1.0 -v videotestsrc ! x264enc ! rtph264pay ! udpsink port=5000 host=$HOST

接收器(同时显示和记录):

gst-launch-1.0 -v udpsrc port=5000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \
! rtph264depay ! h264parse \
! tee name=t \
t. ! queue ! mp4mux ! filesink location=xyz.mp4 -e \
t. ! queue leaky=1 ! decodebin ! videoconvert ! autovideosink sync=false

注意:

  1. filesink location=xyz.mp4 -e中的-e(EOS信号):用于保存文件的管道需要可靠的EOS(流结束)信号
  2. queue leaky=1sync=false:使渲染队列不阻塞