网络视频聊天工具的设计与实现毕业论文__第1页
网络视频聊天工具的设计与实现毕业论文__第2页
网络视频聊天工具的设计与实现毕业论文__第3页
网络视频聊天工具的设计与实现毕业论文__第4页
网络视频聊天工具的设计与实现毕业论文__第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 . . . 学号:南湖学院毕毕业业设设计计题 目:网络聊天工具的设计与实现作 者届 别2010 届系 别机械与电子工程系专 业计算机科学与技术指导老师职 称讲师完成时间2010 年 5 月 18 日 . . . 摘要摘要视频聊天系统作为一种新型的通信和交流工具,突破了地域的限制,可以提供更为便捷、灵活、全面的音、视频信息的传递和服务,具有极其广泛的发展前景。本文介绍了采用 Microsoft Visual C+ 6.0 编程开发视频聊天系统的一套比较常用的解决方案。文字聊天采用 TCP 模式;语音视频聊天采用 UDP 模式,在客户端之间点对点的进行。在该方案中,通过函数库 VFW 来实现视频

2、捕获、影像压缩以与影像播放。微软公司提供的专门用于视频捕获开发的工具包 VFW,为在 Windows 操作系统中实现视频捕获提供了标准的接口,从而大大降低了程序的开发难度。在视频传输方面,则通过组建视频帧,将位图形式的视频帧压缩成帧格式的 Mpeg4 流,传输到客户端后,解压并显示影像。同时,在本方案中,采用了线程来实现语音录制和语音回放,最终实现了通过服务器中转的文字聊天、点对点的语音视频聊天。关键词:文字聊天;视频捕获;视频传输;语音录制与回放 . . . II / 33AbstractAbstractAs a new tool about communication, video cha

3、tting system has broken through geographical restrictions, has provides more convenient, flexible and complete transmission and service. Furthermore, it has a very bright future.The common solution about how to develop a video chatting system is introduced by the Microsoft Visual C + + 6.0 programmi

4、ng. TCP model is used in the text chatting and UDP for the point-to-point video chats between the Clients. In this plan, Video Capture, Video Compression Manager and DrawDib are realized by the functions of VFW Library. The special kit VFW (Video for Windows) in video capture offered by Microsoft Co

5、rporation, has provided a standard interface for video capture in Windows Operating System and thus greatly reduced the hardship of programming. In video transmission aspect, it requires a video frame which is compressed the video frame of bitmap into Mpeg4 steam of frame form. Then it will be decom

6、pressed into images since it has been arrived the Client. Meanwhile, the thread is used to achieve audio recording and replaying. Finally, it has realized the text chatting through a server to transit, the point-to-point audio and video chats.Keywords:Keywords: text chatting; Video Capture; video tr

7、ansmission; audio recording and playing . . . III / 33目录目录摘摘 要要 I IABSTRACTABSTRACTIIII第一章第一章引引 言言 1 11.1 课题背景 11.2 国外研究现状 11.3 本课题研究的意义 2第二章第二章 理论知识介绍理论知识介绍 4 42.1 C+语言的介绍 42.2 VFW 简介 52.3 C/S 结构的介绍 82.4 线程的实现方法 9第三章第三章 需求分析需求分析 11113.1 软硬件环境 113.2 需求分析 11第四章第四章 系统结构系统结构 13134.1 硬件结构 134.2 软件结构 134

8、.2.1 功能需求 134.2.2 系统功能模块图 144.3 系统各模块流程图 14第五章第五章 系统的详细设计系统的详细设计 16165.1 文字聊天 16 . . . IV / 335.1.1 TCP 套接字的运用 165.1.2 文字聊天实现 175.2 语音视频聊天 195.2.1 UDP 套接字的运用 195.2.2 视频的捕获 205.2.3 捕获窗口 225.2.4 视频捕获驱动 245.2.5 语音录制 245.2.6 语音回放 255.2.7 视音频的传输 26结结 论论 2828参考文献参考文献 2929致致 3030 . . . 第一章引 言3.1 1.1 课题背景随着

9、互联网技术的发展,互联网应用越来越丰富。互联网以其独特的传播方式吸引了大量用户,同时也给人们带来了许多便利,譬如可以借助于网络进行相互交流、信息传递等。聊天工具作为互联网中运用最为广泛的通信工具之一,它可以让用户之间进行即时的交流和信息的传递。聊天工具的出现可以说是基于互联网通信交流方式的历史性变革,它已经渐渐取代了原来效率低、费用高的如信件、电报的通信方式,以其快速、交互、简便的方式给用户的交流提供了简单、易用的信息平台,成为现今应用最为广泛的即时通信工具之一。随着相关技术的日益发展,用户对功能的需求不断提高。为了更好地服务于用户,聊天工具的功能也在不断地完善。在未来的网络时代中,聊天工具将

10、以即时通信为其基本特点,并与各种网络应用整合,同时随着无线网络的广泛应用,它将成为未来不可缺少的一种通信软件。本毕业设计的目的主要是为了满足人们通讯交流的便捷,实现灵活、全面的语音、视频信息的传递和服务。模拟腾讯公司的聊天软件,开发一个多功能的聊天系统软件,本毕业设计主要实现视频语音聊天、文字聊天功能。3.2 1.2 国外研究现状中国的大部分网络用户都拥有自己的。腾讯计算机系统成立于 1998 年 11 月。1999 年 2 月,腾讯自主开发了基于 Internet 的即时通信网络工具腾讯即时通信 Tencent Instant Messenger,简称 TIM 或腾讯。腾讯经过三年时间的发展

11、,到 2002 年,其用户群成为中国最大的互联网注册用户群,注册用户达到 1 亿 6000 万,其中活跃用户总数超过 5000 万。自此腾讯成为中国最大的即时通信服务提供商。腾讯公司是中国最早也是目前中国市场上最大的本土互联网即时通信软件开发商。公司成立 7 年多以来,一直以追求卓越的技术为导向,始终处于稳健、高速发展的状态。腾讯超过 4.3亿的注册用户群体现了网络用户对腾讯这一聊天工具的广泛应用。在当今市场经济高速发展的前提下,腾讯也在不断自我完善,渐渐地演变为一个人性化、市场化的多功能的聊天工具软件,它可以给网络聊天用户带来越来越多的人性化服务:从原来单一的文字聊天过渡到集语音、视频、文件

12、传输等多功能于一身的聊天软件。ICQ 和 MSN 是在国外比较盛行的即时聊天工具,腾讯的开发对 MSN 和 ICQ 都进行了借鉴。ICQ 是 I Seek You(我找你)的缩写,最初是一家以色列公司开发出来的免费软件,中文名称目前可以称之为“网络呼叫器” ,它在全球拥有超过 4000 万的用户。事实上这种软件最主要的功能就是让用户知道网络上的朋友现在有没有上线(前提是 . . . 6 / 33对方也有安装 ICQ) ,然后可以互送 Messages(消息)交谈或是交换档案等等,比电子更具即时性。正如一位 ICQ 软件的最初程序设计员所说:“当你登录因特网之后,你周围都是些自己熟悉的人,而且,

13、你还可以和他们分享这种体验,这的确是一件令人激动的事情。 ”MSN 是微软推出的聊天软件,是一套类似 ICQ 的网上即时通讯软件,它以最简单的方式为用户提供强有力的即时消息支持,同时能使 Microsoft Outlook Express(R) 和 MSN Hotmail(R)变得更简单易用。MSN Messenger Service 还可使用户间的联机交谈变得更加轻松愉快,了解谁在联机以与查看用户何时联机并与其交换即时消息。用户间可以进行单独的聊天,或者在同一个对话窗口中与多达四个的联系人进行聊天。自动的输入指示器可让用户知道何时联系人正在输入答复,还可以进行全球呼叫以非常低的费用呼叫世界的

14、任何地方。用户可以选择所要使用的服务提供商,从服务提供商的列表中选择最适合的提供商。用交谈取代键盘输入,使用计算机上的话筒和扬声器就可以和位于世界各地的朋友进行交谈,甚至可以呼叫联系人将文本消息发送到联系人的移动和传呼机上(注:此特性仅适用于美国和加拿大) ,而进入“聊天室”结识新朋友,或加入与名人聊天,此特性在所有地区都适用。用户可以使用 MSN Messenger 与朋友交换照片、喜爱的音乐或任何其他文件,也可以监视新的电子并查看用户有多少新的电子。MSN Messenger 能在收到新的 Hotmail 时通知用户,还能邀请联系人进行联机 DirectPlay 兼容游戏。3.3 1.3

15、本课题研究的意义在当今信息时代,信息通信已成为这个世纪必不可少的组成部分,随着互联网技术的发展,聊天软件作为即时性通信工具的主流,已被越来越多的人所喜爱。在中国,上网的用户几乎都用腾讯进行聊天。当前腾讯的注册已经超过 4.3 亿,是中国用户最多、最为流行的聊天工具。起初的只支持文字聊天,随着相关技术的发展,腾讯也不断的自我完善,增加众多实用的、人性化的功能,得到了许多用户的支持与喜爱。现如今腾讯公司已经初步完成了面向在线生活产业模式的业务布局:构建了、 .、游戏以与移动手机门户这四大网络平台,形成了规模巨大的网络社区。在满足用户信息传递与知识获取需求方面,拥有门户、即时通讯工具以与年初收购的

16、Foxmail 电子等;在满足用户群体交流和资源共享方面,腾讯推出的个人博客 Q-Zone 将与访问量极大的论坛、聊天室、群相互协同;在满足用户个性展示和娱乐服务方面,腾讯拥有非常成功的虚拟形象产品 show、 pet(宠物)和 Game(游戏) Music/Radio/LiveTV(音乐/电台/电视直播)等,另外对手机用户提供了彩铃、彩信等无线增值业务;在用户的交易需求方面,专门为腾讯用户设计开发的 C2C 电子商务拍卖网已经上线,并和整个社区平台无缝整合。像这样聊天工具已经逐渐适应了时代的发展,市场的需求,给人们提供了全方位的信息服务平台,使用户在互联网上的生活更加丰富多彩 . . . 7

17、 / 33,它不仅带来了巨大的商业价值,而且也给人们的生活带来了无比的欢乐与便利。第二章 理论知识介绍3.4 2.1 C+语言的介绍C+语言是一种优秀的面向对象程序设计语言,它在 C 语言的基础上发展而来,但它比 C 语言更容易为人们学习和掌握。C+以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C+完美地体现了面向对象的各种特性5。 . . . 8 / 33(1)C+支持数据封装 支持数据封装就是支持数据抽象。在 C+中,类是支持数据封装的工具,对象则是数据封装的实现。面向过程的程序设计方法与面向对象的程序设计方法

18、在对待数据和函数关系上是不同的,在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义,数据将被隐藏在封装体中,该封装体通过操作接口与外界交换信息。对象被说明具有一个给定类的变量,类类似于 C 语言中的结构,在 C 语言中可以定义结构,但这种结构中包含数据,而不包含函数。C+中的类是数据和函数的封装体。在 C+中,结构可作为一种特殊的类,它虽然可以包含函数,但是它没有私有或保护的成员。 (2)C+类中包含私有、公有和保护成员 C+类中可定义三种不同访控制权限的成员。一种是私有(Private)成员,只有在类中说明的函数才能访问该类的私有成员,而在该类外的函数不可以

19、访问私有成员;另一种是公有(Public)成员,类外面也可访问公有成员,成为该类的接口;还有一种是保护(Protected)成员,这种成员只有该类的派生类可以访问,其余的在这个类外不能访问。 (3)C+过发关消息来处理对象 C+中是通过向对象发关消息来处理对象的,每个对象根据所接收到的消息的性质来决定需要采取的行动,以响应这个消息。响应这些消息是一系列的方法,方法是在类定义中使用函数来定义的,使用一种类似于函数调用的机制把消息发送到一个对象上。 (4)C+中允许友元破坏封装性 类中的私有成员一般是不允许该类外面的任何函数访问的,但是友元便可打破这条禁令,它可以访问该类的私有成员(包含数据成员和

20、成员函数)。友元可以是在类外定义的函数,也可以是在类外定义的整个类,前者称友元函数,后者称为友元类。友元打破了类的封装性,它是 C+另一个面向对象的重要牲。 (5)C+允许函数名和运算符重载 C+支持多态性,C+允许一个一样的标识符或运算符代表多个不同实现的函数,这就称标识符或运算符的重载,用户可以根据需要定义标识符重载或运算符重载。 (6)C+支持继承性 C+中可以允许单继承和多继承。一个类可以根据需要生成派生类。派生类继承了基类的所有方法,另外派生类自身还可以定义所需要的不包含在父类中的新方法。一个子类的每个对象包含有从父类那里继承来的数据成员以与自己所特有的数据成员。 (7)C+支持动态

21、联编 C+中可以定义虚函数,通过定义虚函数来支持动态联编4。3.5 2.2 VFW 简介VFW 是 Microsoft 1992 年推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW 的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫 AVI 的文件标准,该标准未规定如何对视频进行捕获、压缩与播放,仅规定视频和音频 . . . 9 / 33该如何存储在硬盘上,以与在 AVI 文件替存储视频帧和与之相匹配的音频数据。VFW 给程序员提供 VBX 和 AVICap 窗口类的高级编程工具,使程序员能通

22、过发送消息或设置属性来捕获、播放和编辑视频剪辑。用户不必专门安装 VFW,在安装 Windows 时,安装程序会自动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等6。VFW 主要由以下六个模块组成:(1)AVICAP.DLL:包含了执行视频捕获的函数,它给 AVI 文件、I/O 和视频音频设备驱动程序提供一个高级接口。(2)MSVIDEO.DLL:用一套特殊的 DrawDib 函数来处理屏幕上的视频操作。(3)MCIAVI.DRV:此驱动程序包括对 VFW 的 MCI 命令的解释器。(4)AVIFILE.DLL:支持由标准多媒体 I/O(mmio)函数提供的更高的命令来访问AVI 文

23、件。(5)压缩管理器(ICM):管理用于视频压缩/解压缩的编解码器(CODEC) 。(6)音频压缩管理器 ACM:提供与 ICM 相似的服务,不同的是它适于波形音频。Visual C+在支持 VFW 方面提供有 vfw32.lib、msacm32.lib、winmm.lib 等库。特别是它提供了功能强大、简单易行、类似于 MCIWnd 的窗口类 AVICap。AVICap 为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。AVICap 支持实时的视频流捕获和单帧捕获,并提供对视频源的控制。虽然 MCI 也提供数字视频服务,比如

24、,它为显示 AVI 文件的视频提供了 AVIVideo 命令集,为视频叠加提供了 overlay 命令集,但这些命令主要是基于文件的操作,不能满足实时地直接从视频缓存中获取数据的要求。对于使用没有视频叠加能力的捕获卡的 PC 机来说,用 MCI 提供的命令集是无法捕获视频流的。而 AVICap 在捕获视频方面具有一定的优势,它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时,它也可将数字视频捕获到文件。在视频捕获之前需要创建一个捕获窗,所有的捕获操作与其设置都以它为基础。用 AVICap 窗口类创建的窗口(通过 capCreateCaptureWindow 函数创建)被称为

25、“捕获窗” ,其窗口风格一般为 WS_CHILD 和 WS_VISIBLE。实际上,捕获窗类似于标准控制(如按钮、列表框等) 。捕获窗具有下列功能:(1)将视频流和音频流捕获到一个 AVI 文件中;(2)动态地同视频和音频输入器件连接或断开;(3)以 Overlay 或 Preview 模式对输入的视频流进行实时显示;(4)在捕获时可指定所用的文件名并能将捕获文件的容拷贝到另一个文件;(5)设置捕获速率;(6)显示控制视频源、视频格式、视频压缩的对话框;(7)创建、保存或载入调色板;(8)将图像和相关的调色板拷贝到剪贴板; . . . 10 / 33(9)将捕获的一个单帧图像保存为 DIB 格

26、式的文件。AVICap 在显示视频时提供的两种模式:(1)预览(Preview)模式:该模式使用 CPU 资源,视频帧先从捕获硬件传到系统存,接着采用 GDI 函数在捕获窗中显示。在物理上,这种模式需要通过 VGA 卡在监视器上显示。(2)叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不经过 VGA 卡,叠加视频的硬件将 VGA 的输出信号与其自身的输出信号合并,形成组合信号显示在计算机的监视器上。只有部分视频捕获卡才具有视频叠加能力。灵活编写 AVICap 提供的回调函数还可满足一些特殊需求。比如,将宏 capCaptureSequenceNoFile 同用 ca

27、pSetCallbackOnVideoStream 登记的回调函数一起使用,可使应用程序直接使用视频和音频数据。在视频聊天的应用程序中可利用这一点来获得视频帧,回调函数将捕获的图像传到远端的计算机。应用程序可用捕获窗来登记回调函数(由用户编写,而由系统调用) ,以便在发生下列情况时,它能通知应用程序,作出相应的反应:捕获窗状态改变;出错;视频帧和音频缓存可以使用;在捕获过程中,其它应用程序处于让步(Yield)地位。视频捕获编程也要用到涉与视频捕获的结构、宏、消息和函数。令人高兴的是,发送 AVICap 窗口消息所能完成的功能都能调用相应的宏来完成。例如,SendMessage(hWndCap

28、,WM_CAP_DRIVER_CONNECT,0,0L)与 capDriverConnect(hWndCap,0)的作用一样,都是将创建的捕获窗同视频输入器件连接起来。视频部分主要是利用 Video Capture 函数库来获取影像的。Video Capture 主要提供下列功能:连接驱动程序;获取影像、声音资料,并显示在屏幕上或者是存成 AVI文件;获取单影像显示在屏幕上,拷贝至剪贴簿,或者是存成 DIB(Device-Independent Bitmap)文件。Video Capture 的主要结构:结构体 CAPTUREPARAMS 主要包含一些获取图像的参数:DWORD dwReque

29、stMicroSecPerFrame 代表相邻两个 frame 的获取时间间隔;BOOL fYield 值为 TRUE,则表示 Windows 会以另一个 thread 来捕获影像,值为 FALSE,程序会在捕捉影像后显示忙碌状态;BOOL fCaptureAudio 其值表示是否需要同时获取声音资料。结构体 BITMAPINFO 和点阵图有关,主要定义了影像获取之后显示在屏幕上、存储在文件中的格式,它包含两个成员:BITMAPINFOHEADER bmiHeader 描述影像性质的结构,其成员记载了影像的大小、颜色深度和压缩的方式,该成员在 Video Capture、Video Compr

30、ession Manager 和 DrawDib 函数库中,以与有关于点阵图的应用中;RGBQUAD bmiColors 指向 color table 第一个元素的位置。结构体 COMPVARS 主要是记录所有和压缩相关的信息,重要的成员:DWORD fccHandler 为 compressor 句柄;LPBITMAPINFO lpbiIn 指向待压缩影像 BITMAPINFO 的指标;LPBITMAPINFO lpbitOut:指向压缩完影像 BITMAPINFO 的指标;LONG lKey 代表 key- . . . 11 / 33frame rate,而所谓 key frame 是指此

31、 frame 在解压缩时不需要依赖前面的 frame;LONG lQ 代表影像压缩后的品质,取值为 110000 的整数。Video Compression Functions 主要记录压缩功能相关的信息,其包含的比较重要的成员:ICLocate 输入指向压缩前后 BITMAPINFO 的指标,以与欲使用的 codecs;ICCompressorChoose 呼叫一个系统建的对话,其中包含所有可能使用的 codes 以与其相关参数;ICCompressQuery 询问 compressor 是否支持某种压缩方式,输入参数为 compressor handle 与指向压缩前后 BITMAPINF

32、O 的指标,此函数会传回询问结果;ICCompressBegin 要求系统准备相关资源以供压缩之用;ICCompress 压缩某个 frame;ICCompressEnd 归还相关资源给系统;ICDompressQuery 询问 decompressor 是否支持某种解压缩方式;ICDompressBegin 要求系统准备相关资源以供解压缩之用;ICDompress 解压缩某一个 frame;ICDompressEnd 归还相关资源给系统;ICDompressFree 归还 COMPVARS所占用的资源3。3.6 2.3 C/S 结构的介绍C/S(client/server)结构,即被广为熟知

33、和使用的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 client 端和 server 端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是 client/server 形式的两层结构,由于现在的软件应用系统正在向分布式的 web 应用发展,web 和 client/server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,部用户和外部用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。传统的 c/s体系结构虽然采用的是开放模式,但这只是系统开发一级的开

34、放性,在特定的应用中无论是 client 端还是 server 端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,c/s 结构的软件需要针对不同的操作系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。C/S 架构软件的优势与劣势:(1)应用服务器运行数据负荷较轻。最简单的 C/S 体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对

35、应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。 . . . 12 / 33(2)数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程

36、,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小” ,麻烦的事情都交给了服务器和网络。在 C/S 体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。(3)C/S 架构的劣势是高昂的维护成本且投资大。首先,采用 C/S 架构,要选择适当的数据库平台来实现数据库数据的真正“统一” ,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护

37、和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大11。3.7 2.4 线程的实现方法线程是一个独立的执行流,是进程部的一个独立的执行单元,相当于一个子程序,它对应于 Visual C+中的 CWinThread 类对象。单独一个执行程序运行时,缺省地包含了一个主线程,主线程以函数地址的形式出现,提供程序的启动点,当主线程终止时,进程也随之终止。根据实际需要,应用程序可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,使用该进程的全局变量和系统资源。操作系统给每个线程分配不同的 CPU 时间片,在某一个时刻,CPU 只

38、执行一个时间片的线程,多个时间片中的相应线程在 CPU 轮流执行,由于每个时间片时间很短,所以对用户来说,仿佛各个线程在计算机中是并行处理的。操作系统是根据线程的优先级来安排 CPU 的时间,优先级高的线程优先运行,优先级低的线程则继续等待。Windows 提供了两种线程:用户界面线程和工作线程(又称为后台线程) 。用户界面线程通常用来处理用户的输入并响应各种事件和消息,其实,应用程序的主执行线程 CWinApp 对象就是一个用户界面线程,当应用程序启动时自动创建和启动,同样它的终止也意味着该程序的结束,进程终止。工作线程用来执行程序的后台处理任务,比如计算、调度、对串口的读写操作等,它和用户

39、界面线程的区别是它不用从 CWinThread 类派生来创建,对它来说最重要的是如何实现工作线程任务的运行控制函数。工作线程和用户界面线程启动时要调用同一个函数的不同版本;一个进程中的所有线程共 . . . 13 / 33享它们父进程的变量,但同时每个线程可以拥有自己的变量7。这里主要介绍用户界面线程的运用:(1)线程的启动创建一个用户界面线程,首先要从类 CwinThread 产生一个派生类,同时必须使 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 来声明和实现这个 CwinThread 派生类。第二步是根据需要重载该派生类的一些成员函数如:ExitInst

40、ance() 、InitInstance() 、OnIdle() 、PreTranslateMessage()等函数。最后调用 AfxBeginThread()函数的一个版本:CWinThread* AfxBeginThread (CRuntimeClass* pThreadClass,int nPriority=THREAD_PRIORITY_NORMAL,UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL)启动该用户界面线程,其中第一个参数为指向定义的用户界面线

41、程类指针变量,第二个参数为线程的优先级,第三个参数为线程所对应的堆栈大小,第四个参数为线程创建时的附加标志,缺省为正常状态,如为 CREATE_SUSPENDED 则线程启动后为挂起状态。(2)线程的优先级CwinThread 类的成员函数用于线程优先级的操作:int GetThreadPriority() ;BOOL SetThradPriority()(int nPriority);(3)线程的挂起和恢复CWinThread 类中包含了应用程序挂起和恢复它所创建的线程的函数,其中 SuspendThread()用来挂起线程,暂停线程的执行;ResumeThread()用来恢复线程的执行。如

42、果你对一个线程连续若干次执行 SuspendThread() ,则需要连续执行相应次的 ResumeThread()来恢复线程的运行。(4)结束线程终止线程有三种途径,线程可以在自身部调用 AfxEndThread()来终止自身的运行;可以在线程的外部调用 BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode)来强行终止一个线程的运行,然后调用 CloseHandle()函数释放线程所占用的堆栈;第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止。 . . . 14 / 33第三章 需求分析3.8 3.1 软硬件环境电脑两台以上,

43、分别配有摄像头、麦克风、音箱或耳机等外部设备;Windows XP系统,Microsoft Visual Studio 6.0 编程开发系统等。3.9 3.2 需求分析在同一个局域网中,如何根据自身业务的要求,量身定制,对视频设备进行合理搭配,选择一套合理的视频聊天室系统。如何来满足局域网部用户的通讯要求,在考虑到网络带宽的同时,提高视频清晰度,动态画面的流畅,语音的实时传输等,正是现代社会通讯所必需的。设计本系统时,分析网络承载、整个系统结构的组建等是实现局域网文字聊天和语音视频聊天所必需的。文字、语音视频聊天作为一种广泛的网络应用对其基础的承载网络环境有着较高的网络要求。其中应重点考虑的是

44、网络的带宽情况、端到端的时延、时延抖动、丢包率等问题。(1)网络带宽需求,视频聊天对网络的带宽需求为“视频带宽+IP 开销” ,计算方法为:网络带宽 = 视频带宽 1.2。(2)端到端的时延,网络传输不可避免的会发生传输时延,通常建议视频聊天的通用时延小于 150ms。(3)时延抖动,由于音频/视频的传输为实时的交互,因此网络的时延抖动更为重要,一般,视频聊天的时延抖动控制在 50ms。(4)丢包率,网络数据传输经常会出现丢包现象,视频传输过程中数据丢包严重的话会影响在线视频聊天质量。因此,在设计上应将网络上的丢包率控制在 1%以。 . . . 15 / 33视频聊天对实时性要求较高的网络应用

45、,作为其基础的承载网络有较高的宽带和对网络中的业务流量有较高的控制能力。而视频聊天系统本身对带宽的要求为 62kbit/s2Mbit/s,但是为了满足流畅的视音频效果,要求带宽不低于 384kbit/s。文字、视频聊天的功能和应用效果体现在客户端,而服务器端则是必不可少的,对于系统的需求分析在系统设计的过程中应该明确、细致:(1)文字聊天:首先启动服务器端,当用户启动客户端时,用服务器保存的用户名和密码来验证客户是否已经登录到服务器。只有当有两个以上的用户启动客户端时,才可以进行文字聊天,聊天容要经过服务器中转,分别在服务器端和两个聊天的客户端显示聊天。(2)语音视频聊天:在有两个客户在线的情

46、况下,才能进行语音视频聊天。两个用户要进行语音视频聊天时,一个用户选中另一个用户的用户名,根据该用户名在后台链表中的对应 IP 地址查找用户并请求视频连接。当双方确认视频连接后就进行视频传输,并显示在客户端,同时用线程实现语音录制和回放。这样,两个用户就实现了点对点的语音视频聊天。在进行语音视频聊天的过程中,不能再与其它用户进行语音视频聊天,但能够与其它用户进行文字聊天。 . . . 16 / 33第四章 系统结构3.10 4.1 硬件结构该系统采用的是 Server/Client 结构,服务器端是一台 PC 机,而客户端是 PC 机和一个数字摄像头、耳机和麦克风。它们进行文字聊天时,要经过服

47、务器进行中转,而当进行语音视频聊天时是客户端与客户端之间直接进行的点对点的连接,它们之间的网络拓扑结构如图 1。在图中,为了简便,没有画出麦克风、音箱或耳机等外部设备。图 1 网络拓扑结构图3.11 4.2 软件结构3.11.14.2.1 功能需求通过需求调研并分析,确定系统具备的基本功能,包括:文字聊天、语音视频聊天。(1)文字聊天:文字聊天采用的是 TCP 模式,包括服务器端和客户端。首先启动服务器端,客户 . . . 17 / 33端通过用户名和密码登录服务器,服务器响应客户端登录并提示有用户登录,此时两个用户就可以进行文字聊天,在文字聊天时通过服务器中转,而每个用户可以同时与多个用户进

48、行文字聊天。当有用户退出时,服务器做出响应,提示在线用户,用户下线。(2)语音视频聊天:语音视频聊天时采用的是 UCP 模式,客户端与客户端点对点的进行,不需要经过服务器端中转。在文字聊天的基础上,客户端之间自行处理的语音视频聊天,运用 VFW函数库中的函数对 USB 口输入的数字视频信息进行相关处理,比如:视频捕获、影像压缩以与影像播放等,同时利用线程来处理声音部分的录制、回放等。A 客户端向 B 客户端请求语音视频聊天是通过 B 客户端的用户名来获得 B 客户端的 IP 地址,并向 B 客户端发送语音视频聊天请求,当 B 客户端接受后捕获视频,并进行压缩传输到 A 客户端解压并进行显示,在

49、 B 客户端接受视频的同时,A 客户端也捕获视频,压缩传输到 B 客户端解压并进行显示。3.11.24.2.2 系统功能模块图该系统分为服务器端和客户端,完成了文字聊天和语音视频聊天,使用上只有文字聊天时才会通过服务器端,而对于语音视频聊天就只需要对整个在线客户端两两之间进行点对点的视频聊天。而在语音视频时包括了视频捕获、视频压缩、解压缩、语音录制、语音回放以与视频传输等。整个系统的功能模块图如图 2。基基于于局局域域网网的的视视频频聊聊天天室室系系统统语语音音视视频频聊聊天天视视频频捕捕获获视视频频压压缩缩、解解压压缩缩视视频频传传输输服服务务器器中中转转语语音音录录制制语语音音回回放放文文

50、字字聊聊天天图 2 系统功能模块图3.12 4.3 系统各模块流程图在整个系统中主要运行两个功能:图 3 文字聊天流程图和图 4 语音视频聊天流程图。 . . . 18 / 33图 3 文字聊天流程图图 4 语音视频聊天流程图第五章 系统的详细设计 . . . 19 / 333.13 5.1 文字聊天3.13.15.1.1 TCP 套接字的运用在文字聊天时,服务器端与客户端的连接是采用的 TCP 套接节进行连接。TCP 套接字的使用如图 5。创建 CSocket 对象 CSocketServer 来处理服务器端与客户端的连接,CSocket 继承于 CasyncSocket,是 Windows

51、 Socket API 的高层抽象。CSocket 通常和CsocketFile 以与 Carchive 类混合使用,这两个类负责数据的发送和接收。要使用 CSocket 对象,首先要调用构造函数,然后调用 Create 函数创建一个 Socket 句柄。CSocket 函数缺省是创建一个流 Socket;如果没有使用 CArchive 类,那么还可以创建一个数据报 Socket。服务器端调用 Accept,客户端调用 Connect,然后创建一个 CsocketFile 去关联 CSocket。接下来的操作可以创建 CArchive 对象关联 CsocketFile,以用来发送和接收数据2。

52、图 5 TCP 套接字的使用3.13.25.1.2 文字聊天实现ChatServer 服务器运行时,利用一个 CSocket 对象 CSocketServer 启动服务器,用函数 gethostname 来获得服务器端主机名和 IP,同时在服务器对话框中显示服务器IP,并将分配的固定端口号 8123 显示在对话框中。用一个 list 列表显示在线用户, . . . 20 / 33随时更新用户登录情况,用一个 edit box 显示客户端的聊天容以与系统提示消息。每一个 ChatClient 客户端启动时,利用服务器定的用户号和密码来登录(如图 6)。在整个系统中,利用链表来处理所有的用户信息:

53、当有用户登录时,在链表尾部加入该用户信息;当用户下线时,在该链表中删除用户,并提示所有用户,该用户下线。在对链表进行操作的同时,要更新 list 列表中的信息。图 6 用户登录界面ChatServer 服务器端响应客户端文字聊天时的中转情况如图 7。图 7 服务器响应文字聊天信息中转ChatClient 客户端两两间进行文字聊天时,发送信息的处理函数如下:void CChatClientDlg:OnChatBtSend() /发送信息按键if( !m_bConnect)SetMessageBox(请连接服务器!rn);return ;CString str;CString szUserName

54、;CMesg msg;GetDlgItemText(IDC_MESSAGE,str);GetDlgItemText(IDC_USERNAME,szUserName); . . . 21 / 33if( str.GetLength() = 0 )SetMessageBox(请输入想要发送的信息!rn);return ;if ( szUserName.GetLength() SendM(&msg);AddReceiver(szUserName , true);AddChatMessage(str);在聊天两个客户端的信息情况如图 8 和图 9 所示。图 8 发送文字信息 . . . 22

55、/ 33图 9 接收文字信息3.14 5.2 语音视频聊天3.14.15.2.1 UDP 套接字的运用在实现语音视频聊天时,采用的是基于 UDP 套接字的点对点模式,而 UDP 面向的是无连接的数据服务,其套接字的使用如图 10 所示。 . . . 23 / 33图 10 UDP 套接字的使用3.14.25.2.2 视频的捕获利用 VFW 接口,视频捕获可以分为以下几个步骤:(1)建立视频采集窗口:该窗口用来接收视频捕捉驱动程序传来的数据和消息。(2)连接视频驱动程序:将建立的视频捕捉窗口与视频设备驱动程序相连。(3)视频捕获初始化。(4)视频捕捉设置:VFW 下视频捕捉参数的设置可以通过调用

56、函数或弹出对话框的形式来实现。一般视频驱动程序允许设置的参数包括视频源选择、视频格式、视频显示格式等。(5)设置回调函数:通过回调函数来通知程序视频事件的发生,比如捕捉一帧图像成功的消息,捕捉出错的消息等。(6)结束捕捉:结束捕捉是应该有一些清除工作。如释放分配的存,断开捕捉窗口与视频捕捉驱动程序的连接,清除视频捕捉窗口等。窗口类为捕获数字视频流与其相关操作提供了很大的方便,灵活编写其中的回调函数可满足实时视频传输的需要,例如应用程序可直接从缓冲中取得数字视频并对其进行压缩编码后实时地传到远端的客户端。在 VC+中,采用 VFW 技术,客户端通过 capSetCallbackOnFrame()

57、注册回调函数,当采集卡采集到一幅图像后,系统就会自动调用回调函数,然后再回调函数中使用 ICSeqCompressFrame()函数进行压缩。然后再通过 Winsock 将压缩后的数据发送到另一客户端。该客户端接收完一帧以后,交给 ICDecompress()解压,最后用 SetDIBitsToDevice()将图像显示出来。基本的捕获设置包括设置捕获速度(每秒捕获多少帧) 、是否同时捕获声频、捕获缓冲、允许最大丢失多少帧和是否使用 DOS 存,以与使用键盘的哪个键或鼠标的哪个键来终止捕获等容,这些设置使用 CAPTUREPARAMS 结构来描述,capCaptureGetSetup宏来得到当

58、前的设置,然后改变此结构的成员变量,再使用 capCaptureSetSetup 宏设置新的设置。设置捕获速度,通过使用 capCaptureGetSetup 宏来得到当前的捕捉速度,将当前的捕捉速度保存在 CAPTUREPARAMS 结构的 dwRequestMicroSecPerFrame 成员变量中,也可以通过设置此变量来改变当前设置值。设置终止捕获,同样通过使用 capCaptureGetSetup 宏来得到当前的设置,当前按键设置保存在 CAPTUREPARAMS 结构的 vKeyAbort 成员中,鼠标设置保存在 fAbortLeftMouse 和 fAbortRightMouse

59、 成员中,通过修改可以设置新的热健或者鼠标左右键,修改完成后,使用 capCaptureSetSetup 宏来进行更新。捕获的时间限制,用 CAPTUREPARAMS 结构中的 fLimitEnabled 表示捕获是否有时间的限制,wTimeLimit 用来设置指示捕获最大的持续时间,其单位为秒。使用 capCaptureGetSetup 宏来得到当前的设置值。 . . . 24 / 33下面程序为设置 CAPTUREPARAMS 结构的实现代码:BOOL VideoCapture:SetCapturePara()CAPTUREPARMS CapParms=0;capCaptureGetSet

60、up(m_capwnd,&CapParms,sizeof(CapParms);/得到当前的捕获速度CapParms.fAbortLeftMouse = FALSE;CapParms.fAbortRightMouse = FALSE;CapParms.fYield = TRUE;CapParms.fCaptureAudio = FALSE;CapParms.wPercentDropForError = 80;if(!capCaptureSetSetup(m_capwnd,&CapParms,sizeof(CapParms)/log.WriteString(n Failed to set the capture parameters );

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论