2012-03-21 118 views
2

我已閱讀過有關grtreamer對rtp的支持,應該可以用gstreamer播放rtp流。Gstreamer液體rtp(MPEG2 TS)播放

我試過這個

GST_DEBUG="*:3" gst-launch-0.10 -v udpsrc buffer-size="5000" \ 
port=1234 multicast-group="239.0.0.17" \ 
caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" \ 
! .recv_rtp_sink_0 gstrtpbin ! rtpmp2tdepay \ 
! mpegtsdemux ! ffdec_h264 ! xvimagesink 

,我得到的視頻顯示,但完全不能觀看 - 元3秒鐘就有一個框架(和框架看起來並不正常的話)

不任何人都知道如何讓gstreamer播放MPEG2 TS中的rtp流?在這種格式下,我接收來自IPTV的衛星頻道,因此它應該很常見。

+0

不應該使用ffdec_mpeg2video而不是ffdec_h264? – wimh 2012-03-21 21:22:39

+0

不,我認爲mpeg2 ts只是一個容器,因爲ffdec_mpeg2video根本沒有返回任何圖片 – 10robinho 2012-03-22 02:06:37

回答

0

我已經設法解決這個問題:

gst-launch-0.10 -vm udpsrc port=1234 multicast-group=239.0.0.1 \ 
caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,payload=(int)96" \ 
! .recv_rtp_sink_0 gstrtpbin latency=800 ! rtpmp2tdepay \ 
! tsdemux ! ffdec_h264 ! xvimagesink 

和它的偉大工程。

感謝您的幫助!

0

你爲什麼在udpsrc上使用這樣一個小緩衝區?默認不好?還請檢查irc,mpegtsdemuxer是否存在一些問題。

+0

我嘗試了沒有任何緩衝區(默認)但沒有任何改變...也有更大的緩衝區沒有改變 - 可能是管道不是好。這是否意味着Gstreamer不能播放符合DVB-S(2)(或T)標準的數據流?我會盡力找到更多關於這方面的信息。 – 10robinho 2012-03-22 17:14:48

+0

@ 10robinho關於你最後一個問題,我已經成功地播放dvb-s流,但他們是udp。我不知道使用rtp傳輸dvb-ts的設備。 – wimh 2012-03-22 20:46:36

+0

@Wimmel - 你能告訴我你的管道嗎?這就是我如何從組播網絡獲取流。 – 10robinho 2012-03-22 20:51:41

0

下面是一個例子,我可以從多播,多重節目傳輸流播放DVB-S(MPEG2)視頻:

gst-launch -v udpsrc port=1234 multicast-group="239.255.219.99" ! queue2 ! mpegtsdemux program-number=2004 ! queue2 ! ffdec_mpeg2video ! autovideosink 

如果我不前,tsdemux後加隊列的,我如你所描述的那樣得到類似的問題,所以這可能也是你的問題。

+0

我已經設法通過交換udp流模擬您的環境。 'gst-launch-0.10 -v udpsrc port = 1234 multicast-group =「239.0.0.1」!隊列2! mpegtsdemux program-number = 101!隊列2! ffdec_mpeg2video! autovideosink',其中program-number = 101是PID(視頻流ID)。我沒有設法得到任何圖片,這裏是輸出[鏈接](http://pastebin.com/TfRrWf5X)。它說'默認gstutils.c:2037:gst_element_link_pads_filtered:無法連接pad:mpegtsdemux0 :(空) - queue0:(null)' – 10robinho 2012-03-23 15:38:40

+0

如果我不使用程序編號= 101,gstreamer設法連接pad,但是我得到一堆'mpegtsdemux gstmpegtsdemux.c:1289:gst_mpegts_demux_data_cb:看起來好像我們有一個損壞的數據包,因爲它的時間戳是錯誤的時間戳:3:05:34.937022222與上次時間戳相比:0:00:00.008904441'和類似的錯誤 – 10robinho 2012-03-23 16:41:36

+0

你可能有rtp。然後,您應該修改原始命令以在mpegtsdemux之前和之後包含隊列2。但如果這沒有幫助,我不能幫你。 – wimh 2012-03-23 17:15:42