基于DELPHI的网络视频编程

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wqsemail
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Delphi被称为第四代编程语言,它具有简单、高效、功能强大的特点。和VC、VC 等编程语言相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色,集成了多种语言的特点,可以开发出灵活强大的程序。在各种聊天程序、聊天室中,常常用到网络视频技术,开发网络视频程序的工具有很多,Delphi是很多程序员喜爱的一种。本文就笔者开发的基于Delphi的网络视频编程进行分析阐述,并给出部分Delphi的相关代码。
  关键词:Delphi;网络视频;编程
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)14-3619-02
  1 引言
  在各种聊天程序、聊天室中,常常用到网络视频技术。Delphi具有强大的功能,也可以用Delphi来开发网络视频。本文就笔者开发的基于Delphi的网络视频编程进行分析阐述,并给出部分Delphi的相关代码。
  2 视频捕获
  视频捕获,可以使用微软提供的专门用于视频捕获的VFW(Video for Windows)SDK。VFW SDK为在Windows系统中实现视频捕获提供了标准的接口,从而大大方便了程序员的设计开发。
  VFW是微软公司推出的关于数字视频的一个软件包,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。VFW使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。
  VFW主要由以下6个模块组成:① AVICAP.DLL:包含了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供一个高级接口;② MSVIDEO.DLL:包含一套特殊的DrawDib函数,用来处理屏幕上的视频操作;③ MCIAVI.DRV:包括对VFW 的MCI命令解释器的驱动程序;④AVIFILE.DLL:包含由标准多媒体I/O(MMIO)函数提供的更高的命令,用来访问.AVI文件;⑤压缩管理器(ICM):用于管理的视频压缩/解压缩的编译码器(CodeC);⑥ 音频压缩管理器ACM:提供与ICM相似的服务,适用于波形音频。
  AVICAP为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。AVICAP支持实时的视频流捕获和图像捕获并提供对视频源的控制。AVICAP在捕获视频方面具有一定的优势,它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时,它也可将数字视频捕获到文件。
  利用AVICAP进行视频捕获的开发步骤有:① 创建“捕获窗”;② 关联捕获窗和驱动程序;③ 设置视频设备的属性;④ 打开预览。
  通过以上4步就可以建立一个基本的视频捕获程序。下面介绍实现基于Delphi的视频捕获。
  使用微软的AVICAP32.DLL实现对视频摄像头控制:
  1) 打开Delphi,新建一个工程,并新建一个窗口。先定义一个函数和部分常量(定义成全局类型)。
  const WM_AP_START=WM_USER;
  const DRIVER_CONNECT=WM_CAP_START 10
  const SET_PREVIEW=WM_CAP_START 50
  const SET_CALLBACK_VIDE05TREAM=WM_CAP_START 6;
  const SET_SCALE=WM_ CAP_TART 53;
  const SET_PREVIEWRATE=WM_CAP_START 52
  const DRIVER_DISCONNECT=WM_CAP_START 11;
  function capCreateCaptureWindowA(1pszWindowName:PCHAR;
  dwStyleaongint;x:integer;y:integer;nWidth:integer;
  nHeight:integer;ParentWin:HWND;nId:integer):HWND;
  STDCALL EXTERNAL ’AVICAP32.DLL’
  2) 在窗口上放置一个Panel,添加2个按钮,Caption设置为“开始”和“停止”,并定义一个全局变量,var CWin2:THandle;//定义捕捉窗句柄。
  “开始”按钮代码如下:
  CWin2: =capCreateCapture WindowA(’My CAPWin’, WS_CHILD or WS_VISIBLE,
  Panell.Left, Panell.Top, Panell.Width, Panell.Height,Form 1. Handle, 0 )
  //上面代码创建“捕获窗”
  if CWin2<>0 then
  begin
  SendMessage ( CWin2 , SET_CALLBACK_VIDEOSTREAM,0, 0);
  SendMessage (CWin2,DRIVER_CONNECT,O,0);
  //上面代码关联捕获窗和驱动程序
  SendMessage(CWin2,SET SCALE,1,0)
  SendMessage (CWin2,SET_PREVIEWRATE,66,0);
  //上面代码Scale , Rate设置预览的比例与速度
  SendMessage(CWin2,SET_PREVIEW,1,0);
  //上面代码打开预览
  end;
  运行Delphi,这时就可以在屏幕上看到来自摄像头的图像了。
  “停止”按钮代码如下:
  if Cwin2<>0 then begin
  SendMessage(CWin2, DRIVER_DISCONNECT,0,0);
  CWin2:= 0;
  end;
  3 对捕获的视频进行压缩与解压
  通过AVICap窗口捕获的每一帧的数据是以BMP (RAW)文件格式存放的,若直接进行传输,数据量非常大,对网络的带宽要求非常高,因此在传输之前必须对每一帧的数据进行压
  缩处理后再进行传输。具体步骤:
  第一步,安装视频压缩引擎。媒体播放器软件都带有压缩引擎,也可以从网上下载单独的解压缩引擎,比如MPEG4或DIVX等。
  第二步,初始化压缩引擎。选择压缩引擎,获得压缩引擎的支持,确定输人、输出格式,设置压缩器。
  第三步,压缩帧数据。通过指定的压缩引擎,对获取的每一帧数据进行压缩。
  解压的过程与压缩的过程类似,通过选择相对应的解压引擎,将压缩的数据解压,以便于回放。
  4 视频数据传输
  4.1 基本概念
  计算机在传输数据时有两种方式:分别是TCP(Transmission Control Protocol,传输控制协议)及UDP(User Datagram Protocol,用户数据报协议),两者分别因数据传输的不同请求而提供不同的数据传输方式。
  1) TCP协议
  TCP是一个基于连接的通信协议,主要目的是提供大量数据传输并确保其传输无误,因此提供错误检查、数据复原及数据重传等机制。TCP在传输数据之前,会先在主机间(例如主控端与被控端)创建连接。根据此连接,数据可在计算机间相互传输,即所谓的双向传输模式。
  2) UDP协议
  UDP是一个非连接式的通信协议,主要目的在于传输少量的数据。与TCP不同的是,TCP在传输之前必须创建连接,而UDP不需要,只要设置计算机间的IP及使用相同的端口,就可以相互传输数据。因此UDP只提供单向的数据传输,即所谓的单向无连接传输模式。
  由于UDP不需要先创建连接,节省了TCP创建连接所需的时间,所以适合在主机间进行单向的数据传输。由于视频数据的传输对于实时性要求很高,即使传输过程中有个别帧的数据有错,也不会影响整个视频的效果,故本文将会详细介绍如何通过UDP实现视频数据的传输。
  4.2 控件及相关内容介绍
  在Delphi中对于UDP及TCP都提供了很好的支持,而且将它们封装起来。开发人员无须知道协议的具体实现细节,而只要使用Delphi提供的TIdUDPServer元件(在Indy Servers页)即可完成相应的功能。下面我们一起来认识一下这个元件。
  1) 相关属性
  DefaultPort该属性是用来指定作为客户端时要打开的端口号,也就是通过该端口来接收数据。
  Active该属性是用来打开指定的端口号,设置为True表示打开端口,False表示关闭端口。
  BroadcastEnabled该属性是用来设置是否用来实现广播,设置为True表示可以广播,False表示不能广播。
  2) 相关事件
  OnUDPRead当客户端收到服务器端发来数据时触发该事件,通过该事件我们可以取得服务器端发的每一帧的数据,以便在客户端回放。
  除了以上提到的一些属性及事件外,TIdUDPServer还有一个重要的方法需要了解,那就是SendBuffer,通过该方法可以在服务器端向指定客户端的指定端口发送数据。
  5 结束语
  目前,Delphi已经被很多的程序开发者作为开发网络视频程序工具。本文介绍的网络视频编程,应该是目前比较常用的方法之一。本文所有程序在Win XP/Delpphi 7.0下实现通过,所用视频摄像头为市场上普通销售的产品。
  参考文献:
  [1] 白先平. 应用Delphi开发视频语音聊天软件[J]. 科技资讯,2006,29:113.
  [2] 李国芳. 在VC 6.0中实现视频捕获编程[J]. 井冈山医专学报,2003(4):76-78.
  [3] 刘德华. 在Delphi下实现对数据库中图像的操作[J]. 电脑编程技巧与维护,2007(7):60-62.
  [4] 何鹏飞. Delphi7程序设计教程[M]. 北京:清华大学出版社,2003.
其他文献
一、协同处置示范工程。工程目标:开展协同处置,利用水泥窑缓解城市生活垃圾处置压力,减少土地占用,实现城市垃圾无害化处置,加快水泥工业向绿色功能产业转变。主要内容:在若干座大
结合钢结构工程现有情况,探讨了钢结构安装质量控制要点。
在编辑Excel工作表时,有时,你可能需要把Excel工作表某些单元格中的公式的计算结果复制到其他单元格中或者就在原单元格中将公式变为数值,该怎么办呢?此时,请试试以下两法。    一、命令法    1.选中需要复制公式结果的单元格区域。  2.单击“开始”选项卡,然后在“剪贴板”组中,单击“复制”。  3.单击要粘贴公式结果的区域的左上角单元格。  4.单击“开始”选项卡,然后在“剪贴板”组中,
通过GIS平台对岩溶区桩基勘探数据进行处理,以溶洞数量、溶洞位置、溶洞深度、第四系土层厚度、水位情况等影响桩基施工质量的主要影响因子为评价指标,分析岩溶桩基施工难易
一、上半年行业经济运行分析2012年上半年全国建筑陶瓷产量增幅3.8%,销售产值同比增长3.38%,大部分建陶企业的利润率和效益低于去年同期。今年前5个月全国出口陶瓷砖增长12.8%,出口额
2009年,面对国际金融危机带来的影响,江苏省建材行业积极应对不利因素,充分发挥国家和省经济宏观调控政策的拉动作用,保持了全行业良性运行势头。一、主要产品生产运行情况 2
2009年底,工信部部长李毅中在全国工业和信息化工作会议上表示,工信部将尽快制定推进企业兼并重组的指导意见,出台钢铁、有色、建材、汽车、船舶等行业兼并重组的实施意见。工信
有机硅胶乳与有机高分子乳液聚合而成的新型材料有机硅复合型弹性建筑装饰涂料,其各项指标均达到并超过日本JIS标准,文章主要介绍其生产工艺及在施工中的应用。
24例膈下脓肿分析及诊治体会王万鹏,陈建民,冯向阳由于抗生素的使用,膈下脓肿的发生率已明显下降。但是膈下脏器多,解剖关系复杂,一旦发生,诊治不及时,往往造成严重后果。1资料与结果1.1一
该文给出了工作流的基本概念,归纳了工作流在ERP系统中的有效应用的基础性问题,给出了集成后的系统架构。