2017-02-17 47 views
0

我正在開發一個Unity3D(C#)Android應用程序,它可以捕獲攝像機中的幀(〜30fps)並將它們發送到網絡上的計算機。然後計算機接收的幀將用基於OpenCV的程序(C++)處理。我設法實現這個使用UDP套接字(也嘗試過TCP,但有些幀有時會丟失)。後來,我發現某些網絡出於安全原因(如我公司內部)停止UDP數據包,所以我想通過創建不同的接口來概括通信,例如,通過HTTP POST。這有意義嗎?我對HTTP請求沒有太多經驗,我在徘徊,不管這種方法是否類似於TCP套接字的情況,那是不成功的。通過網絡實時JPG幀流式傳輸

有沒有其他的通信方式可以保證像UDP一樣的性能,但通過使通信達到更高的水平?

回答

0

有兩種類型的套接字協議:TCP和UDP。 HTTP是在通過TCP套接字接收的數據上運行的應用程序協議。所以你不能用HTTP替換TCP或UDP。您將使用HTTP或TCP或UDP套接字。

現在有一些令人不安的事情...... TCP套接字是迄今爲止更可靠。使用TCP時幀丟失沒有任何意義,因爲TCP本質上保證您將獲取所有數據。

另一方面,使用UDP,你會經常發現許多數據包被丟棄。其實,對於視頻流來說,這不是一件完全不好的事情。對於視頻流,您希望儘可能減少延遲。 TCP必須做很多錯誤檢查以確保你的數據包不會被丟棄,所以TCP比UDP慢得多。因此,對於視頻流,您通常會使用UDP。

在任何情況下,流式視頻庫都比用UDP和jpeg框架實現自己的效率要高得多。我建議你搜索一個能夠滿足你的平臺和語言需求的程序。

+0

感謝您的回覆。我的意思是UDP與HTTP的意思是,如何以高速率從低級別(如UDP)轉換爲高級別(如HTTP),同時保持良好的速率性能。走向更高層次的原因是獨立於阻塞的UDP網絡等問題。在我的具體情況中,我希望堅持一個接一個地播放單幀,而不是視頻流。正如我上面所寫的,我在設備上使用C#,並且可以在接收幀的服務器上使用任何語言(例如C#,C/C++,Java,Python)。 – Poiex

+1

如果您不能使用UDP套接字,那麼您將使用TCP套接字。除此之外,沒有必要使用HTTP,除非你真的想。無論如何,哪個流媒體協議是最好的,完全是另一個問題。你應該谷歌周圍的東西,像「開源視頻流協議」,看看哪一個最適合你的需求,但我相信大多數解決方案將使用UDP套接字。 –

+0

好的。我將嘗試使用TCP查找此問題的解決方法。 – Poiex