2011-07-07 57 views
1

我寫類似StreamMyGame與客戶端是免費的,更重要的是,開源的差異的程序,所以我可以將它移植到其它設備(在我的情況OpenPandora),甚至可以製作HTML5或Flash客戶端。如何流實時音頻和視頻,同時保持低時延

由於該程序的目標是流式傳輸視頻遊戲,所以延遲應該降至最小

現在我可以以固定的幀速率捕捉Direct 3D 9遊戲的視頻,使用libx264對其進行編碼並將其轉儲到磁盤並遠程發送輸入,但我很難發送視頻並最終通過音頻網絡。

我不想實施方式只是發現它引入了延遲幾秒鐘,我不在乎它是如何,只要它所做的一切。

把我的頭,我能想到幾種方法:

  • 我現在的方式,進行視頻編碼libx264和音頻瘸或AC3與LIVE555作爲RTSP飼料給他們,雖然庫對MSVC不夠好,我仍然試圖瞭解它的功能。

  • 有ffmpeg的圖書館做所有繁重的工作,它編碼併發送(我想我將不得不使用ffserver的獲得關於如何做到這一點的想法)

  • 相同,但使用libvlc,也許會傷害編碼過程中的可配置性。

  • 使用多個管道與獨立程序(即:管道數據x264.exe或ffmpeg.exe)

  • 使用其它文庫如pjsipJRTPLIB可能簡化這個過程。

  • 困難的方法是通過UDP通道發送視頻和音頻,並確定如何同步客戶端的所有內容(儘管使用RTSP的原因是爲了避免這種情況)。

  • 你的方式,如果我沒有想到的東西。

第二種選擇真的是最好的,因爲它會降低庫的數量(集成swscale,libx264,音頻編解碼器和發送器庫),簡化了開發和帶來更多的編解碼器品種(CELT看起來很有希望),但我擔心延遲,因爲它可能有更長的管道。

100毫秒就已經太多了,尤其是當你考慮你可能會增加延遲的另一個150毫秒當它被用來槽寬帶。

請問您有任何的使用這些庫的經驗,建議我改用的ffmpeg,不斷摔跤LIVE555或做其他任何事情(即使我沒有提到它)?

回答

0

我有流大塊數據的使用UDT4庫低延遲的效果非常好。但首先我會建議檢查ffmpegs網絡功能,以便在所有操作中都有本地解決方案。

+0

如果我需要一個可靠的連接,那個庫也會很有趣,但我不這樣做。這只是視頻,如果我跳過幾個字節或整個幀,幀將看起來扭曲或一個短序列,直到最壞的下一個關鍵幀。 ffserver看起來可以符合法案,但源代碼中的註釋顯示,即使開發人員對自己的代碼不太自信,這也讓我有點疲倦。 你對後者有關於延遲的經驗嗎? –

+0

UDT4是一個可靠的傳輸保證交付庫,不知道你從哪裏得到 – Ulterior

+0

對不起,如果我編輯太慢(我打不小心進入)或不清楚。我不需要可靠性,這就是爲什麼原始UDP可以工作的原因。 雖然,如果我去UDP,我可能會最終使用它,因爲我會欣賞包重新排序功能和使用簡單。 –