gst-launch-1.0无法通过UDP传输音频/视频并同时在窗口中显示

时间:2017-07-05 03:18:25

标签: audio video stream gstreamer gst-launch

我在Windows上通过UDP成功传输文件(音频/视频)并在另一台使用VLC(this was covered on Stackoverflow before)的计算机上观看:

gst-launch-1.0 -v filesrc location=video.mkv ! decodebin name=dec ! videoconvert ! x264enc ! video/x-h264 ! mpegtsmux name=mux ! queue ! udpsink host=127.0.0.1 port=5000 sync=true dec. ! queue ! audioconvert ! voaacenc ! audio/mpeg ! queue ! mux.

您可以在VLC上测试:媒体> 开放网络流> 网络网址>的 UDP:// @:5000

然而在视频流式传输时我想在窗口上显示,所以我可以自己观看视频流(无需音频)。< / p>

为了实现这一目标,我开始进行一系列小型实验,以便我可以毫不费力地更改原始管道。如果你正在阅读这个问题,你知道我的计划不能很好地运作。

我的第一个实验是在单个窗口上显示视频:

gst-launch-1.0 -v filesrc location=video.mkv ! decodebin ! autovideosink

然后,我将其更改为在2个窗口上显示相同的视频,以确保我理解如何使用多线程:

gst-launch-1.0 -v filesrc location=video.mkv ! decodebin name=dec ! queue ! tee name=t t. ! queue ! videoconvert ! autovideosink t. ! autovideosink

最后,它将这两个部分混合在一起,并在本地显示的同时通过网络传输视频。结果不是我所期望的,当然:只有第一帧似乎是流式传输然后一切都冻结了:

gst-launch-1.0 -v filesrc location=video.mkv ! decodebin name=dec ! tee name=t ! queue ! autovideosink t. ! queue ! videoconvert ! x264enc ! video/x-h264 ! mpegtsmux name=mux ! queue ! udpsink host=127.0.0.1 port=5000 sync=true dec. ! queue ! audioconvert ! voaacenc ! audio/mpeg ! queue ! mux.

似乎数据不再流经管道(由于某些原因我不知道),我尝试添加autovideosink会破坏所有内容。

有关如何正确执行此操作的任何提示?

1 个答案:

答案 0 :(得分:0)

分割数据的恰当时机就在filesrc

之后
gst-launch-1.0 -v filesrc location=video.mkv ! tee name=t ! queue ! decodebin ! autovideosink t. ! queue ! decodebin name=dec ! videoconvert ! x264enc ! video/x-h264 ! mpegtsmux name=mux ! queue ! udpsink host=127.0.0.1 port=5000 sync=true dec. ! queue ! audioconvert ! voaacenc ! audio/mpeg ! queue ! mux.

因此,在其他任何事情发生之前,数据直接流向autovideosink,而另一个线程也在同一时刻加入,将数据流传输到queue和第二个decodebin。 / p>