2009-12-05 290 views
8

我想創建一個Qt小部件,它可以播放傳入的RTP流,視頻編碼爲H264並且不包含音頻。使用Qt播放RTP視頻流?

我實施的基本計劃是這樣的:

  • 創建聲子MediaSource對象(流類型)。
  • QIODevice子類提供數據
  • 使用獲取視頻數據連接,要麼:
    • JRTPLIB客戶端庫
    • GStreamergstrtpbin插件。這個插件負責卸載軟件包並解碼視頻。也許這提高了Phonon將識別數據的可能性。

我的環境:

  • Ubuntu 9.10的
  • 的Qt 4.6

我的問題:

  • 是我的做法是好的?也許我忽略了一個更明顯或簡單的解決方案?
  • 我目前遇到這個問題:當試圖播放視頻流時,MediaObject的狀態變爲ErrorState,帶有errorType FatalError。誰能告訴我我做錯了什麼?

編輯
一個解決方案,我發現在使用組合與libVLC Qt的,我瞭解了這個thread。這裏有一個感興趣的code sample。 我仍在尋找一種基於Phonon的解決方案。
理想情況下,我只需要提供SDP文件並完成作業。

回答

3

我能夠使用libVLC解決方案使其工作。我不能指望這是最好的解決方案,雖然我只是停止照顧。

這裏是link to the libVLC sample

+0

它看起來像你把這個文件關閉了。再次發佈代碼的任何機會,或者它已經失去了時間? – Narcolei 2012-01-02 20:04:35

+1

謝謝你讓我知道。修復了網址。 – StackedCrooked 2012-01-02 20:13:18

+0

@StackedCrooked無論如何從IP Cam使用文件流? – 2014-01-29 06:16:06

2

我理解Phonon的方式至少在Windows中的工作原理是,QT爲DirectShow(\ plugins \ phonon_backend \ phonon_ds94.dll)和GStreamer提供了一個phonon後端插件。然後,您將獲得或編寫您自己的可以接受RTP流作爲源的DirectShow過濾器。 DirectShow負責解碼,Phonon會負責渲染。

因此,如果後端的工作,在應用程序代碼很簡單,只要:

 Phonon::MediaObject *media = new Phonon::MediaObject(); 
     Phonon::VideoWidget *video = new Phonon::VideoWidget(); 
     Phonon::createPath(media, video); 
     media->setCurrentSource(source); 
     media->play(); 

看來,問題出在GStreamer的後臺接受RTP作爲源。你可以在獨立的GStreamer中播放該源碼嗎?

+0

我還沒有設法使它工作。播放本地文件是可行的,但是當我嘗試加載RTP流時(通過讀取RTP數據包的MediaSource(QIODevice)對象),VideoPlayer保持在LoadingState中。 現在我正在嘗試另一種方法:我使用GStreamer的gstrtpbin插件來讀取傳入的RTP數據,解碼視頻流並以某種方式將它連接到Qt小部件。 – StackedCrooked 2009-12-07 20:50:59