+ -
当前位置:首页 → 问答吧 → 通过TCP Socket发送图片,然后显示出来,为什么一顿一顿的?

通过TCP Socket发送图片,然后显示出来,为什么一顿一顿的?

时间:2011-12-06

来源:互联网

RT。 

通过TCP Socket发送48张连续图片,这些图片我是从一个小视屏一帧一帧截下来的。然后在接收端,我用GDI+的 OleLoadPicture函数获取接受到的内存内容,用render方法显示出来。整个过程都能显示出来,但是为什么一顿一顿的呢。不流畅。有一段超级快,就像快播一样,然后就卡一下,卡个好几秒钟,然后又快速的显示完。

那么,请教怎么控制传输的速度,怎么解决这个问题。

作者: tw7613781   发布时间: 2011-12-06

双缓冲?

作者: yynetsdk   发布时间: 2011-12-06

你先看一下接收的速率,排查一下是不是socket的问题,然后再定位是不是GDI+的问题..

作者: xiaoxiaoyu85   发布时间: 2011-12-06

引用 2 楼 xiaoxiaoyu85 的回复:

你先看一下接收的速率,排查一下是不是socket的问题,然后再定位是不是GDI+的问题..


我实时监控我接受的数据量,当图片在走的时候,下行速度可以达到378kbps,但是卡住的时候,下行速度就是几kbps,这是我其他软件的消耗。所以应该不是GDI+的问题,这是接收不到图片的原因吧。然后我尝试在发送端每发送一次,Sleep(20),线程暂停20ms,但是除了显示的速率慢了,该卡还是卡。

这样是不是可以说就是socket的问题呢。

作者: tw7613781   发布时间: 2011-12-06

引用 1 楼 yynetsdk 的回复:

双缓冲?


怎么缓?

作者: tw7613781   发布时间: 2011-12-06

多线程,显示时不能停止接收

作者: yayafu   发布时间: 2011-12-06

该回复于2011-12-06 16:39:03被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#7楼 得分:0回复于:2011-12-06 23:58:54
你没有做缓冲处理,当然不行。

首先,你先定义缓冲时间,比如500毫秒。也就是说,从A点到B点,至少要经过500毫秒的缓冲。然后你需要在每一帧图像上打时间戳。

B点收到图像,也不着急显示,而是要等到其从缓冲区弹出。你最好定义一个传输窗口,这个窗口大小为小于500毫秒的数据,数据不必按照顺序传输,而是在窗口内的帧都可以传输,接收也不分先后,到了B点再排序,如果某帧错过了时间窗口,就不必传了。

也就是说,在你的显示端和采集端之间存在一个缓冲区间,这样才能平滑地显示。

作者: sunnyorange   发布时间: 2011-12-06