捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:高速屏幕传输演示代码
xsf516624 37482 2009/5/15 20:00:35
guanyueguan 请问你的发的那个的下载地址是?
kingspider 29766 2007/6/4 0:13:35
都是一些前辈,虽然我不太懂编程,但是我喜欢,虽然我不太认真的学习,但这是我的爱好,向老陈致敬!黑洞的第一个版本的时候我就在用了,呵呵,那里还没有出现自动上线功能,后来有了一上网络神偷(好像是它吧)第一个出现了隧道论及自动上线.
guanyueguan 29197 2007/4/28 21:35:45
简单点,隔行扫描实际上是隔行取样,再分析出变化矩形,这样取样时数据量很小,所以快,同时只得到变化区域,冗余数据就会少很多。对于经常性大变化来说,这种方法是不合适的,但对于一般操作却很有用。在小变化时100侦/秒是可以做到的,而且CPU也低,这也是我做了上百次的测试分析来的。
qsmile 29194 2007/4/28 16:36:51
guanyueguan ,
我想听一下你说的那个隔行扫描,50帧/秒,CPU还只在5% 这个算法的思路。
我对看代码本身没多大兴趣,我只想听下思路就OK了。
guanyueguan 29190 2007/4/28 10:28:38
上傳了,等站長審核了就可以了。
chenyoukun 29176 2007/4/27 16:57:43
希望楼上的发布出来....(^_^)
发布方法:
本站提供如下方法发布您的作品 
  发布前请一定搜索一下本站是否已经有此资源:   高级搜索 
1、直接在下面的表格提交。(推荐) 
2、按下表格格式Email相关资料到root@2ccc.com,由站长帮您提交。 
3、下面的表格填写资料,将代码上传到ftp://uploads@uploads.2ccc.com,由站长整理后发布。 
注意:发布的代码必须有详细的说明,并配有图片,无说明者一律删除。
guanyueguan 29131 2007/4/25 17:13:52
  這個算法有個關鍵不足,是占CPU的主要原因,而且在集顯上奇慢。我已經修改了一個比較完整的版本(每秒9偵,CPU15%左右,好一點機子),但不知怎樣上傳。
  另外寫一個簡單的隔行掃描算法版本,基本上50偵/秒,CPU在5%以內,但還有去噪部分沒有完全處理好,導致冗余數據過多。
  其實主要耗時操作在截屏與壓縮,一定不能截取整屏,這就是這個程序算法的關鍵不足。另外要盡量降低數據冗余,減少壓縮的耗時。我覺得這個分塊算法已經沒有多大必要研究下去,除非你更好的改進方法。
chenyoukun 29097 2007/4/23 14:55:33
To:hfhappy
好象一样不行啊。只有第一个图是对的,其他的画不上去,没变化啊。。。还占用CPU80%。。。。可不可以把更新后的代码重新发过啊。。万分感谢。。。
edust 29048 2007/4/20 19:13:18
大凶.....TAO哥在发牢骚 了~~~ 呵呵
hfhappy 28886 2007/4/12 23:06:38
>>1.Client端显示的屏幕图像是错误的。
server端
    else if s = 'GetNextScreen' then       //传输下一幅
      begin
        Screenimg.GetNextBMP(Tmpstream);
        if Tmpstream.Size <> 0 then
        begin
          AContext.Connection.IOHandler.WriteLn('NextScreen');
          Tmpstream.Position :=0;
          AContext.Connection.IOHandler.Write(Tmpstream,0,true);
          tmpstream.Clear ;
        end
        else
          AContext.Connection.IOHandler.WriteLn('ScreenNotChange');
      end
client端:
      else if s = 'NextScreen' then
        begin
          i:=TheClient.IOHandler.ReadInteger ;
          Inc(Num );
          Form1.StatusBar1.Panels[0].Text := Format('Recvicing %d frame,Size%dByte',[Num,i]);
          TheClient.IOHandler.ReadStream(tmpstream,i);
          if stopts then
          TheClient.IOHandler.WriteLn('StopScreenTransfer')
          else
          TheClient.IOHandler.WriteLn('GetNextScreen');
          Synchronize(Form1.LoadNext);
          tmpstream.Clear;
          Inc(totalrev,i);
          Inc(speed );
        end
      else if S = 'ScreenNotChange' then
        begin
          Inc(Num );
          Form1.StatusBar1.Panels[0].Text := Format('Recvicing %d frame,Screen did not change!',[Num]);
          Inc(totalrev,i);
          Inc(speed );
          if stopts then
          TheClient.IOHandler.WriteLn('StopScreenTransfer')
          else
          TheClient.IOHandler.WriteLn('GetNextScreen');
        end;
>>3.当然还有那个白屏的问题的。
procedure TForm1.LoadNext;
var
  P:TPoint;
  ssize,i,ss:Integer;
begin
if not Assigned(tmpstream1) then  tmpstream1:=TMemoryStream.Create;
ss:= tmpstream.Size;
tmpstream.Seek(0,soFromBeginning );
i:=0;
while i < ss do
  begin
    i:= i + tmpstream.Read(p,SizeOf(p));
    i:= i + tmpstream.Read(ssize,SizeOf(Integer ));
    i:= i + tmpstream1.CopyFrom(tmpstream,ssize) ;
    MyDeCompress(tmpstream1);
    tmpstream1.Position :=0;
    TmpBmp.LoadFromStream(tmpstream1 );
    Image1.Canvas.Draw(p.X,p.Y,TmpBmp);
    tmpstream1.Clear;
  end;
end;
doorkey 28883 2007/4/12 16:09:41
我在Win2003+SP1下详细测试了一下,主要有这三个问题:
1.Client端显示的屏幕图像是错误的。
2.CPU占用很高,鼠标移动都一愣一愣的。
3.当然还有那个白屏的问题的。
yumato 28871 2007/4/12 0:05:52
有个说的对,基本就是隔行扫描了,这让人民群众都看到了希望,但是我想,屏幕分块还不是最快,最好加上消息截取。
hfhappy 28851 2007/4/11 11:24:58
还有,减少传输速度可以减少cpu占用,我记得老陈说过30fs对人眼来说就是动画了,我想在黑洞里也会通过减慢速度来减少CPU占用,但是比较算法也是关键
hfhappy 28850 2007/4/11 11:17:49
核心只做了一点优化,但速度的确很快,不过CPu也是80%以上,不过我想如果想全速传输的时候CPU占用是难免的,我现在这个比较图片的方法只用6ms以内,时间基本都是用在压缩上,因为传输暂时不用考虑,100M局域网最大传输速度一般都能到10M/s左右传输几十K的东西我想时间都不用考虑,因为我在本机测试和局域网测试速度差不多少
还有用C sdk不一定比delphi优化多少,delphi的canves其实也是对GDI api的优化
没地方传演示图片了,如果你真想交流+msn吧,在上面好好聊聊
guanyueguan 28826 2007/4/10 23:14:52
  我只是怀疑你写的这种算法达不到那么快(CPU占用在20%以内),想运行看看。我下过的确实写的比较优化了,是用C SDK 写的,每秒3侦,CPU占用在10%以内。
  做事不一定非要专业的,王江民初中毕业还写KV300,不要说自己不行,你比很多专业的人强多了。
  在这也只是跟大家探讨,没其它的意思。你的隔行扫描的起始行循环跳一下就可以减少检测不完全的情况发生,同时降低CPU占用。其实你这个分块写的不错,要不也不来看了。
hfhappy 28817 2007/4/10 18:34:03
to guanyueguan   
既然你有这种方法的代码,那还要我的干嘛?我很菜,我不是计算机专业的,没学过算法,数据结构也只是自学了一点,我想你下的代码质量一定比我的高吧.
本来发这个代码上来我是想有人能帮我结解决存在的问题,并且优化算法,因为自己弄的实在是头大(因为我很菜...),但现在看来现有的bug&优化基本上都是自己解决的.....
guanyueguan 28786 2007/4/10 9:53:54
老兄,把修改後的發出來吧,我只有D7,改INDY麻煩,而且我在網絡上運行不起來。
這種方法早在2000年時就有人做出來了,我在網上不小心下了一個,本想傳上來,可不知怎麼上傳。
hfhappy 28785 2007/4/10 9:44:59
这个代码的确有问题,不过不像你说的核心没搞好,这个demo存在的问题基本都是传输上的,现在已经改正了,局域网在屏幕变化40%的情况下能达到20-30帧,屏幕变化不大能到50+帧,改动的代码没超过20行
还有,这个demo里扫描图片时不但隔行而且还是隔列,所以有时检测有时会不完全,把隔列去掉,基本上检测就完全了
另外,这个demo好像只在屏幕长和宽都是BMPBlockSize整数倍的时候才正常,这隔的确是核心问题,原因我不说了,改正也很容易
yumato 28768 2007/4/10 0:54:06
代码有严重问题,检测一点也不完全,核心都还没搞好,表面倒写的很全面了,害的N多人连陈精滔也来关注了,哈哈哈
hfhappy 28746 2007/4/8 19:56:22
BMP.setsize = bmp.Width:=awight & bmp.Height:=aHeight
第一页 上一页 下一页 最后页 有 50 条纪录 共3页 1 - 20
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2012 V3.01 沪ICP备05001939号 更新RSS列表