2011-08-08 194 views
0

我想用java編寫一個應用程序,讓兩個客戶端通過網絡攝像頭通話。它的工作方式是兩個客戶端連接到一個網絡攝像頭,該網絡攝像頭可以以指定的幀速率(每秒20個)拍攝照片,然後減小尺寸和分辨率,然後通過UDP數據包將其發送到另一個客戶端。我的問題是 - 我應該發送每個圖片在自己的數據報包嗎?我讀過他們最多隻能容納半千字節,所以每張圖片都應該減少多少?或者我應該把它分成幾個小包?通過UDP發送圖片

+0

UDP數據報可以傳輸高達64K。然而,根據你的低層2(以太網),這個數據報將被分割成許多IP分段。碎片化的數據包將在接收主機處匯回,但如果其中一個碎片丟失,則所有UDP數據包都將丟失。 – jfg956

回答

2

您確定要傳輸整個圖像,而不是使用僅傳輸需要更新的算法/編解碼器嗎?

如果您選擇第二個選項,您可以從this previous question以及已經使用和測試過的庫中獲得一些建議。如果我必須這樣做,我相信我會用VLC java bindings。您應評估什麼是您的特定用途(比特率,質量等)的最佳編解碼器。

如果你仍然想傳輸圖像,我建議你把它們分解成udp數據報,記住它們應該以某種方式編號/標記,以便客戶端可以重建圖像作爲數據包來(他們不一定會來以相同的順序發送它們),還需要考慮當某些數據包未能到達時丟棄圖像,請求以前的數據包等客戶端需要執行的操作。

最後一個思想,UDP報文最大尺寸未必是最好的選擇爲好,你的服務器 - 客戶端或許應該實現一個算法和協商UDP幀大小取決於傳輸速度。

0

你應該做的是編碼視頻流。離開網絡層,讓它爲你做分割。另外,如果你通過UDP發送視頻,你可能會想每隔2秒左右扔一個關鍵幀。

不要將每個幀作爲自己的圖像發送。使用視頻壓縮器。

+0

我應該從哪裏開始?我需要指出正確的方向。 –