2017-02-17 46 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