<<  征集 : 屏幕传输最快的代码  >>      大家一起讨论提高
注意:用以下两种方法的人可以不参加讨论
---------------------------------------
1抓屏 2 JPG     3 发送
1抓屏 2 zlib压缩 3 发送 
---------------------------------------
注意:用以上两种方法 的人请不要参加讨论

解决方案 »

  1.   

    原来用的是 NMStrm+bmp+lzw(流压缩单元)
    点对点的速度还可以,800*600/16bit,能基本达到实时(约半秒)无奈的是NMStrm
    好象不能支持网络广播,这下就苦了我了,得知NMUDP能很容易实现广播,于是改用
    NMUDP,程序如下,但是速度太慢了,要一两分钟才能传一帧图片这可如何是好,救
    救小弟我吧!   (bmp(936k)->stream(lzw,90k), 100M局域网)哪位大侠,帮我优化
    一下,或者提供另一个可行的方案,或者是提供一个更快,压缩比更高的流压缩单元
    (分数在http://www.delphibbs.com/delphibbs/dispq.asp?lid=794044给出)
    //发送部分
    var
     tp: array[0..5]of Char;
     ss,ls:integer;//sendsize,leftsize
     wid,cid:dword;
     mspt: TPoint;
     buf:array[0..bs-1] of char;//bs=2048;
    begin
     //传输前的初始工作
     ls:=0; stm.Clear; ssm.Clear;
     tp:='SrcCap';
     NMUDP.SendBuffer(tp,6);
     repeat
      if ls>0 then begin//数据没发完
       if ls>bs then ss:=bs else ss:=ls;
       ssm.ReadBuffer(buf,ss);
       ls:=ls-ss;
       NMUDP.SendBuffer(buf,ss);//将数据发到6711
       end
      else begin//数据已发完,重新截屏
       BitBlt(bmp.Canvas.Handle,0,0,sw,sh,dc,0,0,SRCCOPY);
       stm.Clear; ssm.Clear;
       bmp.SaveToStream(stm);
       LZ.CompressToStream(stm.Memory,ssm,stm.Size);
       stm.Clear;
       ls:=ssm.Size;
      end;
      Application.HandleMessage;
     until EndBtn.Enabled=false;
    end;
    //接收部分
    var tp: string;  
    begin
     stm.Clear;
     NMUDP.ReadBuffer(buf,NumberBytes);
     tp:=Copy(buf,0,6);
     if tp='SrcCap' then begin
      ssm.Clear;
      Exit;
     end;
     stm.Write(buf,NumberBytes);
     stm.Position:=0;
     ssm.CopyFrom(stm,NumberBytes);
     stm.Clear;
     if NumberBytes<bs then begin//数据已读完
      ssm.Position:=0;
      LZ.DeCompressToStream(ssm.Memory,stm,ssm.Size);
      bmp.LoadFromStream(stm);
      ssm.Clear;
      BitBlt(MainFm.Canvas.Handle,0,0,800,600,bmp.Canvas.Handle,0,0,SRCCOPY);
     end;
     Application.HandleMessage;
    end;
      

  2.   

    我现在的代码已经达到了10幅/妙,已经达到国内的领先水平!
    但是我发现国外的同类软件速度可以达到30幅/妙注意:用以下两种方法的人可以不参加讨论
    ---------------------------------------
    1抓屏 2 JPG     3 发送
    1抓屏 2 zlib压缩 3 发送 
    ---------------------------------------
    注意:用以上两种方法 的人请不要参加讨论
      

  3.   

    http://community.csdn.net/Expert/topic/4204/4204487.xml?temp=.5655939
    继续讨论,希望高手加入
      

  4.   

    用GDI函数抓屏快不起来。
    如果是整屏处理,一定要使用帧间压缩。
      

  5.   

    to :  ahjoe(强哥)   还有什么方法抓图啊?
      

  6.   

    to: thirdapple(.:RNPA:.陨落雕-淡泊以铭志)     我只是说的我的传输速度达到了国内领先;没有说其它领先
        我看你是嫉妒,有本事拿点真东西来
      

  7.   

    www.PlayICQ.com,站上有老外的例子,自己看看差距在哪裡吧!
      

  8.   

    to :  sailxia(小帆)      我看过了,都没有我的快啊...     我现在想更加快啊!  
      

  9.   

    to: constantine(飘遥的安吉儿) 屏幕分块传送:我认为速度很慢的! 我现在一般在屏幕变化不大的情况下, 我现在的优化算法一帧 只 发送 100-200字节. 如果把 100 个 字节 分成 几份 发送,速度反而慢
      

  10.   

    to: BambooCaep(乱拳) 
     ===================================================== if not(你的嫉妒心理太强) then you = 搞错了'帧'的概念;
     ===================================================== 
     
     在里面我免费给你上一课,告诉你什么是'帧'!
     一'帧'是指一副完整的图像!
     特别是那些用 分块 或者 分线 方法进行屏幕传输的人
     他们说接收到了一个数据包就说 是一'帧'
     他们那是需要如果个数据包才能算是一'帧'.
     
     pcAnywhere的极线是30'帧'/妙.
     那些人号称100的,不是自己的基础知识太差,就是在做虚假广告.
      

  11.   

    to: BambooCaep(乱拳) 
     ===================================================== if not(你的嫉妒心理太强) then you = 搞错了'帧'的概念;
     ===================================================== 
     
     在里面我免费给你上一课,告诉你什么是'帧'!
     一'帧'是指一副完整的图像!
     特别是那些用 分块 或者 分线 方法进行屏幕传输的人
     他们说接收到了一个数据包就说 是一'帧'
     他们那是需要若干个数据包才能算是一'帧'.
     
     pcAnywhere的极限是30'帧'/妙.[官方测试]
     那些人号称可以达到100的,不是自己的基础知识太差,就是在做虚假广告.
     
      

  12.   

    基本方法:抓屏,帧间差,行程压缩,发送。当然每隔一段时间(比如2秒)要有一个关键帧(要压缩)。复杂的方法:拦截GDI函数,将GDI函数绘制到屏幕的内容,同时绘制到缓冲BMP图上,然后再帧间差,行程压缩,发送。这样就不用抓屏,省下时间。
      

  13.   

    to:  aloking(黑鲸) 
     我所指的10帧/妙  是指的是从 对方抓屏 到 我可以看见一副完整图像 的全过程!
      

  14.   

    to:  aloking(黑鲸) 
     
      补充一下 : 对方抓屏-对方处理-网络传输-我方处理-我方显示  这才叫做一帧. 那些没有搞懂的人,现在 可以再学习一下
      

  15.   

    即使所谓的10fps,但是若是屏幕变化很大也是无法实现的。若屏幕无变化,100fps也是可以达到的
      

  16.   

    to :  zhushudo(晴天柱) ( )        在屏幕变化不大的情况下,我已经做到了一帧 100字节左右 (注意是字节不是K)       当然屏幕变化很大的情况下,会有延迟的感觉
      

  17.   

    每秒100帧就应该没有这么快吧,我们公司的视频系统 mpeg4的,每秒25帧左右。
      

  18.   

    用摄像机对着屏幕,然后做成DVD,然后邮寄。100帧/秒肯定有。就是延时大了一点,超过24小时。哈哈哈。
      

  19.   

    每秒帧数(Frames per Second) 通常简称FPS,也就是指我们每秒所翻过的书的页数。当帧数达到24帧每秒时,人眼已经无法分辨,从而认为画面是连续的。电影采用的24帧每秒,而电视采用的是25帧每秒。25帧足够了,呵呵,人眼看着就是连续的了,不过越多越好啊,网络情况不好时,还是优化的办法传输速度快.
      

  20.   

    大家继续
    关于以bmp抓图为前提的方法,本人的确提高到了世界领先水平[不想和你们再谈论这个问题了]但是我想知道mpeg4的方法,有源代码吗???
      

  21.   

    抓屏录制AVI ,用.H263 压缩或divx ,xvid 压缩传输;网络协议采用UDP,只计算丢包率调整质量和重发关键帧即可。ADSL 传输速度可以限制到10kbps
      

  22.   

    大家继续啊!
    谁用DirectX抓全屏的代码?
      

  23.   

    看看VNC的源码吧,什么1秒传10幅有什么意义,只要能实时得到变化部分就行了
      

  24.   

    to :Top  
     xzhifei(饭桶超人( 谁有VNC的delphi版本的代码 ,主要是Hook部分