首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C

请教一个数据传输问题

  •  
  •   axeojpwt · 2017-03-10 16:29:19 +08:00 · 669 次点击
    这是一个创建于 1004 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题背景

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

    当前完成的工作

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

    问题难点

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

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

    9 回复  |  直到 2017-03-13 09:38:07 +08:00
        1
    wevsty   2017-03-10 16:33:48 +08:00
    你传输介质是什么?
    如果传输介质能接受的最大速率低于 30M/S ,那基本上很难做到不丢数据。
    如果传输介质的最大速率没瓶颈,那就是你的协议实现有问题。
        2
    axeojpwt   2017-03-10 16:39:52 +08:00
    @wevsty client 和 server 在同一个局域网下,理论上应该是可以的,我在同一台电脑的两个虚拟机下面基本不会丢数据,但放到 Joule 和 PC 上,传输效率就很低。
        3
    wevsty   2017-03-10 17:29:14 +08:00
    @axeojpwt 估计还是 IO 吞吐量或者运行速度上有瓶颈导致的。只能建议优化程序看看。
        4
    hyq   2017-03-10 17:56:12 +08:00
    tcp 不会丢帧的,你可能需要把网络和采集分成两个线程
        5
    axeojpwt   2017-03-10 18:02:51 +08:00
    @hyq 这样是不是需要对采集数据端做缓存才行。
        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
    把数据压缩一下再传试试
        9
    axeojpwt   2017-03-13 09:38:07 +08:00
    @ryd994 是 30Bytes/s ,在 Joule 的板子上 CPU 应该是够用的,看来是需要先把数据压缩,然后再做缓存试试。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   955 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 41ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
    ♥ Do have faith in what you're doing.