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

关于音频视频的网络传输

楼主jandyking(痞子o0菜)2006-08-23 07:59:18 在 C++ Builder / Windows SDK/API 提问

偶现在已经实现开启本地视频,搞不明白视频的采集   压缩   传输   解压   播放,请高人指点迷津  
  希望达人讲得具体点 问题点数:20、回复次数:16Top

1 楼i_love_pc(杰子)(欢迎加入技术交流QQ群:23640432)回复于 2006-08-23 08:40:14 得分 0

同样的问题,期待中Top

2 楼iec(bcbtovs)回复于 2006-08-27 00:24:52 得分 0

一幅图像先采集到内存,进行压缩编码,然后进行传输   接收端接收图像流   解码   进行播放Top

3 楼woainihaha(笨笨)回复于 2006-08-27 01:07:38 得分 0

采用DirectShow  
  建议看看陆其明老大的2本书Top

4 楼tanlim(sunsos.net sunsos.cn)回复于 2006-08-27 05:56:52 得分 0

就简单来讲,就是内存流的操作,但是对于视频的解编码,是有特定算法的,这方面的资料很少,我也期待有朋友能提供这方面的资料,像MPEG等等Top

5 楼flyfeel(图灵)回复于 2006-09-06 08:57:23 得分 5

视音频是流特性业务,数据量很大未压缩的视频在Internet/Intranet上传输的效果是无法容忍的,而且会很容易地将网络资源吞没,造成网络拥塞甚至崩溃。因此,IP视频通信的第一步就是视频压缩。    
        视频压缩编码的理论基础是信息论。压缩就是从时域、空域两方面去除冗余信息,即将可推知的确定信息去掉。编码方法大致可分为三类:    
        1.考虑到图像信源的统计特性采用的预测编码方法、变换编码方法、矢量量化编码方法、子带-小波编码方法及神经网络编码方法等;    
        2.考虑到视觉特性采用的基于方向滤波的图像编码方法、基于图像轮廓/纹理的编码方法;    
      3.考虑到图像传递的景物特征,采用的分形编码、基于模块的编码方法。    
        在IP视音频通信应用中,编码方法的选择不但要考虑到压缩比、信噪比,还要考虑到算法的复杂性。太复杂的编码算法可能会产生较高的压缩比,但也会带来较大的计算开销,软件实现时会影响通信的实时性。目前,在众多视频编码算法中,影响最大并被广泛应用的算法标准是IOS/IEC   MPEG和ITU-T   H.26x。    
  Top

6 楼cnjsnt1995()回复于 2006-09-10 10:46:33 得分 5

到百度贴吧上去,搜陆其明,他是DirectShow方面专家.他经常到他的贴吧上去,回答网友提出的象你一样的音频视频网络传输等方面的问题.  
  DirectShow是Direct   X家族的成员之一,它是Windows平台上的流媒体开发包。与Direct   X开发包一起发布。DirectShow提供了从本地文件和网络上播放、传输和捕获多媒体流的能力,它广泛支持各种媒体文件,包括MPEG、ASF、AVI、MP3、WAV等等。DirectShow是基于COM的.Top

7 楼VirtualDesktop(^_^)回复于 2006-09-29 19:04:44 得分 5

用VFW就可以了  
  你搜索一下,有例子的Top

8 楼xtgmd168(张天)回复于 2006-11-10 17:34:34 得分 0

在DELPHI园地里面有DIVX的网络传输组件Top

9 楼rockcmc2000(很多东西不是能有你决定的,如果不能反抗,就享受吧!)回复于 2006-12-05 21:34:49 得分 5

我也遇到同样的问题,  
  按道理先是截取位图,,  
  差点的方法是压缩为jpg,好点是压缩为H264,H264的码流量为10K/妙  
  有段deiphl的程序,有完整的源代码压缩为jpg,我不知道jpg的码流量是多少,但是算一下每秒25帧,一张jpg算它50k,网络码流量也不小啊!  
  unit   Unit1;  
          interfaceuses   Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,   Dialogs,   StdCtrls,   ExtCtrls,VFW,   IdBaseComponent,   IdComponent,   IdUDPBase,   IdUDPClient,jpeg;type   TForm1   =   class(TForm)   Panel1:   TPanel;  
          Button1:   TButton;  
          Button2:   TButton;  
          IdUDPClient1:   TIdUDPClient;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          private   {   Private   declarations   }  
          public   {   Public   declarations   }  
          end;  
          var   Form1:   TForm1;  
          CapWnd:THandle;   //定义捕捉窗句柄  
          CapParms:TcaptureParms;   //用于设置设备属性的结构变量  
          BMPINFO:TBitmapInfo;   //BMP图像信息  
          implementation{$R   *.dfm}  
          function   FrameCallBack(hWnd:   HWND;   lpVHdr:   PVIDEOHDR):   LongInt;stdcall;  
          var   hd:Thandle;  
          jpg:TJpegImage;  
          memStream   :TMemoryStream;  
          Bitmap:TBitmap;  
          begin   //将数据显在Image,  
          Bitmap:=TBitmap.Create;  
          Bitmap.Width   :=BMPINFO.bmiHeader.biWidth;  
          //   New   size   of   Bitmap  
          Bitmap.Height:=BMPINFO.bmiHeader.biHeight;  
          hd:=   DrawDibOpen;  
          DrawDibDraw(hd,Bitmap.canvas.handle,0,0,BMPINFO.BmiHeader.biwidth,BMPINFO._  
          bmiheader.biheight,@BMPINFO.bmiHeader,_  
          lpVHdr^.lpData,0,0,BMPINFO.bmiHeader.biWidth,BMPINFO.bmiHeader.biheight,0);  
          DrawDibClose(hd);  
          //发送数据  
          memStream   :=   TMemoryStream.Create;  
          jpg   :=   TJpegImage.Create;   jpg.Assign(Bitmap);  
          jpg.CompressionQuality   :=   10;  
          //jpg压缩质量  
          jpg.JPEGNeeded;  
          jpg.Compress;  
          jpg.SaveToStream(memStream);  
          jpg.Free;  
          //因为UDP数据包有大小限制,这里如果超出部分,就没有传输,完全可以发几次发出去  
          Form1.IdUDPClient1.BroadcastEnabled:=true;//用广播功能  
          if   memStream.Size>Form1.IdUDPClient1.BufferSize   then  
          //向192.168.0.X网段广播,端口   9001  
          Form1.IdUDPClient1.SendBuffer('192.168.0.255',9001,memStream.Memory^,Form1.IdUDPClient1.BufferSize)  
          else  
          Form1.IdUDPClient1.SendBuffer('192.168.0.255',9001,memStream.Memory^,memStream.Size);  
          memStream.Free;  
          Bitmap.Free;  
          end;  
          procedure   TForm1.Button1Click(Sender:   TObject);  
          begin  
          CapWnd   :=   capCreateCaptureWindow('我的窗口',   WS_VISIBLE   or   WS_CHILD,//窗口样式  
          0,   //X坐标  
          0,   //Y坐标  
          panel1.Width,   //窗口宽  
          panel1.Height,   //窗口高  
          panel1.handle,   //窗口句柄  
          0);   //通常为0  
          if   CapWnd   =   0   then   exit;   //定义帧捕捉回调函数  
          CapSetCallbackOnFrame(CapWnd,FrameCallBack);  
          CapParms.dwRequestMicroSecPerFrame:=1;  
          CapParms.fLimitEnabled:=FALSE;  
          CapParms.fCaptureAudio:=FALSE;  
          CapParms.fMCIControl:=FALSE;  
          CapParms.fYield:=TRUE;  
          CapParms.vKeyAbort:=VK_ESCAPE;  
          CapParms.fAbortLeftMouse:=False;  
          CapParms.fAbortRightMouse:=FALSE;   //让设置生效  
          CapCaptureSetSetup(capWnd,@CapParms,sizeof(TCAPTUREPARMS));  
          CapPreviewRate(capWnd,33);   //设置预览视频的频率  
          CapCaptureSequenceNoFile(capWnd);   //如果要捕捉视频流,则要使用函数来指定不生成文件,不然会自动生成AVI文件  
          CapDriverConnect(CapWnd,0);   //连接摄像头设备,第二个参数是个序号,当系统中装有多个显示驱动程序时,其值分别依次为0到总个数如果有多个摄像头,那么就是0->1->2   capGetVideoFormat(capWnd,   @BMPINFO,sizeof(TBitmapInfo));   //取得视频图像数据头  
          CapPreviewScale(capWnd,TRUE);   //是否缩放  
          CapOverlay(capWnd,true);   //指定是否使用叠加模式,true为使用,否则为false   CapPreview(capWnd,true);end;procedure   TForm1.Button2Click(Sender:   TObject);  
          begin   capCaptureAbort(CapWnd);   //停止捕捉  
          capDriverDisconnect(CapWnd);   //将捕捉窗同驱动器断开  
          end;  
          end.  
   
   
  本人是在用BCB,,到hd:=   DrawDibOpen;这句的时候,,出了问题,按原理通过使用DrawDibOpen函数初始化DrawDib函数组。DrawDibOpen负责装载动态连接库(DLL),申请内存资源,DrawDib设备环境(DC),并且维持初始化相关的设备环境计数。DrawDibOpen同时返回一个其它DrawDib函数所需要使用的新的DC句柄。  
  但是我不知道dll在那里,,,  
  那位达人帮忙。。。  
   
  Top

10 楼jandyking(痞子o0菜)回复于 2007-01-14 05:30:49 得分 0

如果是传输视频文件呢?  
  要求边传边放   rm   wmv等多种格式  
  是不是要自己写filter??Top

11 楼VirtualDesktop(^_^)回复于 2007-01-15 16:01:38 得分 0

不需要,filter有得调用的,什么h264啊IUVY啊,DIVX啊,都有现成的调用的,有一组API   ICC打头的专门调用压缩器和解压器的Top

12 楼sbkopoky()回复于 2007-02-17 18:48:08 得分 0

有一个香港和悦网络电话的源文件   ,有兴趣妨进入我的BLOG看看  
  Top

13 楼jandyking(痞子o0菜)回复于 2007-03-08 19:53:52 得分 0

VirtualDesktop(吴滂:欢迎到我的Blog转转   ^_^)    
        可以说得详细点吗??有例子最好不过了   谢谢Top

14 楼forverlove()回复于 2007-03-08 22:52:52 得分 0

学习Top

15 楼huzhangyou(信仰(http://www.libing.net.cn))回复于 2007-03-09 09:12:57 得分 0

刚好我也在做  
  经过昨天晚上的构思基本成型  
   
  我的博客将在近期详细介绍!  
   
  大概的思路:  
  (视频监控)  
  客户端使用Indy   UDP协议将视频数据报压缩传输到服务器端  
  服务器开发一个线程类  
   
  对于我的具体实现   我需要15个显示  
   
  开启15个线程  
   
  这个线程里面成员变量未  
  1:TImage   负责显示图象数据  
  2:TIndyUdpServer   负责接受数据  
   
  在Execute函鼠里面读取数据,并解码显示就可以了  
   
  至于视频还有音频可以参卡  
  H323的部分实现  
  解码标准如下:  
   
  ITU.T   H.323v2标准,支持H.225/H.245/RAS/Q.931    
  音频编码:    
  iLBC-15k  
  iLBC-13k  
  GSM-06.10  
  MS-GSM  
  SpeexNarrow-8k-15k  
  LPC-10{sw}  
  G.711-uLaw-64k  
  G.711-ALaw-64k  
  G.726-16k-40k  
  G.729A  
   
  视频编码:    
  H.261-QCIF/CIF  
  H.263-QCIF/CIF    
  RTP数据传输    
   
   
  音频一般使用G.729  
  视频   H263  
   
  这个H323的项目里面有一个包代码  
   
  我现在要去接老婆  
  晚上我有时间我贴到博客上面  
   
  http://www.libing.net.cn  
  Top

16 楼zjsyw(冰狗)回复于 2007-03-09 10:45:49 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:jandyking
  • flyfeel
  • cnjsnt1995
  • VirtualDesktop
  • rockcmc2000

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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