请教一个数据传输问题

2017-03-10 16:29:19 +08:00
 axeojpwt

问题背景

我有一块 Intel Joule 570X 的物联网开发板,一个类似 RealSense 的深度摄像头,深度摄像头接到 Joule ( client 端)上采集深度数据,现在需要通过网络将采集到的深度数据传到其他客户端上,可以是 PC 上(server 端)。

当前完成的工作

我目前将采集到的深度数据按照每帧来传输,实现了 client 端和 server 端的代码,使用 tcp 传输数据,操作 client 端可以将一帧数据的深度值传到 server 端,目前实现了单帧数据传输,如果连续传数据会丢掉很多帧。

问题难点

深度摄像头采集数据的速度大概是 30M/S ,请问有什么好的方法将数据连续地从 client 端传递到 server 端,不能丢数据并保证数据的准确性。

请大家帮忙想想好的实现方法,谢谢。

2458 次点击
所在节点    C
9 条回复
wevsty
2017-03-10 16:33:48 +08:00
你传输介质是什么?
如果传输介质能接受的最大速率低于 30M/S ,那基本上很难做到不丢数据。
如果传输介质的最大速率没瓶颈,那就是你的协议实现有问题。
axeojpwt
2017-03-10 16:39:52 +08:00
@wevsty client 和 server 在同一个局域网下,理论上应该是可以的,我在同一台电脑的两个虚拟机下面基本不会丢数据,但放到 Joule 和 PC 上,传输效率就很低。
wevsty
2017-03-10 17:29:14 +08:00
@axeojpwt 估计还是 IO 吞吐量或者运行速度上有瓶颈导致的。只能建议优化程序看看。
hyq
2017-03-10 17:56:12 +08:00
tcp 不会丢帧的,你可能需要把网络和采集分成两个线程
axeojpwt
2017-03-10 18:02:51 +08:00
@hyq 这样是不是需要对采集数据端做缓存才行。
hyq
2017-03-10 18:28:27 +08:00
@axeojpwt #5 是的,得有一个比较大的缓冲区,将采集的数据放进来,网络线程从缓冲区取数据。只要网络的速度比较稳定(且大于采集速度),不让缓冲区爆了,就不会丢帧
ryd994
2017-03-11 08:22:29 +08:00
@axeojpwt 30Mbits/s 还是 30MBytes/s 你要搞清楚
毕竟百兆极限是 12.5MB/s 还不计协议开销
CPU 够用的话上 gzip ,低压缩参数效果一样很好,而且开销不大
而且网络上只有一条流么?如果多个摄像机还要分带宽
forestyuan
2017-03-11 20:29:46 +08:00
把数据压缩一下再传试试
axeojpwt
2017-03-13 09:38:07 +08:00
@ryd994 是 30Bytes/s ,在 Joule 的板子上 CPU 应该是够用的,看来是需要先把数据压缩,然后再做缓存试试。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/346491

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX