2017-07-05 260 views
0

我通過Windows在UDP上成功傳輸文件(音頻/視頻)並在另一臺機器上使用VLC觀看它(this was covered on Stackoverflow before) :gst-launch-1.0無法通過UDP流式傳輸音頻/視頻並同時顯示在窗口

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測試:媒體>打開網絡流>網絡URL>UDP:// @:5000

但是,當視頻正在流式傳輸時,我還想在窗口上顯示它,所以我可以自己觀看流(不需要音頻)。爲了達到這個目的,我開始了一系列小實驗,這樣我就可以改變原來的管道而沒有任何意外。如果你正在閱讀這個問題,你知道我的計劃沒有那麼好。

我的第一個實驗是隻顯示在單一窗口中的視頻:

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打破了一切。

有關如何正確執行此操作的任何提示?

回答

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. 

這樣的數據之前,任何事情發生,而其他線程也加入,在這同一個時刻,承載數據流直接流向autovideosinkqueue和第二decodebin