网络,图象高手请进(15分)

  • 主题发起人 主题发起人 delphifans_hx
  • 开始时间 开始时间
D

delphifans_hx

Unregistered / Unconfirmed
GUEST, unregistred user!
本人做了一个网络偷屏软件,想进一步发展:
整天闭门造车,终不得解
1 客户,服务器端均由Delphi作成,均用Socket API和线程
2 传输的是JPEG图象
由于图象不流淌,(卡通样),特求教于大富翁:
我想:
A。 服务器端用C + API
B. 用MPEG 编码解码, 传输MPEG图形(图象)是否快些
C。 引入生产者,消费者模型,边存边取
请各位高手发表评论,或提供资料
下载: http://pascalhome.51.net/netscr.rar
选版本最高的一个就行了, 如果大家认为有病毒(本人没那能力)
自己编译好了
 
大富翁有没有高手呀!
 
灌水的哪去了?????????????
 
我刚才改了名字了

http;//pascalhome.51.net/netscr.zip
http;//pascalhome.51.net/netscr.zip
http;//pascalhome.51.net/netscr.zip
 
我也想做一个可以看对方屏幕,同时能够操作对方计算机的老鼠等的软件,不过想用Bitblt
肯定不行,正在看DX,看能否快乐,想用TUDP那个控件来做,给点建议或交流交流
QQ:25750017
 
将屏幕分成多块,一块一块传(要压缩),传之前判断是否发生变化!

判断两个图像是否相同的方法有很多,用xor最方便,最好用SSE指令优化一下。

建议传输放在多个线程中。
 
->B. 用MPEG 编码解码, 传输MPEG图形(图象)是否快些
我想如果你是实时捕捉并传输,这个可能是不行的,因为mpeg是一种不对称编码算法,它在编码时
的速度要比解码慢的多,这样就会使被控机的速度狂降。
我看还是用内存流在内存中处理(压缩)后再传输,
 
果然有病毒。呵呵
不过已经杀掉了 :)
你上传前,先查下毒吧。
 
to wzca兄
真不好意思,我也不知道回这样
提点意见—》
 
bitblt 也可以,用流压缩构件将Bmp流压缩,然后传送,
TUDP不错, 每个包控制在2K以内, 一个BMP压缩流发送完成后,再发一个确认完成包,
监视端每收到一个数据包时检测一上是不是确认完成包,如果不是的话将数据流解压缩,
存储在A内存流里,当收到确认完成包的时候将图像A显示,
如果做的好的话每秒钟能达到三四屏以上,延时可以在一秒钟之内。

流压缩在被监视端不会产生停顿,
而Jpg压缩的时候会产生停顿。
 
流传送, 没试过
大虾,贴段代码呀!
 
见鬼,为什么我的机器上用BitBlt放到Bmp中才花0ms啊,用GetTickCount做的取的啊,
然而用DX却比这花销还大,要197ms啊,为什么?
 
在LAN內用UDP比較好…
請教一下各位大蝦在WAN用UDP好啊?還是用TCP好?
 
很好, 帖主up
 
发送大概是这样。

var
bmp :Tbitmap;
buf1 :array[0..2046] of char;
StreamSize :Integer;
MsgStream :TMemoryStream;
begin
MsgStream:=TMemoryStream.Create;
bmp :=Tbitmap.Create;
BitBlt(bmp.canvas.handle,0, 0, Screen.Width, Screen.Height,GetWindowDC(0);, 0, 0,SrcCopy);
bmp.SaveToStream(MsgStream);
StreamSize := nStream.Size;
MsgStream.ReadBuffer(buf1, 2047);
for i := 1 to streamsize div 2047 do
begin
MsgStream.ReadBuffer(buf1, 2047);
Application.ProcessMessages;
NMUDP1.SendBuffer(buf1, 2047);
end;
if (streamsize mod 2047) > 0 then
begin
MsgStream.ReadBuffer(buf1, StreamSize mod 2047);
NMUDP1.SendBuffer (buf1, StreamSize mod 2047);
end;
StrPcopy(buf1,'Finish,StreamSize='+InttoStr(StreamSize));
NMUDP2.SendBuffer(buf1,Length('Finish,StreamSize='+InttoStr(StreamSize)));
end;





 
bigroute
你的确认包呢
 
StrPcopy(buf1,'Finish,StreamSize='+InttoStr(StreamSize));
NMUDP2.SendBuffer(buf1,Length('Finish,StreamSize='+InttoStr(StreamSize)));

忘了
FreeAndNil(bmp);
FreeAndNil(MsgStream);
 
后退
顶部