《局域网视频通讯系统论文-毕业设计.doc》由会员分享,可在线阅读,更多相关《局域网视频通讯系统论文-毕业设计.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、毕 业 设 计局域网视频通讯系统摘 要用现有的技术,将视频数据进行压缩编码,可以减少磁盘存储空间提高视频网络传输速度,给用户提供一个稳定、流畅的视频效劳。本文利用现有的H.263标准对图像进行压缩解码,实现视频的在低速率下传输,探讨了VFW视频捕捉技术、Winsock等技术以及系统的功能设计方法,最终实现两台计算机之间的初步视频通讯。系统实现功能如下:连接控制,断开、建立连接以及退出;声音控制、音量控制,语音的发送和接收控制;视频控制;文本控制以及最根本的视音频聊天功能。关键词:视频通讯 TCP/IP协议 h.263标准目 录1 前 言11.1 软件开发背景11.1.1 社会背景11.1.2
2、技术背景12 需求分析62.1 市场需求62.2 功能分析72.3 环境需求73 主要技术概述83.1 TCP/IP协议83.1.1 TCP/IP协议的结构83.2 Winsock 编程技术103.2.1 Socket套接字103.2.2 Winsock编程原理103.2.3 Winsock的启动和中止113.3 视频编码技术123.3.1 视频编码分析123.3.2 H.263编码方案123.4 VFW视频采集方案133.4.1 VFW简介133.4.2 开发流程分析133.4.3 视频窗口创立133.4.4 视频预览实现143.4.5 捕捉参数设置143.4.6 回调函数设计143.5 音
3、频采集技术164 系统介绍164.1 系统根本功能介绍164.1.1 功能简介164.1.2 功能模块图174.1.3 工作流程图184.2 连接控制模块184.2.1 功能介绍184.2.2 主要功能以及实现194.3 声音控制模块204.3.1 功能介绍204.3.2 流程图204.3.3 主要功能及实现214.4 视频控制224.4.1 功能介绍224.4.2 主要功能及实现225 结 论22参 考 文 献23Abstract24附 录25致 谢32仲恺农业技术学院毕业论文(设计)成绩评定表331 前 言1.1 软件开发背景 社会背景随着经济的飞速开展,互联网逐渐成为了世界的主导,在短短
4、数十年的时间里,网络变得越来越完善。它拉近了人与人之间距离,在我们的生活中充当着重要的角色,使我们的地球变成了一个真正的村落。网络的开展也促进了通讯手段的变化,传统的交流方式已经不能满足人们的日益增长的需求。从E-mail到Internet Phone,网络带来了通讯速度的提升,更降低了通讯本钱。而随着宽带网络的普及,人们对网络通讯也有了进一步的要求。宽带网络的开展,改变了传统网络通讯的质量和形式,使交流不再只是局限于普通语言文字,希望利用视频让身处异地的朋友能够相见。视频通讯系统实时传输视频与音频信息,使双方可以远距离进行直观、真实的视音频交流。利用多媒体技术的支持,视频通讯系统可以更好表达
5、出自己的想法,更好利用表情进行交流,实现一个更好的、更舒适的聊天环境。在80年代初的时候, 、网络还没有产生, 还是个奢侈品,人们之间的通信联络主要依靠书信和电报来完成。通讯技术开展以后, 普及了,人们之间的交流越来越方便了,唯一的缺乏就是它只能在固定在一个地方。90年代以后, 出现了,人们可以随身携带着它,随时随地都能够与别人通话和发文本信息,十分方便。移动 的出现大大提高了信息的及时性,非常受人们欢送,在当时给人们带来了很大的方便。现在,我们生活有了非常大的改变 、 已经普及到了千家万户,通信费用大大降低,人们之间的联系比以前方便多了。但是随着现代通信技术和业务的开展,人们不再仅仅满足现有
6、的文本和语音聊天,转变为对视频和音频的通信需求,以传送语音、数据、视频为一体的视频通信业务将成为通信领域开展的热点,以点到点或多点视音频通信为主要形式的视频通讯、视频会议、远程医疗、远程教育等效劳将得到越来越多的使用【1】。 技术背景(1)TCP/IP协议Transmission Control Protocol/Internet Protocol,传输控制协议/互联网络协议,是Internet最根本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。TCP协议最早由斯坦福大学的两名研究人员于1973年提出。1983年,TCP/IP被Unix 4.2BSD系统采用。随着Unix的成功,T
7、CP/IP逐步成为Unix机器的标准网络协议。Internet的前身ARPANET最初使用NCP(Network Control Protocol)协议,由于TCP/IP协议具有跨平台特性,ARPANET的实验人员在经过对TCP/IP的改良以后,规定连入ARPANET的计算机都必须采用TCP/IP协议。随着ARPANET逐渐开展成为Internet,TCP/IP协议就成为Internet的标准连接协议。TCP/IP协议其实是一个协议集合,它包括了TCP协议(Transport Control Protocol,传输控制协议),IP协议(Internet Protocol Internet协议)
8、及其它一些协议。TCP/IP体系结构模型自下往上分别是【2】:1.物理层:主要任务是实现通信双方的物理连接,以比特流(bits)的形式传送数据信息,并向数据链路层提供透明的传输效劳。2.数据链路层:利用物理层提供的比特流传输功能,实现在相邻节点(node)间的透明、可靠的数据传输,具体要实现以下功能:链路管理、帧同步、过失控制、流量控制。3.网络层:主要有网际协议IP,地址解析协议ARP,逆地址解析协议RARP。4.运输层:运输控制协议TCP,用户数据报协议UDP。5.应用层: TELNET,FTP,SMTP等应用层协议。层与层之间的关系是,下层总是为上一层效劳的,上层屏蔽下一层的效劳细节。应
9、用层:SMTP FTP TFTP SNMP TELNET HTTP运输层: TCP UDP网络层: IP ARP RARP数据链路层: HDLC PPP物理层图1-1 TCP/IP协议族体系结构图(2)WinSock编程技术:WINSOCK是WINDOWS系统提供的一种网络文件传输协议。Winsock控件对用户是不可见的,可以很容易地访问TCP和UDP网络效劳,被 Microsoft Access,VisualBasic,VisualC+或VisualFoxPro开发人员使用【3】。编写客户和效劳器应用程序,不需要了解TCP协议或调用底层WinsockAPI的具体细节。通过设置Winsock控
10、件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换。该控件主要包含以下方法:1. Accept方法:只对于TCP效劳器应用程序适用,该方法用于在处理ConnectionRequest事件时接受连入请求,应用于Winsock控件。object.Accept,object是Winsock控件的对象表达式。数据类型Long返回值Void在ConnectionRequest事件中使用Accept方法时候,ConnectionRequest事件相应的参数RequestID也应传递给Accept方法,应在新的控件实例中使用该方法而不是处于监听状态的控件。2. Close事件:当远
11、程计算机关闭连接时产生该事件,应用程序应使用Close方法正确地关闭一个TCP连接,应用于Winsock控件。object_Close(),object是Winsock控件的对象表达式。参数 没有返回值Voidclose()方法用于关闭客户或效劳器应用程序的TCP连接或监听插槽,应用于Winsock控件。3. Connect事件Winsock控件当一个Connect操作完成时发生,应用于Winsock控件。object.Connect(),object置换元代表一个对象表达式,其值是一个Winsock控件。使用Connect事件可以确认已经成功建立了。4. ConnectionRequest事
12、件当远程计算机请求一个连接时产生该事件,只对于TCP效劳器应用程序适用,当有一个连入请求时就触发该事件。该事件触发之后,RemoteHostIP和RemotePort属性中保存了客户机的信息,应用于Winsock控件。object_ConnectionRequest(requestIDAsLong)ConnectionRequest事件的语法有如下几个局部: object,一个Winsock控件的对象表达式。requestID,连入请求标识符。该参数应传递给第二个控件实例的Accept方法说明效劳器可以确定是否接受一个连入请求。如果没有接受连入请求,在客户将得到Close事件,可以使用Acce
13、pt方法在新的控件实例中接受连入请求。5. RemoteHostIP属性: 返回远程计算机的IP地址。对于客户应用程序,使用Connect方法建立连接之后,该属性包含了远程计算机IP字符串。对于效劳器应用程序,进来一个连接请求时,该属性包含了初始化请求的远程计算机的IP字符串。在使用UDP协议时,在DataArrival事件产生后,该属性包含了发送UDP数据的远程计算机的IP地址。object.RemoteHostIP,object是Winsock控件的对象表达式,数据类型String。6. SendData方法: 给远程计算机发送数据。返回值 Void应用于Winsock控件。语法objec
14、t.SendDatadataSendData方法的语法有如下几个局部:Object,一个Winsock控件的对象表达式。Data,要发送的数据,对于二进制数据,应使用字节矩阵说明。当传递UNICODE字符串时,在发送之前转换为ANSI字符串。7LocalHostName属性返回本地计算机的名字,是只读属性,应用于Winsock控件。object.LocalHostName,object是一个Winsock控件的对象表达式。返回值String8LocalIP属性返回本地计算机的IP地址,是只读属性,应用于Winsock控件。object.LocalIP,object是Winsock控件的对象表达
15、式,数据类型是String。9LocalPort属性返回或设置本地使用的端口,可读写,在设计时可用。对于客户-这将指定发送数据的端口。如果应用程序不需要特定的端口,指定为0。在这种情况下,控件将随机选择一个端口。连接建立后,该本地端口就用于TCP连接。对于效劳器-这是监听的本地端口。如果指定为0,那么随机选用一个端口。在调用了Listen方法之后,属性包含了实际选中的端口。应用于Winsock控件。 object.LocalPortlong,object是一个Winsock控件的对象表达式,数据类型Long。说明通常使用端口0在两台计算机之间动态建立连接。例如,希望效劳器回调的客户可以使用端口
16、0随机选中一个端口号,该端口号将传输给远程的效劳器。3H.263标准H.263标准主要面向于低码率的视频应用。H.263标准是基于 H.261标准, H.261标准是很早出现的视频编码标准,它的输出码率是64kbit/s的倍数。这种算法通过均衡图像质量和运动来优化带宽,所以图像快速运功时质量会下降。H.261标准的输出速率是恒定的,而图像质量非恒定【4】。H.263标准是为了支持低速率的通信而制定的标准,263标准在低码率下能够提供比H.261标准更好的图像效果,两者的区别有:1. H.263标准的运动补偿使用半象素精度,而H.261标准那么用全象素精度和循环滤波;2. 数据流层次结构的某些局
17、部在H.263标准中是可选的,使得编解码可以配置成更低的数据率或更好的纠错能力;3. H.263标准包含四个可协商的选项以改善性能;4. H.263标准采用无限制的运动向量以及基于语法的算术编码;5. 采用事先预测和与MPEG中的P-B帧一样的帧预测方法;6. H.263标准支持5种分辨率,即除了支持H.261中所支持的QCIF和CIF外,还支持SQCIF、4CIF和16CIF,SQCIF相当于QCIF一半的分辨率,而4CIF和16CIF分别为CIF的4倍和16倍。 IUT-T随后推出的H.263是H.263建议的第2版,它提供了12个新的可协商模式和其他特征,进一步提高了压缩编码性能。如H.
18、263标准只有5种视频源格式,H.263允许使用更多的源格式,图像时钟频率也有多种选择,拓宽应用范围;另一重要的改良是可扩展性,它允许多显示率、多速率及多分辨率,增强了视频信息在易误码、易丢包异构网络环境下的传输。另外,H.263对H.263标准中的不受限运动矢量模式进行了改良,加上12个新增的可选模式,不仅提高了编码性能,而且增强了应用的灵活性。H.263标准已经根本上取代了H.261标准。由于公用 网(PSTN)和无线网络上的传输速率仍然很有限,而且误码率高,H.261标准不能满足这类高压缩效率和强信道冗错能力的应用要求。针对以上压缩算法的缺乏,出现了一些新的压缩标准,如H.263和MPE
19、G-4标准。H.263以及后来的H.263+、H.26L能很好地解决低码率视频应用问题,它们在提高编码压缩效率的同时,提高码流对高误码率信道的容错能力,而且都是通过选项option的形式提供的,方便灵活,且能够兼容本标准的以前版本。H.263 第二版或称H263+是在H.263的根底上以增加编码的可选项的形式改良的,在语法上与H.263兼容,但编码效率有很大提高,适用范围也更大。其主要的应用方向仍是低码流的视频业务,用于PSTN以及无线接入的高误码比的通信环境,因此H.263在改良后既增加了一些改良编码效率的方法,同时也提高了抗误码性能的能力。由于实现本钱较低,H.263标准已经越来越多地被采
20、用。2 需求分析2.1 市场需求在计算机、网络技术高速开展的今天,传统的通讯方式如 、 等无法到达“面对面的沟通效果,不能满足人们日益增长的交流需求。视频通讯系统是支持人们远距离进行实时信息交流、让身在异地的两人能够面对面交流的应用系统。视频通讯系统实时传输视频与音频信息,使双方可以远距离进行直观、真实的视音频交流。利用多媒体技术的支持,视频通讯系统可以更好表达出自己的想法,更好利用表情进行交流,实现一个更好的,更舒适的聊天环境。视频通讯系统是一种现代化的交流系统,它可以把不同地点的两个人实时的现场场景和语音互连起来,同时向双方提供分享听觉和视觉的空间,使双方用户有“面对面交谈的感觉。随着社会
21、的开展,视频通讯的应用越来越广泛,同时对其视频音频质量、灵活性以及易用性、可靠性和易管理性的要求也越来越严格。在如今的科技快速开展时代,普通用户寻求一种更直接、更快捷的聊天方式。其实,传统的文本信息交流和语音交流已经不能满足用户的需要,视频通讯系统可以满足广阔用户的需求。由于视频通讯允许用户在可视的情况下交换信息,因而它几乎能够应用于任何情况下,增加聊天的生动性。实际上,视频系统不仅仅使用在简单的视频通讯领域,更为重要的是它将广泛应用与政府办公和商业应用中。随着计算机硬件技术和网络技术的开展,一方面基于IP网络的视频会议系统有了速度更快、运行更稳定的系统及网络平台,现在用户可以选择网络的带宽从
22、原来的64K开展到10M甚至更高;另一方面从设备购置、系统运行等方面,用户的负担已经大幅度降低,使得视频通信逐渐普遍起来,其用途将会越来越多:企业用它进行远程产品展示、远程技术支持、远程招聘;群众用它来同自己远方的亲戚朋友交流沟通;学校利用它来进行远程教学;医院用它来实现远程会诊,远程手术指导、交流;证券金融业利用它进行在线股评、大盘分析;军队利用它来高效率地指挥部队、获得一线情报【5】可以断言视频通讯仅仅是一个简单的开始,更多的应用将会出现在我们的生活中。图2-1 视频相关系统的应用情况2.2 功能分析本系统为一个局域网内点对点的视频通讯系统,要求实现在局域网上两台电脑之间的视频通讯。在另一
23、台及其上安装了本软件后,输入它的IP地址或者主机名,即可进行视频。在进行视频时,能够实现对声音,视频传输,视图的控制。能在局域网或企业内部网上实现视频交流,图像稳定,图像质量良好。2.3 环境需求运行环境:windows xp 机型:不限开发调试环境:VC+ 6.03 主要技术概述3.1 TCP/IP协议 TCP/IP协议的结构应用层是该体系机构中最高的一层。应用层确定进程之间通信的性质已满足用户的需要。这里的进程指正在运行的程序。应用层不仅要提供进程所需要的信息交换和远地操作,而且还要作为互相作用的应用进程的用户代理,来完成一些为进行语义上由意义的信息交换所必需的功能。应用层直接为用户的应用
24、进程提供效劳。有很多协议支持该层,例如:FTP协议,TFTP协议,远程终端协议TELNET,简单邮件传输协议SMTP,邮件读取协议POP3等等。FTP是基于TCP/IP协议的一个应用协议。主要实现在不同的计算机之间的数据共享。FTP 采用的是c/s模式。客户既可以下载文件也可以上传文件。当然,FTP给用户一定的权限。用户只能在权限下使用。目前,FTP的效劳器种类很多,比方常用的SERV-U,客户端程序也很多。WINDOWS也提供了一个FTP客户程序。它们都根据相同的协议标准来设计的【6】。FTP工作原理与其它的应用协议有些不同。它是用两个端口进行通信的。一个端口用于命令交互。这个端口在用户连接
25、之后一直保持;而另一个端口只是在数据传时翻开比方:上传文件,下载文件,获取效劳端文件列表,在数据传输时有两种不同的模式,一是用户开通这个数据端口,这种模式叫做主动模式;二是效劳器提供一个接口,这个模式叫被动模式。用户界面开始控制进程数据传送进程因特网控制进程数据传送进程图3-1 工作流程图SMTP 是一种提供可靠且有效电子邮件传输的协议。 SMTP 是建模在 FTP 文件传输效劳上的一种邮件效劳,主要用于传输系统之间的邮件信息并提供来信有关的通知。SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。 SMTP 重要特性之一是其能跨越网络传输邮件,即“SMTP 邮件中继。通常,一
26、个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP 传输层协议组成。使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名效劳系统DNS的邮件交换效劳器可以用来识别出传输邮件的下一跳 IP 地址。SMTP的一个重要特点是它能够在传送中接力传送邮件,传送效劳提供了进程间通信环境IPCE,此环境可以包括一个网络,几个网络或一个网络的子网。理解到传
27、送系统或IPCE不是一对一的是很重要的。进程可能直接和其它进程通过的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。SMTP设计基于以下通信模型【8】:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由SMTP发送者发出,由SMTP接收者接收,而应答那么反方面传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件那么返回OK应答。SMTP发送者再发出RCP
28、T命令确认邮件是否接收到。如果SMTP接收者接收,那么返回OK应答;如果不能接收到,那么发出拒绝接收应答但不中止整个邮件操作,双方将如此重复屡次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,那么返回OK应答。用户代理用户代理邮件效劳器邮件效劳器用户代理图3-2 SMTP协议工作图POP 协议允许工作站动态访问效劳器上的邮件,目前已开展到第三版,称为 POP3。POP3 允许工作站检索邮件效劳器上的邮件。POP3 传输的是数据消息,这些消息可以是指令,也可以是应答。创立一个分布式电子邮件系統有多种不同的技术支持和途径:POP邮局协议、DMSP分层式电子邮件系统协议和 IM
29、AP因特网信息访问协议。其中,POP 协议创立最早因此也最为人们了解;DMSP 具有较好的支持“无连接操作的性能,但其很大程度上仅限于单个应用程序PCMAIL;IMAP 提供了 POP 和 DMSP 的扩展集并提供对远程邮件访问的三种支持方式:离线、在线和无连接。POP 协议支持“离线邮件处理。其具体过程是:邮件发送到效劳器上,电子邮件客户端调用邮件客户机程序以连接效劳器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发效劳,将邮件从邮件效劳器端送到个人终端机器上,一般是 PC 机或 MAC。一旦邮件发送到 PC 机或 MAC 上,邮件效劳器上的邮件将会被删除。3.2 Winsock
30、 编程技术 Socket套接字应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发效劳的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。 区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发效劳
31、。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。 Winsock编程原理Winsock分1.1版和2.x版,从Windows98开始都使用2.x版。Winsock 2网络应用程序运行时通过使用系统目录中的动态链接库ws2_32.dll访问TCP/IP协议栈,用VC+6.0开发时,Winsock 2中所用的函数声明、常数等等均是在头文件winsock2.h内定义的,假设想使用Winsock 2,须连接的库是ws2_32.lib【9】。应用程序中使用流套接字和数据报套
32、接字的方法如下框图所示:图3-3 面向连接套接口应用程序WINSOCK是WINDOWS系统提供的一种网络文件传输协议。Winsock控件对用户是不可见的,可以很容易地访问TCP和UDP网络效劳。要编写客户和效劳器应用程序,不需要了解TCP或调用底层WinsockAPI的具体细节。通过设置Winsock控件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换。面向连接的流式套接字的通信原理为:效劳器端和客户端都必须建立通信套接字,而且效劳器端应先进入监听状态,然后客户端套接字发出连接请求,效劳器端收到请求后,建立另一个套接字进行通信,原来负责监听的套接字仍进行监听,如果有其
33、它客户发来连接请求,那么再建立一个套接字。默认状态下最多可同时接收5个客户的连接请求,并与之建立通信关系。因此应当由效劳器首先启动,然后在某一时刻启动客户机并使其与效劳器建立连接。效劳器与客户机开始都必须调用Windows Sockets API函数socket()建立一个套接字sockets,然后效劳器方调用bind()将套接字与一个本地网络地址捆扎在一起,再调用listen()使套接字处于一种被动的准备接收状态,同时规定它的请求队列长度。在此之后效劳器就可以通过调用accept()来接收客户机的连接。 Winsock的启动和中止由于Winsock 2提供的API效劳是以动态链接库ws2_3
34、2.dll实现的,所以必须先调用WSAStartup函数对ws2_32.dll进行加载初始化,协商Winsock的版本支持,并分配必要的资源。如果在调用Winsock函数前没有加载Winsock库,那么会返回SOCKET_ERROR错误,错误信息是WSANOTINITIALISED【10】。在应用程序关闭套接字后,还应调用WSACleanup函数终止卸载ws2_32.dll,释放资源.可用以下函数来实现Winsock的启动,假设Winsock启动成功那么返回true,否那么返回false。3.3 视频编码技术 视频编码分析视频是指在一定时间内连续的播放静止图像,这里面每一张静止的图像都被称之为
35、一帧frame。由人眼的视觉特点决定,每秒要播放25帧到30帧的图像,人们才能感觉到视频是连续的。随着计算机网络技术、多媒体技术的飞速开展,人们迫切需要将庞大的视频数据进行压缩,以减少磁盘空间的浪费及提高视频在网络上的传输速度。视频压缩编码就这样得到了飞速开展【11】。视频压缩主要就是减少空间冗余、时间冗余、以及统计冗余。空间冗余是指视频信号中同一幅图像内相邻或相近像素之间具有的相关性。变换编码的目的就是去除这种冗余度,一般来说,所选择的变换应具有较好的能量集中特性,使得变换之后图像的能量集中在少数几个系数中。KLT变换是目前能量集中性最好的一种变换,但是由于KLT变换的矩阵是内容相关的,计算
36、复杂度较大,因此目前大多数视频编码器中采用的是DCT变换。与KLT变换相比,DCT变换的能量集中性稍差,但是计算简便,有快速算法,因此得到了广泛的应用。时间冗余是指视频信号中不同图像的像素之间具有的相关性,特别是在运动幅度比拟小的序列中这种相关性更加明显。运动补偿用来消除这种时间冗余度,它基于差分编码的思想,只对当前信号与参考信号之间的差值进行编码。即使一帧图像中原始像素的能量很高,经过运动补偿后得到的残差信号的能量也可以显著降低,有利于降低码率。统计冗余主要指数据重复出现的概率,对于消除统计冗余最常用方法的就是使用霍夫曼编码。霍夫曼编码可以缩短数据的总长度,减少数据占用的空间,提高了压缩比率
37、。在霍夫曼编码的根底上还有可变长编码方案VCL、基于上下文的自适应变长编码CAVLC、基于上下文的自适应二进制算术编码CABAC。3.3.2 H.263编码方案 H.263是在H.261的根底上提出的,相对H.261具有更高的性能和更强的纠错能力。在H.263提出后IUT-T还推出的H.263建议,H.263是比H.263具有更高压缩编码性能的建议。相对H.261和H.263来说,H.263的应用更加普遍。H263编码主要特点如下: 1采用帧内Intraframe和帧间Interframe两种编码方法。2H.263是ITU-T为低于64kb/s的窄带通信信道制定的视频编码标准。3运动补偿采用半
38、象素精度。4传输码元采用变长编码。5无限制的运动向量以及基于语法的算术编码。6事先预测和与MPEG中的P-B帧一样的帧预测方法。H.263标准采用分层的方法来进行管理,H.263标准可以分图像序列、图像组、图像、块组层、宏块层、块层6层。3.4 VFW视频采集方案 VFW简介VFW是微软公司推出的关于数字视频的一个软件包,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫AVI的文件标准,该标准未规定 如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上
39、,以及在AVI文件中交替存储视频帧和与之相匹配的音频数据。VFW给程序员提 供.VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑【12】。在Windows 9x系统中,当用户在 安装VFW时,安装程序会自动地安装配置视频所需要的组件,如设备驱动程序、视频压缩程序等。 开发流程分析VFW视频捕捉开发流程具体步骤如下:1引用“vfw.h头文件并导入vfw32.lib库。2创立一个线程,在线程函数中调用capCreateCaptureWindow创立频捕捉窗口【13】。3调用capDriverConnect连接驱动程序,设置视频捕捉窗口风格、大小及
40、父窗口。4调用capPreviewRate函数设置预览速度,调用capPreview函数开始预览。 视频窗口创立在进行视频程序开发时,第一步需要创立一个视频预览窗口。在程序中可以使用capCreateCaptureWindow函数来创立视频预览窗口,该函数语法如下:HWND VFWAPI capCreateCaptureWindow(LPCSTR lpszWindowName, DWORD dwStyle, int x,int y, int nWidth, int nHeight, HWND hWnd, int nID);参数说明:lpszWindowName:表示视频捕捉窗口的名称。dwSt
41、yle:表示视频捕获窗口的风格,一般包含有WS_CHILD 和 WS_VISIBLE风格。x、y:表示视频捕捉窗口的左上角坐标。nWidth、nHeight:表示视频捕捉窗口的宽度和高度。hWnd:表示视频捕捉窗口父窗口的句柄。nID:表示视频捕捉窗口标识。 视频预览实现视频预览实现过程:1创立一个基于对话框的工程,在对话框中添加Picture控件。2在类向导的“Member Variables选项卡中为Picture控件命名,类型为CStatic。3在对话框的头文件中引用“vfw.h头文件,然后链接“vfw32.lib库文件。4在对话框中定义一个视频预览窗口的句柄。HWND m_hWndVi
42、deo; /视频显示窗口5在对话框初始化时创立视频预览窗口,连接视频驱动程序,设置预览帧率,开始视频预览。详见附录6在对话框关闭时断开视频驱动程序。 捕捉参数设置在进行视频捕捉时,通常需要设置视频捕捉参数。VFW提供了capCaptureSetSetup函数用于设置视频捕捉参数,该函数语法如下:BOOL capCaptureSetSetup(HWND hwnd, LPCAPTUREPARMS psCapParms,UINT wSize );参数说明:hwnd:表示视频捕捉窗口句柄。psCapParms:表示视频捕捉参数,该参数是CAPTUREPARMS结构指针。wSize:表示psCapPar
43、ms参数的大小。 回调函数设计在开发视频应用程序时,可以为视频捕捉窗口设计一些回调函数,这样,当视频应用程序的某些状态改变时,可以在回调函数中进行处理【14】。VFW提供了如下的函数进行回调函数注册。1capSetCallbackOnCapControl该函数提供了视频捕捉时精确地控制捕捉开始和结束的时间。语法如下:BOOL capSetCallbackOnCapControl(HWND hwnd, CAPCONTROLCALLBACK fpProc );参数说明:hwnd:表示视频捕捉窗口句柄。fpProc:表示视频捕捉回调函数指针。2capSetCallbackOnError该函数用于为客
44、户端应用程序设置错误处理的回调函数。语法如下:BOOL capSetCallbackOnError(HWND hwnd, CAPERRORCALLBACKA fpProc);参数说明:hwnd:表示视频捕捉窗口句柄。fpProc:表示错误处理的回调函数指针。3capSetCallbackOnFrame该函数用于设置预览回调函数,回调函数在预览帧之前调用。语法如下:BOOL capSetCallbackOnFrame(HWND hwnd, CAPVIDEOCALLBACK fpProc );参数说明:hwnd:表示视频捕捉窗口句柄。fpProc:表示预览回调函数指针。4capSetCallbac
45、kOnStatus该函数用于在程序中设置一个状态回调函数。语法如下:BOOL capSetCallbackOnStatus(HWND hwnd, CAPSTATUSCALLBACKA fpProc );参数说明:hwnd:表示视频捕捉窗口句柄。fpProc:表示回调函数指针,当应用程序的状态改变时将调用该函数。5capSetCallbackOnVideoStream该函数用于注册一个回调函数,使得视频缓冲区被填充时调用回调函数。语法如下:BOOL capSetCallbackOnVideoStream(HWND hwnd, CAPVIDEOCALLBACK fpProc );参数说明:hwnd
46、:表示视频捕捉窗口句柄。fpProc:表示回调函数指针,当视频缓冲区被填充时调用回调函数。6capSetCallbackOnWaveStream该函数用于注册一个回调函数,使得音频缓冲区被填充时调用回调函数【15】。语法如下:BOOL capSetCallbackOnWaveStream (HWND hwnd, CAPWAVECALLBACK fpProc );参数说明:hwnd:表示视频捕捉窗口句柄。fpProc:表示回调函数指针,当音频缓冲区被填充时调用回调函数。7capSetCallbackOnYield该函数用于注册一个回调函数,使得在每一次捕捉视频帧时调用一次回调函数。语法如下:BOOL capSetCallbackOnYield(HWND hwnd, fpProc );参数说明:hwnd:表示视频捕捉窗口句柄。fpProc:表示回调函数指针。3.5 音频采集技术下面是一些音频采集接口及方法:1. MCI音频接口:通过向媒体设备发送命令的方式实现对硬件设备进行控制。MCI媒体控制接口可以通过两种方式