我的C#代碼中有30FPS的視頻幀,我想在本地主機上廣播它,以便所有其他應用程序都可以使用它。我雖然是因爲它是一個視頻,並且沒有任何問題,如果任何數據包丟失,並且不需要連接/從客戶端接受,UDP是一個不錯的選擇。通過套接字傳輸視頻的幀
但這裏有很多問題。
- 如果我使用UDP單播的速度是不夠的,大約25FPS(CPU使用率是25% 是在我的4核CPU的一個線程是指100%,這是不理想,但 至少它發送足夠的一套數據)。但單播不能向所有客戶端發送數據 。
- 如果我用廣播速度很低。大約10FPS具有相同的CPU使用率。
我該怎麼辦?數據在同一臺計算機中,因此不需要從局域網等進行遠程訪問。我只是希望在同一臺機器的不同應用程序之間每秒鐘傳輸大約30MBytes的數據。 (640x480是固定大小的圖像×30fps×3byte每像素約爲27000KByte每秒)
- UDP Multicast是否有更好的性能?
- 即使我接受每個客戶端 並單獨發送給他們,TCP是否可以給我更好的性能?
- 有沒有比Socket更好的方法?記憶共享什麼的?!
- 爲什麼UDP廣播很慢?!只有約10MBy每 秒?!
- 是否有一種快速壓縮具有高性能幀的方法(至 每秒編碼30fps並在其他部分解碼)?客戶端應用程序在 C++中,所以這必須是跨平臺的方式。
我只想知道其他開發人員的經驗和想法,所以請寫下您的想法。 感謝您的幫助。
編輯:有關數據
更多信息:數據是位圖格式RGB24,他們是從設備分流到我的30FPS的應用程序。我想將這些數據廣播給其他應用程序,並且他們需要再次以RGB24格式顯示此圖像。沒有標題或任何東西,只有固定大小的位圖數據。所有操作必須在飛行中執行。無論使用有損壓縮算法還是任何事物。
是有一些原因的許多現有的視頻流的協議之一是不合適的,以及爲什麼使用許多視頻流媒體解決方案的一個都不行?這是一個已經通過多種不同方式解決的問題。當然,其中一種方法應該能夠滿足您的需求,而不需要您重新發明輪子。 – Pete 2013-02-18 17:38:08
@Pete,你知道任何基於UDP的跨平臺(.Net,C++)視頻流媒體庫嗎?!不幸的是我找不到一個。因爲在沒有庫的情況下實現這些協議之一併不容易,因此發明整個解決方案並不容易 – 2013-02-18 17:47:03
查看FFMPEG – Pete 2013-02-18 17:50:34