我正在做一个流应用程序,我得到一个帧,将其编码到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和其他流媒体应用是如何做到这一点的?它们缓冲一些帧,然后播放它们?因此,会有一个延迟,但“经验”将是一个更高的帧率?
谢谢
发布于 2016-11-04 15:00:35
TCP/IP协议栈可以自由地优化其行为以减少延迟和带宽。你并没有证明你缺乏带宽,只是你不太经常地被告知你想要的到达的数据--没有任何技术上的理由来证明这样的愿望。协议本身没有,没有,它保证数据将以任何特定大小的块到达接收端。
因此,假设您在一个write
中在QIODevice
上发送每个帧。接收端可以在一个或多个块中接收该数据,并且可以在任意延迟之后接收该数据。这正是你所看到的。
您发送的数据类型对性能没有影响:您应该能够为发送方创建一个10行的测试用例,为接收方创建一个类似大小的测试用例,并确认您确实收到了您想要的所有数据,只是它以比您错误预期的更大块的形式出现。这很好也很正常。要维护流,您应该在接收端预缓冲“足够”的数据量。
https://stackoverflow.com/questions/40413645
复制相似问题