首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTcpSocket高频写入减慢传输速率

QTcpSocket高频写入减慢传输速率
EN

Stack Overflow用户
提问于 2016-11-04 00:50:37
回答 1查看 734关注 0票数 1

我正在做一个流应用程序,我得到一个帧,将其编码到h264,然后通过tcp发送到客户端,然后客户端接收编码的帧,然后解码它的显示。我发现,当在很短的时间间隔内多次调用写方法时,传输速率会受到很大的影响。

间隔时间在12 ms到17 ms之间,这是抓取帧并对其进行编码所需的时间。在客户端,我正在计算从一个帧到另一个帧读取所需的时间。使用12/17 ms,到达客户的时间是400 ms。然而,如果我在写作中添加一个睡眠,从12/17 ms到150 ms,客户端的时间将减少到150 ms。

所以我试着发送一个帧,一旦客户端接收到它,它就发送一个确认,然后服务器获取下一个帧。该方法的潜伏期相同~150 ms。

我将数据分割成指定大小的块(目前使用512个字节),客户端接收这些块并组装它们,使用sha256我确认信息到达正确,帧大小从1200字节到65 to不等。所以我的结论是,如果你用大量的文字来强调套接字,传输速率就会受到影响,这是对的还是我可能做错了什么?

另外,150毫秒相当于6 fps,VNC和其他流媒体应用是如何做到这一点的?它们缓冲一些帧,然后播放它们?因此,会有一个延迟,但“经验”将是一个更高的帧率?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-11-04 15:00:35

TCP/IP协议栈可以自由地优化其行为以减少延迟和带宽。你并没有证明你缺乏带宽,只是你不太经常地被告知你想要的到达的数据--没有任何技术上的理由来证明这样的愿望。协议本身没有,没有,它保证数据将以任何特定大小的块到达接收端。

因此,假设您在一个write中在QIODevice上发送每个帧。接收端可以在一个或多个块中接收该数据,并且可以在任意延迟之后接收该数据。这正是你所看到的。

您发送的数据类型对性能没有影响:您应该能够为发送方创建一个10行的测试用例,为接收方创建一个类似大小的测试用例,并确认您确实收到了您想要的所有数据,只是它以比您错误预期的更大块的形式出现。这很好也很正常。要维护流,您应该在接收端预缓冲“足够”的数据量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40413645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档