CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  GAME,图形处理/多媒体

用delphi做实时流问题好不好?

楼主lovermaple(风)2003-02-01 16:07:28 在 Delphi / GAME,图形处理/多媒体 提问

我现在要做一个ip可视电话的实现  
        不知道用delphi做方便不  
  高手指教  
  问题点数:0、回复次数:14Top

1 楼lizongqi(英雄啊)回复于 2003-02-01 17:41:29 得分 0

看看我们公司的产品   用delphi作的  
  www.pancool.comTop

2 楼lovermaple(风)回复于 2003-02-02 10:34:21 得分 0

大哥,我不是要买这个东西,是要自己做,找不到技术方面得东西啊,  
            我毕业设计做这个,没办法啊,  
  Top

3 楼gqg2001(老牛)回复于 2003-02-07 22:26:53 得分 0

我也在研究这个问题。我现在做了个测试程序,还可以在局域网中调试过了  
  。我的目标是用modem拨号上网也能用,不过还没有最后调试。  
  音频压缩使用了ACM,以GSM格式压缩,音频数率为2K/s,视频我采用间歇发送  
  jpg图象的方式。当然,都是用Delphi完成的。Top

4 楼Gracezmhb(格子)回复于 2003-02-21 15:42:37 得分 0

我也需要用到流的实时传输,请问你有没有关于这方面的书,用的什么控件?  
   
  老牛,我也尝试采用间歇发送jpg图象的方式发送视频,但是总是出问题,能不能给点帮助?Top

5 楼stephenhuyuanzhang(追日者)回复于 2003-02-22 10:52:26 得分 0

我正想做一个与流相关的开发,需要这方面的资料,望各位指教。Top

6 楼Gracezmhb(格子)回复于 2003-02-24 19:32:42 得分 0

to   gqg2001(老牛)   :  
   
  把在客户机接受到的流房子一个缓冲区,然后显示在Image空间中,系统总是报错,EJpeg   Class     JPeg   52#。  
  你碰到过这种情况吗?怎么解决?麻烦告诉我一下啦Top

7 楼tonylk(=www.tonixsoft.com=)回复于 2003-02-24 19:41:55 得分 0

楼上的,一般是数据接收不完整造成的,简单的做法加入except段屏蔽该错误,一般情况下jpeg图象还是可以正常显示的,有可能底部话出现解码错误。Top

8 楼whuzengcheng(阿真)回复于 2003-02-24 21:40:23 得分 0

我在将jpg格式文件存到access数据库中的ole属性字段'picture'中,但是图片已经存进去了,显示时居然提示找不到picture字段,不知道为什么?图片显示代码如下(在dbimage控件中显示,不过无法显示出来,不知为何):  
  var  
  tempstream:TStringStream;  
  tempjpeg:TJPEGImage;  
   
  begin  
              try  
                  tempstream:=TStringStream.Create('');  
                  TBlobField(adotable1.FieldByName('picture')).SaveToStream(tempstream);  
                  tempstream.Position:=0;  
                  tempjpeg:=TJPEGImage.Create;  
                  tempjpeg.LoadFromStream(tempstream);  
                  DBImage1.Picture.Bitmap.Assign(tempjpeg);  
              finally  
                  tempstream.Free;  
                  tempjpeg.Free;  
              end;  
  end;  
  运行时还提示savetostream为undeclared   identifier,不知为什么?请高手赐教!  
  Top

9 楼Gracezmhb(格子)回复于 2003-02-25 13:44:23 得分 0

to     tonylk(tony)   :  
  我也这样做过:用了try   ...except...end  
    try  
              MyStream.Position   :=   0;  
              JPEGImage.LoadFromStream(MyStream);  
              ImageIn.Picture.Assign(JPEGImage);  
              sleep(10);  
    except  
   
    end;  
  但是为了做到实时,每秒要接受20帧,时间间隔很短。由于Image的大部分都是花屏,只有上面的三分之一可以看到。  
   
  这怎么办呢?急死了!Top

10 楼tonylk(=www.tonixsoft.com=)回复于 2003-02-25 22:50:06 得分 0

你做的从数据库读取再显示的这断函数是放在哪里的?不会是在timmer中吧。。。比较理想的做法是在线程中处理数据的读取,然后通过synchronize来显示。如果这样还是有问题,可以认为的加一点sleep()。  
  另外,你用数据库来处理图象的快速显示感觉不是很合理,可以优化一下,做两个缓存,轮流使用,读取数据到缓存1时,显示缓存2中内容,同样,读取2时显示缓存1中内容。Top

11 楼Gracezmhb(格子)回复于 2003-02-26 11:49:04 得分 0

to     tonylk(tony)   :  
   
  我没有用数据库,有两个程序,一个是服务器,另一个是客户机,用了ClientSocket和ServerSocket两个控件。服务器的摄像头拍下的图像以bmp的格式先放在一个Image控件里,然后将它变成Jpeg的格式。客户机建立连接后,每隔50ms发送一个请求,要求发送图片,然后接受,接受的数据放在一个buffer里,然后用Image显示出来。这是我的思路。程序如下:  
  服务器:  
      try  
            MyStream:=TMemoryStream.Create;  
            VideoIn.EditCopy;       //获得摄像头的照片  
            ImageIn.Picture.Bitmap.LoadFromClipboardFormat                                   (cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);  
            JPEGImage:=   TJPEGImage.Create;  
            JPEGImage.CompressionQuality:=95;  
            JPEGImage.Assign(ImageIn.Picture.Bitmap);  
            JPEGImage.SaveToStream(MyStream);  
            n:=MyStream.Size;  
            Edit1.Text:=InttoStr(n);  
            MyStream.Position:=0;  
            Socket.SendStream(MyStream);  
      finally  
            MyStream.Free;    
            JPEGImage.Free;    
      end;  
   
  客户机:  
  try  
      MyStream:=TMemoryStream.Create;  
      JPEGImage:=TJPEGImage.Create;  
      Flag   :=   False;  
      while   true   do  
      begin  
          nReceived   :=   Socket.ReceiveBuf   (Buffer,   sizeof   (Buffer));  
          if   nReceived   <=   0   then  
          begin  
                Break;  
          end  
          else  
          begin  
              MyStream.Write   (Buffer,   nReceived);  
              Flag   :=   True;  
              sleep(1);  
          end;  
      end;  
      if   Flag   =   true   then  
      begin  
          try  
              MyStream.Position   :=   0;  
              JPEGImage.LoadFromStream(MyStream);  
              ImageIn.Picture.Assign(JPEGImage);  
              sleep(10);  
          except  
   
          end;  
      end;  
      Finally  
          JPEGImage.Free;  
          MyStream.Free;  
      End;  
   
  总是出现Jpeg   error   #52的错误,我想也是数据接受不完整的缘故吧。可是我是个新手,对synchronize,   双缓存也不是很懂,麻烦你费心,多指导一下,行吗?我还有很多分,如果需要可以给你很多  
   
  我的qq:43164814  
  Top

12 楼tonylk(=www.tonixsoft.com=)回复于 2003-02-26 20:25:01 得分 0

我觉得你这段代码有致命的错误,你的客户端在接受数据时,怎么知道当前完整的接收完一张图片的所有数据了呢?要知道TCP/IP的数据传输当你在server端发送一个大数据时,client端接收到数据可能会分好机此,就是说,你在客户端的OnReceiveData()中的函数也许一次收到的只是server端发送的数据中的部分。  
  所以我一般这样做,自定义一个数据结构,并有一个数据头,用来标志这个数据宝的id号,server端将大数据分成小的数据包分别发送,client端收到数据后按照索引号组装起来,放在缓存里,最后一个包到达后再将这块数据解码,显示。  
  你的这个问题不是jpeg解码的问题,而是网络数据传输的问题,这方面我不是很熟,你最好再区域问一下别人。。。  
  Top

13 楼tonylk(=www.tonixsoft.com=)回复于 2003-02-26 20:26:54 得分 0

把你邮箱给我,我发能比一个我以前做的基于udp的jpeg传输程序。Top

14 楼tonylk(=www.tonixsoft.com=)回复于 2003-02-26 20:29:28 得分 0

忘说了,我的邮箱:tonyki@citiz.netTop

相关问题

  • Delphi 4.0有啥不好,为啥非得跟上潮流?
  • 现在学delphi好不好呀
  • 用Delphi做系统软件好不好
  • 不好意思,delphi+mssql中不明白。
  • delphi的Random很不好用,有什么办法解决
  • 用delphi做web程序不好吗,有成功的经验吗?
  • delphi 对中文支持不好的一个例子
  • Delphi在这一点上做的非常不好!!
  • vb写的dll在delphi中怎么调用不好使?
  • XP Menu再Delphi 7下似乎不好用了

关键词

  • 控件
  • 客户机
  • 数据库
  • delphi
  • 服务器
  • 数据
  • jpeg
  • jpegimage
  • mystream
  • tempjpeg

得分解答快速导航

  • 帖主:lovermaple

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo