搜索
bottom↓
回复: 14

socket编程图片流延时问题

[复制链接]

出25入84汤圆

发表于 2019-9-5 09:20:46 | 显示全部楼层 |阅读模式
本帖最后由 chun2495 于 2019-9-5 16:52 编辑

主机端:接wifi芯片,建立一个服务器,将图片流(500*400大小,大概每秒10帧左右)传输出去。
客户端:iphone App采用socket通讯(GCDAsyncSocket),和主机绑定,并接受图片数据实时显示。
问题:主机发送图片流到客户端接受延时非常厉害,有好几秒钟。而且主机端停止发送了,客户端还有好多张图片没有接收到。直到主机再次发送时,上一次的图片才会传输给客户端。采用的是tcp通信协议。
有没有人遇到过这种问题,解决思路是什么呢?

已解决,见7楼!感谢大家帮忙。

出0入0汤圆

发表于 2019-9-5 09:57:52 | 显示全部楼层
这说明线路不好,或者速度匹配不好,tcp发生了壅塞控制,自动流控了,很大可能是软件没写好

出25入84汤圆

 楼主| 发表于 2019-9-5 13:54:42 | 显示全部楼层
myxiaonia 发表于 2019-9-5 09:57
这说明线路不好,或者速度匹配不好,tcp发生了壅塞控制,自动流控了,很大可能是软件没写好 ...

对,是这样的。早上测试了下,发现确实是数据拥塞在一起了。
我的流程是这样的

1. 读取一段socket数据。
2. 将数据进行解压。(应该是这里的解压速度慢导致的)
3. 解压的数据转换成图片进行显示。
4. 继续进行步骤1。

请问下,数据都需要解压才能进行显示,那么该怎么设计程序才能保证流畅的显示呢?

出10入61汤圆

发表于 2019-9-5 14:23:08 | 显示全部楼层
网络接收数据用单独一个线程,用另一个线程解压显示

出0入0汤圆

发表于 2019-9-5 14:26:52 | 显示全部楼层
chun2495 发表于 2019-9-5 13:54
对,是这样的。早上测试了下,发现确实是数据拥塞在一起了。
我的流程是这样的

我回答不上来啊,socket能不能自动感知到对方忙呢,是不是接收窗口改小有效果,或者开另一个socket作为控制

出25入84汤圆

 楼主| 发表于 2019-9-5 14:50:35 | 显示全部楼层
tcm123 发表于 2019-9-5 14:23
网络接收数据用单独一个线程,用另一个线程解压显示

那么两个线程之间工作怎么协调?
现在是socket接收快,但是处理速度慢,处理完了要显示,然后再去读socket的缓存,但是读到的数据实际上是几秒钟前的数据了,还是会显示严重滞后。

出0入8汤圆

发表于 2019-9-5 14:59:45 来自手机 | 显示全部楼层
chun2495 发表于 2019-9-5 13:54
对,是这样的。早上测试了下,发现确实是数据拥塞在一起了。
我的流程是这样的


解压慢于传输,你只能丢弃一些图片的显示

出10入61汤圆

发表于 2019-9-5 15:59:31 | 显示全部楼层
chun2495 发表于 2019-9-5 14:50
那么两个线程之间工作怎么协调?
现在是socket接收快,但是处理速度慢,处理完了要显示,然后再去读socke ...

SOKCET接收数据里直接解压显示,就类似于单片机中断里作长时间的任务一样,显示是不合理的。SOCKET底层虽然有缓冲但一样很快满了

测量下压缩所用时间,太慢就换算法优化

出0入0汤圆

发表于 2019-9-5 16:02:19 | 显示全部楼层
chun2495 发表于 2019-9-5 14:50
那么两个线程之间工作怎么协调?
现在是socket接收快,但是处理速度慢,处理完了要显示,然后再去读socke ...

2个线程 一个线程显示  一个线程用于socket 接收。   socket 只管接收数据然后放入 FIFO.   显示线程只管从FIFO拿数据 然后解压显示。  

出25入84汤圆

 楼主| 发表于 2019-9-5 16:49:03 | 显示全部楼层
canspider 发表于 2019-9-5 14:59
解压慢于传输,你只能丢弃一些图片的显示

一语点醒梦中人!
这么简单的道理我怎么没想到呢。
图片流显示的慢那就抽帧显示。要想显示完,要么优化算法,要么显示滞后。

太感谢你了。

出25入84汤圆

 楼主| 发表于 2019-9-5 16:50:28 | 显示全部楼层
tcm123 发表于 2019-9-5 15:59
SOKCET接收数据里直接解压显示,就类似于单片机中断里作长时间的任务一样,显示是不合理的。SOCKET底层虽 ...

嗯,算法这块已经很难优化了,我采用楼上给的建议,抽帧显示。
感谢通讯猫的回复,我一直在用你的软件。

出25入84汤圆

 楼主| 发表于 2019-9-5 16:51:23 | 显示全部楼层
浮华一生 发表于 2019-9-5 16:02
2个线程 一个线程显示  一个线程用于socket 接收。   socket 只管接收数据然后放入 FIFO.   显示线程只管 ...

我的算法解压数据太慢,所以这样显示出来的图像流会很滞后。

出0入0汤圆

发表于 2019-9-5 16:53:48 | 显示全部楼层
用应答模式

出0入0汤圆

发表于 2019-9-5 17:49:30 | 显示全部楼层
chun2495 发表于 2019-9-5 16:51
我的算法解压数据太慢,所以这样显示出来的图像流会很滞后。

显示滞后那就只能优化算法了  抽帧的话  就看有没有突兀的感觉了  

出25入84汤圆

 楼主| 发表于 2019-9-5 17:56:16 | 显示全部楼层
浮华一生 发表于 2019-9-5 17:49
显示滞后那就只能优化算法了  抽帧的话  就看有没有突兀的感觉了

发送大概十几帧,接收显示也就几帧。是损失挺大的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 23:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表