远程屏幕监控问题(请大家继续讨论)

jzuo 2004-08-11 04:38:01
以前讨论已经结贴,地址如下:
http://community.csdn.net/Expert/topic/3258/3258617.xml?temp=.8838617
---------------------------------------------
关于远程屏幕监控,我的大概思路是:
1.在本地定时截取屏幕,并将截取的屏幕分成多块,例如4×4 = 16块,分别对每一块进行传输。
2.定时截取了新的屏幕以后,对每一块图像进行新旧比较,如果发生改变则传输,反之则不传输,这样可以减少网络通讯的数据量,在屏幕长期不变动的情况下就不进行传输。
3.传输之前可以加入图像压缩算法,将图像压缩后再进行传输。

不知大家有什么比较好的思路,或者有现成的源码请发给我参考一下!
jzuo@vip.sina.com
多谢~
---------------------------------------------
changlele(梦幻水晶)

可以不用传送那么多数据的
利用祯比较算法,第一幅图设置为主祯
然后后面的图片和主祯进行比较,只传送变化的部分
关于帧比较算法我多说几句:
开始抓取第一个帧的时候设为主帧,然后抓取第二个帧。
第二个帧和第一个帧进行异或操作(矩阵)。然后去除
异或操作后矩阵内值为零的点(值为0的点就是没有变化
的点),然后传送这个矩阵中非零的点。这是帧比较算
法的大体思路。

传送的时候最好采用一些压缩算法。
无损压缩:哈夫曼算法
有损压缩:JPG,MPG都是很好的方法
---------------------------------------------


大家有什么想法欢迎讨论,或者有现成的源码请发给我参考一下!
jzuo@vip.sina.com
多谢~
...全文
255 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jpsr 2004-08-14
  • 打赏
  • 举报
回复
用DirectX吧,不知道可不可以,我刚才就发过帖子了,问了和这个有点关系的问题,一端用directx保存显存数据→比较缩小范围→lzw打包,一端接收 lzw展开→写入临时内存→写入离屏(我觉得这里复制到离屏比较好,否则可能会发生闪烁)→……→到主页面,另外主页面设置为 独占模式,256色速度是快了点,不过这个颜色真是 惨不忍睹…,我还是觉得既然监控, 就不能让别人知道吧?否则就叫 共享屏幕了,所以我觉得还是应该按照远程显示模式来传输比较好吧,另外,推荐用DirectX的原因是 GDI无法 截取DirectX环境下的画面,比如MediaPlayer播放时的画面…,不过听别人说,开2个MediaPlayer,然后隐藏一个,但是这个必须要一直播放,另外一个也一直播放,这样GDI就能截取到这个画面了。我觉得JPG方式不好,同样都是压缩,但是属于JPG有损画质,另外JPG也不能再用LZW进行压缩了。
ydzqw 2004-08-13
  • 打赏
  • 举报
回复
将数据送给DirectShow的compressor进行压缩(比如用DivX),再进行传送,数据量小
服务端用DirectShow进行显示,或保存(可存成avi)
changlele 2004-08-12
  • 打赏
  • 举报
回复
好的想法都说完了,还有什么说的,晕,要知道这样。我就把想说的分为2次说
这样能多赚些专家分

对了,刚才想到一点。如果用JPG方式的话,建议你传送的时候就不要每次都传送
Jpg的文件头等一些重复的数据了,只需传送JPG内容的那部分。开始时就把JPG头
都定义好,就传一个副本即可,毕竟网络传送传送的数据越少越好。这样性能能快点
jzuo 2004-08-12
  • 打赏
  • 举报
回复
没人回,自己顶一下,大家还有什么好想法一起讨论啊!!!!
jzuo 2004-08-11
  • 打赏
  • 举报
回复
to shootingstars(有容乃大,无欲则刚):驱动方面没有接触过,能不能有些更具体的想法?

to howtotell(从何谈起):很荣幸学习你的程序,我的信箱:jzuo@vip.sina.com,谢谢!

to changlele(梦幻水晶):呵呵,再开帖子因为一个帖子只能给100分,很多好想法,分太少了。
changlele 2004-08-11
  • 打赏
  • 举报
回复
怎么又开了一个帖子,晕
yturieo 2004-08-11
  • 打赏
  • 举报
回复
建议如下:
1,用LZW进行压缩。
2,先转换成256色。
howtotell 2004-08-11
  • 打赏
  • 举报
回复
用lzw压缩解压速度都很快.我曾进做利用vckbase上的lzw压缩程序做过一个远程控制程序,效果很不错,楼主需要请给我留言.
shootingstars 2004-08-11
  • 打赏
  • 举报
回复
其实使用驱动是最好的办法。

影响远程监控这类软件的最大的问题有几点:
1 截屏速度慢,一般都是使用BitBlt函数,还可以使用directx,但是已经被证实并不能提高多少效率。
2 截屏的时机不好选择,象winvnc使用的钩子方法,在某些情况下会实效(比如控制台程序)
3 如果采用分帧比较,传输差值的办法,比较两帧图片本身就是比较耗时的操作。

如果使用驱动,可以一次性解决上面的三个问题:
1 驱动传输速度会比BitBlt快很多。
2 只有在屏幕真正变化的时候才会传输数据。
3 可以精确的知道某块数据发生了变化,不再需要比较。

在Win2000下可以使用Mirror Driver


呵呵,新手,瞎扯几句。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧