问题背景
我有一块 Intel Joule 570X 的物联网开发板,一个类似 RealSense 的深度摄像头,深度摄像头接到 Joule ( client 端)上采集深度数据,现在需要通过网络将采集到的深度数据传到其他客户端上,可以是 PC 上(server 端)。
当前完成的工作
我目前将采集到的深度数据按照每帧来传输,实现了 client 端和 server 端的代码,使用 tcp 传输数据,操作 client 端可以将一帧数据的深度值传到 server 端,目前实现了单帧数据传输,如果连续传数据会丢掉很多帧。
问题难点
深度摄像头采集数据的速度大概是 30M/S ,请问有什么好的方法将数据连续地从 client 端传递到 server 端,不能丢数据并保证数据的准确性。
请大家帮忙想想好的实现方法,谢谢。
1
wevsty 2017-03-10 16:33:48 +08:00
你传输介质是什么?
如果传输介质能接受的最大速率低于 30M/S ,那基本上很难做到不丢数据。 如果传输介质的最大速率没瓶颈,那就是你的协议实现有问题。 |
2
axeojpwt OP @wevsty client 和 server 在同一个局域网下,理论上应该是可以的,我在同一台电脑的两个虚拟机下面基本不会丢数据,但放到 Joule 和 PC 上,传输效率就很低。
|
4
hyq 2017-03-10 17:56:12 +08:00
tcp 不会丢帧的,你可能需要把网络和采集分成两个线程
|
6
hyq 2017-03-10 18:28:27 +08:00
@axeojpwt #5 是的,得有一个比较大的缓冲区,将采集的数据放进来,网络线程从缓冲区取数据。只要网络的速度比较稳定(且大于采集速度),不让缓冲区爆了,就不会丢帧
|
7
ryd994 2017-03-11 08:22:29 +08:00 via Android
@axeojpwt 30Mbits/s 还是 30MBytes/s 你要搞清楚
毕竟百兆极限是 12.5MB/s 还不计协议开销 CPU 够用的话上 gzip ,低压缩参数效果一样很好,而且开销不大 而且网络上只有一条流么?如果多个摄像机还要分带宽 |
8
forestyuan 2017-03-11 20:29:46 +08:00
把数据压缩一下再传试试
|