毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc

上传人:韩长文 文档编号:3947232 上传时间:2019-10-10 格式:DOC 页数:37 大小:679.50KB
返回 下载 相关 举报
毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc_第1页
第1页 / 共37页
毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc_第2页
第2页 / 共37页
毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc_第3页
第3页 / 共37页
毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc_第4页
第4页 / 共37页
毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-局域网聊天系统的设计与实现 (2).doc(37页珍藏版)》请在三一文库上搜索。

1、存档日期:存档日期: 存档编号:存档编号: 毕业设计报告 题题 目:目: 局域网聊天系统的设计与实现 子子 课课 题:题: 学学 号:号: 姓姓 名:名: 院院 系:系: 专专业业、年年级级、班班组组: 指指 导导 教教 师:师: 毕业设计报告原创性声明 局域网聊天系统的设计与实现 摘 要:本文介绍了采用 Microsoft Visual C+ 6.0 编程开发视频聊天系统的一套比较 常用的解决方案。文字聊天采用 TCP 模式;语音视频聊天采用 UDP 模式,在客户端之间 点对点的进行。在该方案中,通过函数库 VFW 来实现视频捕获、影像压缩以及影像播放。 微软公司提供的专门用于视频捕获开发的

2、工具包 VFW(Vedio For Windows),为在 Windows 操作系统中实现视频捕获提供了标准的接口,从而大大降低了程序的开发难度。 在视频传输方面,则通过组建视频帧,将位图形式的视频帧压缩成帧格式的 Mpeg4 流, 传输到客户端后,解压并显示影像。同时,在本方案中,采用了线程来实现语音录制和语 音回放,最终实现了通过服务器中转的文字聊天、点对点的语音视频聊天。 关键词: 文字聊天;VFW;视频传输;语音回放 Design and Implementation of LAN-Based Chat Room System Abstract: As a new tool about

3、 communication, video chatting 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

4、Visual C + + 6.0 programming. 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(Vedio For Windows) Library. The special kit VFW (Video for Wind

5、ows) in video capture offered by Microsoft Corporation, 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 Mpe

6、g4 steam of frame form. Then it will be decompressed 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: t

7、ext chatting; VFW; video transmission; audio playing I 目目 录录 第第 1 章章 绪论绪论.1 1.1 课题背景及意义 .1 1.2 课题现状 .1 第第 2 章章 开发技术的原理性说明开发技术的原理性说明.2 2.1 WIN32 编程(即 SDK 程序设计原理)2 2.2 MFC (MICROSOFT FOUNDATION CLASS)3 2.2.1 简介.3 2.2.2 MFC 与 C 语言 API 的关系.3 2.2.3 MFC 类库3 2.3 TCP/IP 协议及 WINDOWS SOCKETS 网络编程接口4 2.3.1 TCP

8、/IP 协议简介4 2.3.2 Windows Socket 网络编程简介4 2.4 多线程技术 .4 2.4.1 进程及线程概述.4 2.4.2 MFC 对多线程编程的支持5 2.5 VFW 简介5 2.6 VC+ 6.0 简介8 第第 3 章章 需求分析及可行性研究需求分析及可行性研究.9 3.1 系统功能模块图9 3.2 需求分析9 3.2.1 功能需求分析.9 3.2.2 性能需求分析.10 3.2.3 运行需求分析.11 3.3 可行性研究11 3.3.1 成本可行性.11 3.3.2 技术可行性.11 3.4 软硬件环境11 3.5 界面的设计 .11 3.5.1 登陆界面.11

9、3.5.2 服务端界面设计.12 3.5.3 客户端界面设计.12 第第 4 章章 详细设计及编码实现详细设计及编码实现.14 4.1 文字聊天 .14 4.1.1 TCP 套接字的运用14 4.1.2 文字聊天实现.14 4.2 语音视频聊天 .17 4.2.1 UDP 套接字的运用17 4.2.2 视频的捕捉.18 II 4.2.4 视频捕获驱动.22 4.2.5 语音录制.22 4.2.6 语音回放.23 4.2.7 视音频的传输.24 第第 5 章章 测试测试.26 5.1 测试 .26 5.2 测试结论 .26 第第 6 章章 总结与展望总结与展望.27 6.1 总结 .27 6.2

10、 展望 .27 毕业设计体会毕业设计体会.28 致谢致谢.29 参考文献参考文献.30 英文翻译资料英文翻译资料.31 1 第第 1 章章 绪论绪论 1.1 课题背景及意义课题背景及意义 随着 Internet 的不断发展普及,网络通讯成为人们生活中的一部分。网络聊天已 和手机等一样,成为人们运用最为广泛的通信工具之一。 本设计主要目的是为了满足人们通讯交流的便捷,实现灵活、全面的音、视频信 息的传递和服务。模拟 QQ 软件,开发一个多功能的聊天系统软件,本毕业设计主要实 现语音视频聊天、文字聊天等功能。 本设计开发采用 C/S 结构,在 VC 开发环境下,使用 C+编程语言进行本软件的开 发

11、。 在本文中,将讨论一种基于 MFC Socket 的局域网通信系统的设计与实现方法。 基于 MFC Socket 的局域网通信软件可以为局域网提供一种良好、安全、快速的通 信机制,在局域网内部通信、教学、讨论等应用中都具有一定的实用价值,它同时很 好地诠释了 MFC Socket 通信的原理。 1.2 课题现状课题现状 基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本, 广域网上的即时通信工具,如今一般采用 UDP 或者 TCP 协议体系来实现,开发技术 已经比较成熟,比如较早的 Icq、MSN 、Yahoo!通等国外开发的产品,还有国产的有 名的 QQ、百度 hi!,中

12、国移动通信 fetion 等,这些工具统统都实现了广域网上的即时 通信。 所有上述软件都实现了网络即时的文字,视频语音聊天功能。这些软件,在使用 方面各有特色,在实现方面也各有所长,但由于这些产品正在商业运营阶段,其实现 方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是各种利用各种 平台上的网络通信接口,建构基于下层 TCP/IP,或者 UDP/IP 协议的软件产品。 在局域网内,这些功能的实现跟广域网相比更加简单,因为局域网的网络结构本 身比广域网要简单,但是可以借此理解网络协议,以及网络通信工具的实现原理,所 以仍然极具研究价值。 2 第第 2 章章 开发技术的原理性说明开发

13、技术的原理性说明 2.1 Win32 编程(即编程(即 SDK 程序设计原理)程序设计原理) 所谓的 Win32 开发,就是在 C+语言的层面上,直接使用 Win32 API(Applicatio n Programming Interface:系统开放出来,给程序员使用的接口。 )开发 Windows 应 用程序或者系统程序。虽然现在直接用 Win32 API 开发应用程序的人已经不多了,但 是深入理解 Windows 系统程序设计原理,仍然是成为 Windows 开发高手的良好途径。 所谓的 Win32,其实是一个 API 规范,与 UNIX 系统编程接口标准 POSIX 是相对应 的。下

14、面是进行直接的 Win32 SDK 方式编程的基本思路或者说是一个框架。 一个 Windows 程序分为程序代码和 UI(User Interface 用户界面)资源两大部分, 两部分最后以 RC 编译程序编译为一个完整的 EXE 文件。 所谓 UI 资源是指功能菜单、对话框外貌、程序图标、光标形状等等。这些 UI 资源 的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如 .ico .bm p .cur 等等。程序员必须在一个所谓的资源描述档(.rc )中描述它们。RC 编译器( RC.EXE )读取 RC 文件的描述后将所有 UI 资源文件集中制作出一个.Res 资源文件,

15、再与程序代码结合在一起,这才是一个完整的 Windows 可执行文件。 1.WinMain 函数 main()函数是 C+程序的进入点,而 WinMain 函数则是 Windows 程序的进入点。 2. Msg 结构体 定义了一个 Msg 结构体,是 Windows 内设的一种数据格式, 在 Windows 程序中, 消息是由 MSG 结构体来表示的。 3. 注册窗口 RegisterClass()完成注册窗口类的功能,设定窗口的属性:边框、颜色、标题、 位置等等。 4. 创建窗口 CreateWindow 函数可以用于创建父窗口、弹出窗口以及子窗口,在创建窗口时它 可以确定窗口类、窗口标题、

16、窗口风格、大小以及初始化位置。 5. 显示窗口 创建窗口后需要使用 ShowWindow 函数用于显示窗口。 6、刷新窗口 调用 UpdateWindow 函数来刷新窗口。 7. 消息循环 初始化工作完成后,WinMain 进入所谓的消息循环,使用 while 循环,不断的 Get Message,再使用 TranslateMessage 将消息转化,用 DispatchMessage 将消息传递给 窗口函数去处理。 8. 获取消息 GetMessage 功能函数从消息队列中获取消息,如果消息队列中没有消息,此功能 函数则会一直等得消息。 9. 转换消息 将特定的消息转换为不同的消息,例如消息

17、队列中同时有 WM_KEYDOWN 和 WM_KEYUP 消息时,意味着用户同时按下了键盘上的某几个键,此时 TranslateMessage 将其转换为 一个 WM_CHAR 消息。 3 10. 将消息发送到回调函数 DispatchMessage 通过 USER 模块的协助将消息送到该窗口的窗口函数去了,但是 DispatchMessage 并没有指定函数名,却可以将消息传送过去,这是因为消息发生的时 候,OS 已经根据当时状态,为它标明了所属窗口,而窗口所属的窗口类亦是明确的。 11. WinMain 函数返回值 return msg.wParam;/返回结构体变量 msg 中的 wPa

18、ram 的值。 12. WindowProc 窗口函数 窗口中的生命枢纽:窗口函数 WindowProc。WindowProc 是一个 callback 函数, 常利用 switch/case 方式判断消息的种类,以决定处理方式。 2.2 MFC (Microsoft Foundation Class) 2.2.1 简介简介 MFC 是在 1992 年随微软的 Microsoft C/C+ 7.0 编译器发布的,是建立在 Windows API 之上的 C+ 类库(C+ Class Library) ,意图是使 Windows 程序设计过程更有效 率,更符合面向对象的精神。现在 MFC 已经成

19、为了 Windows 环境上标准的 C+ API。 MFC 使得开发 Windows 应用程序变得简单容易,将很多应用程序开发中常用的功能自动 化,并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。同 时,在 Visual C+内部也内建了很多对 MFC 的非常实用的东西,例如类向导这样的支 持,减少软件开发的时间,使用类向导可以生成从 hello world 这样的简单程序到活 动文档服务器这样的复杂程序。MFC 的消息映射机制也避免了使用性能较低的庞大虚函 数表。MFC 在整个 Windows 家族中都是兼容的。1 2.2.2 MFC 与与 C 语言语言 API 的关系的

20、关系 设置 Microsoft 基本类库与其它 Windows 类库所不同的唯一特征就是它与 C 语言 编写的 Windows API 的紧密的映射关系。而且,可以将直接调用 Windows API 与调用 类库自由地混合起来使用。这种直接访问并不意味着类可以完全取代 API。开发者有时 必须直接调用一些 Windows 函数,例如,SetCursor 和 GetSystemMetrics。只有在有 明显优势时,一个 Windows 函数才被一个类成员函数所替代。 2.2.3 MFC 类库类库 MFC 类库是一个很大的、扩展了的 C+类层次结构,与传统上使用 C 语言直接访问 Windows

21、API 相反,MFC 已经包含和压缩了所有标准的“样板文件”代码,这些代码是 所有用 C 编写的 Windows 程序所必需的,因此用 MFC 编写的程序要比用 C 语言编写 的程序小得多,当然 MFC 所编写的程序的性能也毫无损失。必要时,也可以 MFC 可以 用面向对象的方法来调用 Windows API,因为 MFC 不修改也不隐藏 Windows 程序的基 本结构。MFC 是很庞大的。例如,版本 4.0 中包含了大约 200 个不同的类。事实上, 你可能只需要使用其中的十多个不同的类,就可以建立一个非常漂亮的程序。 MFC 层次结构大约可分为几种不同的类型的类: 1. 根类:Cobje

22、ct Microsoft 基本类库中的大多数类都是由在类层次表中根上的唯一的一个基类派 生而来的。 2. MFC 应用结构类 MFC 应用构造类有助于一个框架应用的构造。它们对大多数应用提供了通用功能 。可以在框架中填写对于应用特定的功能。 3. 窗口、对话和控件类 4 类 CWnd 和它的派生类封装了 HWND,它是一个 Windows 窗口。CWnd 可被自己使用 ,也可以作为派生新类的基类。类库提供的派生类表示各种窗口。 CWnd 是所有窗口的基类。可以使用 CWnd 派生出来的一个类,也可以从其中派生出 自己的类。 4. 绘画和打印类 在 Windows 中,所有的图形输出都是在一个可

23、视的绘图区上。这叫作一个设备上 下文(或 DC) 。MFC 提供了封装不同 DC 类型的类,也提供了对 Windows 绘图工具,例 如位图、刷子、调色板和笔的封装。 5. 文件和数据库类 这些类允许将信息存储在一个数据库或一个磁盘文件中。有两个数据库类的集合 DAO 和 ODBC它们提供了相似的功能。 6. Internet 和网络类 这些类允许和其它使用 ISAPI 的计算机或一个 Windows Socket 交换信息。还有创 建 ISAPI 扩展 DLL 的类的集合和操作 Windows 套接字的类的集合。 支持连接的类的分类:ISAPI 类、Windows 套接字类、Win32 In

24、ternet 类。 7. 其它还有简单的数据类型类、OLE 类、调试和异常类、数组列表和映射类。 2.3 TCP/IP 协议及协议及 WINDOWS SOCKETS 网络编程接口网络编程接口 2.3.1 TCP/IP 协议简介协议简介 通常包含了一系列与“TCP(传输控制协议) ”和“IP(网际协议) ”有联系的网络 协议,它包括其它的协议,应用软件,甚至网络媒介。这些协议的示例是:UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议、ARP (地址解析协议)和其他一些协议的协议组。应用的示例:telne

25、t(远程登录)、ftp( 文件传递协议)、http 等。这其中一些协议最早发源于美国国防部的 ARPA 网项目。2 2.3.2 Windows Socket 网络编程简介网络编程简介 Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有 Socket 接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个 Socket 接 口来实现。 Windows Sockets 规范定义了一套开放的、支持多种协议的、 Windows 下的网络 编程接口。它不仅包含了人们所熟悉的 Berkeley Socket 风格的库函数,也包含了一 组针对 Windows 的扩展库函数,

26、使得程序员能充分地利用 Windows 消息驱动机制进行 编程。 现在的 Windows Sockets 已经基本上实现了与协议无关,你可以使用 Windows Sockets 来调用多种协议的功能,但较常使用的是 TCP/IP 协议。3 2.4 多线程技术多线程技术 2.4.1 进程及线程概述进程及线程概述 进程和线程都是操作系统的概念。每个进程是由一个或多个线程、私有的虚拟地址 空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程 的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。进程是应用程序的 执行实例。 线程是进程内的执行路径,也是 Win32 安排的最

27、小执行单元。线程包括堆栈、CPU 5 寄存器的状态和系统计划程序执行列表中的项。每一个进程至少有一个主执行线程, 它无需由用户去主动创建,是由系统自动创建的,此线程终止时,进程也终止。用户 可以根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中,所 有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统 资源,但是必须使用信号灯或其他进程间的通信方法协调它们的工作。一般情况下进 程中的每个线程都独立运行的,对进程中的其他线程一无所知,除非使这些线程相互 可见。 多线程可以实现并行处理,避免了某项任务长时间占用 CPU 时间。要说明的一点是 ,目前大多数的计算

28、机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为 每个独立线程安排一些 CPU 时间,操作系统以轮换方式向线程提供时间片,这就给人 一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢 夺对 CPU 的控制权,在线程切换时会消耗很多的 CPU 资源,反而会降低系统的性能。 这一点在多线程编程时应该注意。 2.4.2 MFC 对多线程编程的支持对多线程编程的支持 Win32 SDK 函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步 、互斥和临界区等操作。Visual C+ 6.0 中,使用 MFC 类库也实现了多线程的程序设 计,使得多线程编程更加

29、方便。 CWinThread 对象代表在一个应用程序内运行的线程。运行的主线程通常由 CWinApp 的派生类提供;CWinApp 由 CWinThread 派生。另外,CWinThread 对象允许一给定的应 用程序拥有多个线程。 CWinThread 支持两种线程类型:工作者线程和用户界面线程。工作者线程没有收 发消息的功能:例如,在电子表格应用程序中进行后台计算的线程。用户界面线程具 有收发消息的功能,并处理从系统收到的消息。CWinApp 及其派生类是用户界面线程的 例子。其它用户界面线程也可由 CWinThread 直接派生。CWinThread 类的对象存在于 线程的生存期。如果你

30、希望改变这个特性,将 m_bAutoDelete 设为 FALSE。 要使你的代码和 MFC 是完全线程安全的,CWinThread 类是完全必要的。框架使用 的用来维护与线程相关的信息的线程局部数据由 CWinThread 对象管理。由于依赖 CWinThread 来处理线程局部数据,任何使用 MFC 的线程必须由 MFC 创建。例如,由运 行时函数_beginthreadex 创建的线程不能使用任何 MFC API。为了创建一个线程,调 用 AfxBeginThread 函数。 根据你需要工作者线程还是用户界面线程,有两种调用 AfxBeginThread 的格式。 如果你需要用户界面线程

31、,则将指向你的 CWinThread 派生类的 CRuntimeClass 的指针 传递给 AfxBeginThread。如果你需要创建工作者线程,则将指向控制函数的指针和控 制函数的参数传递给 AfxBeginThread。对于工作者线程和用户界面线程,你可以指定 可选的参数来修改优先级, 堆栈大小, 创建标志和安全属性。AfxBeginThread 线程 将返回指向新的 CWinThread 对象的指针。 与调用 AfxBeginThread 相反,你可以构造一个 CWinThread 派生类的对象,然后调 用 CreateThread。如果你需要在连续创建和终止线程的执行之间重复使用 C

32、WinThread 对象,这种两步构造方法非常有用。 创建线程也可以使用 API 函数:CreateThread 函数完成。其它还有挂起线程、结 束线程等函数,将不再一一详解。 6 2.5 VFW 简介简介 VFW 是 Microsoft 1992 年推出的关于数字视频的一个软件包,它能使应用程序数 字化并播放从传统模拟视频源得到的视频剪辑。4 VFW 的一个关键思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题 ,需要对数据进行压缩。它引进了一种叫 AVI 的文件标准,该标准未规定如何对视频 进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,以及在 AVI 文件中 交替存储视

33、频帧和与之相匹配的音频数据。 VFW 给程序员提供 VBX 和 AVICap 窗口类的高级编程工具,使程序员能通过发送消 息或设置属性来捕获、播放和编辑视频剪辑。用户不必专门安装 VFW,在安装 Windows 时,安装程序会自动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等 。 VFW 主要由以下六个模块组成: 1. AVICAP.DLL:包含了执行视频捕获的函数,它给 AVI 文件、I/O 和视频音频设 备驱动程序提供一个高级接口; 2. MSVIDEO.DLL:用一套特殊的 DrawDib 函数来处理屏幕上的视频操作; 3. MCIAVI.DRV:此驱动程序包括对 VFW 的

34、MCI 命令的解释器; 4. AVIFILE.DLL:支持由标准多媒体 I/O(mmio)函数提供的更高的命令来访问 AVI 文件; 5. 压缩管理器(ICM):管理用于视频压缩/解压缩的编解码器(CODEC); 6. 音频压缩管理器 ACM:提供与 ICM 相似的服务,不同的是它适于波形音频。 Visual C+在支持 VFW 方面提供有 vfw32.lib、msacm32.lib、winmm.lib 等库。特 别是它提供了功能强大、简单易行、类似于 MCIWnd 的窗口类 AVICap。AVICap 为应用 程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在 将视频

35、流捕获到硬盘上的过程中进行控制。 AVICap 支持实时的视频流捕获和单帧捕获,并提供对视频源的控制。虽然 MCI 也 提供数字视频服务,比如,它为显示 AVI 文件的视频提供了 AVIVideo 命令集,为视频 叠加提供了 overlay 命令集,但这些命令主要是基于文件的操作,不能满足实时地直 接从视频缓存中获取数据的要求。对于使用没有视频叠加能力的捕获卡的 PC 机来说, 用 MCI 提供的命令集是无法捕获视频流的。而 AVICap 在捕获视频方面具有一定的优势 ,它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时, 它也可将数字视频捕获到文件。 在视频捕获之前需要创

36、建一个捕获窗,所有的捕获操作及其设置都以它为基础。用 AVICap 窗口类创建的窗口(通过 capCreateCaptureWindow 函数创建)被称为“捕获窗 ”,其窗口风格一般为 WS_CHILD 和 WS_VISIBLE。实际上,捕获窗类似于标准控制(如 按钮、列表框等)。捕获窗具有下列功能: 1. 将视频流和音频流捕获到一个 AVI 文件中; 2. 动态地同视频和音频输入器件连接或断开; 3. 以 Overlay 或 Preview 模式对输入的视频流进行实时显示; 4. 在捕获时可指定所用的文件名并能将捕获文件的内容拷贝到另一个文件; 5. 设置捕获速率; 6. 显示控制视频源、视

37、频格式、视频压缩的对话框; 7. 创建、保存或载入调色板; 7 8. 将图像和相关的调色板拷贝到剪贴板; 9. 将捕获的一个单帧图像保存为 DIB 格式的文件。 AVICap 在显示视频时提供的两种模式: 1. 预览(Preview)模式:该模式使用 CPU 资源,视频帧先从捕获硬件传到系统内 存,接着采用 GDI 函数在捕获窗中显示。在物理上,这种模式需要通过 VGA 卡在监视 器上显示。 2. 叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不 经过 VGA 卡,叠加视频的硬件将 VGA 的输出信号与其自身的输出信号合并,形成组合 信号显示在计算机的监视器上。只有

38、部分视频捕获卡才具有视频叠加能力。 灵活编写 AVICap 提供的回调函数还可满足一些特殊需求。比如,将宏 capCapture SequenceNoFile 同用 capSetCallbackOnVideoStream 登记的回调函数一起使用,可使 应用程序直接使用视频和音频数据。在视频聊天的应用程序中可利用这一点来获得视 频帧,回调函数将捕获的图像传到远端的计算机。应用程序可用捕获窗来登记回调函 数(由用户编写,而由系统调用),以便在发生下列情况时,它能通知应用程序,作 出相应的反应:捕获窗状态改变;出错;视频帧和音频缓存可以使用;在捕获过程中 ,其它应用程序处于让步(Yield)地位。

39、视频捕获编程也要用到涉及视频捕获的结构、宏、消息和函数。令人高兴的是,发 送 AVICap 窗口消息所能完成的功能都能调用相应的宏来完成。例如,SendMessag(hW ndCap,WM_CAP_DRIVER_CONNECT,0,0L)与 capDriverConnect(hWndCap,0)的作用相同 ,都是将创建的捕获窗同视频输入器件连接起来。 视频部分主要是利用 Video Capture 函数库来获取影像的。Video Capture 主要提 供下列功能:连接驱动程序;获取影像、声音资料,并显示在屏幕上或者是存成 AVI 文件;获取单张影像显示在屏幕上,拷贝至剪贴簿,或者是存成 DI

40、B(Device-Indepen dent Bitmap)文件。 Video Capture 的主要结构: 结构体 CAPTUREPARAMS 主要包含一些获取图像的参数:DWORD dwRequestMicroSecP erFrame 代表相邻两个 frame 的获取时间间隔;BOOL fYield 值为 TRUE,则表示 Windo ws 会以另一个 thread 来捕获影像,值为 FALSE,程序会在捕捉影像后显示忙碌状态; BOOL fCaptureAudio 其值表示是否需要同时获取声音资料。 结构体 BITMAPINFO 和点阵图有关,主要定义了影像获取之后显示在屏幕上、存储 在文

41、件中的格式,它包含两个成员:BITMAPINFOHEADER bmiHeader 描述影像性质的结 构,其成员记载了影像的大小、颜色深度和压缩的方式,该成员在 Video Capture、Vi deo Compression Manager 和 DrawDib 函数库中,以及有关于点阵图的应用中;RGBQUA D bmiColors 指向 color table 第一个元素的位置。 结构体 COMPVARS 主要是记录所有和压缩相关的信息,重要的成员:DWORD fccHand ler 为 compressor 句柄;LPBITMAPINFO lpbiIn 指向待压缩影像 BITMAPINFO

42、 的指标; LPBITMAPINFO lpbitOut:指向压缩完影像 BITMAPINFO 的指标;LONG lKey 代表 key-fr ame rate,而所谓 key frame 是指此 frame 在解压缩时不需要依赖前面的 frame;LONG lQ 代表影像压缩后的品质,取值为 110000 的整数。 Video Compression Functions 主要记录压缩功能相关的信息,其包含的比较重要 的成员:ICLocate 输入指向压缩前后 BITMAPINFO 的指标,以及欲使用的 codecs;ICC ompressorChoose 呼叫一个系统内建的对话,其中包含所有可

43、能使用的 codes 以及其相 关参数;ICCompressQuery 询问 compressor 是否支持某种压缩方式,输入参数为 comp ressor handle 及指向压缩前后 BITMAPINFO 的指标,此函数会传回询问结果;ICCompr 8 essBegin 要求系统准备相关资源以供压缩之用;ICCompress 压缩某个 frame;ICCompr essEnd 归还相关资源给系统;ICDompressQuery 询问 decompressor 是否支持某种解压 缩方式;ICDompressBegin 要求系统准备相关资源以供解压缩之用;ICDompress 解压 缩某一个

44、 frame;ICDompressEnd 归还相关资源给系统;ICDompressFree 归还 COMPVAR S 所占用的资源。 2.6 VC+ 6.0 简介简介 我们通常所说的 Visual C+实际上是一个完善的、非常强大的 C+程序开发环境, 它的名字是 Microsoft Developer Studio 。二者之间的细小差别并不重要,通常这 两个术语可以互换。但如果你不围绕 Developer Studio 来进行学习,就不能有效地使 用 Visual C+(Developer Studio 听起来很像 Visual Studio , 但它们之间没有关 系)。它包含:C+编译器、

45、调试器、应用程序框架生成器、项目管理器、设计和实现 菜单等资源的编辑器等等。 9 第第 3 章章 需求分析及可行性研究需求分析及可行性研究 3.1 系统功能模块图系统功能模块图 基基于于局局域域网网的的视视频频 聊聊天天室室系系统统 语语音音视视频频聊聊天天 视视频频捕捕获获 视视频频压压缩缩、 解解压压缩缩 视视频频传传输输服服务务器器中中转转语语音音录录制制语语音音回回放放 文文字字聊聊天天 图 3.1 系统功能模块图 3.2 需求分析需求分析 3.2.1 功能需求分析功能需求分析 1. 文字聊天 文字聊天采用的是 TCP 模式,包括服务器端(server)和客户端(client)。 首先

46、启动服务器端,客户端通过用户名和密码登录服务器,服务器响应客户端登 录并提示有用户登录,此时两个用户就可以进行文字聊天,在文字聊天时信息通过服 务器中转,而每个用户可以同时与多个用户进行文字聊天。当有用户退出时,服务器 做出响应,提示在线用户,用户下线。文字聊天流程图如图 3.2。 C Ch ha at tS Se er rv ve er rC Ch ha at tC Cl li ie en nt t 创创建建子子套套接接 字字 客客户户端端用用户户 等等待待客客户户端端 登登陆陆 m me es ss sa ag ge e 启启动动 登登陆陆成成功功 ? 登登陆陆 m me es ss sa

47、 ag ge e Y Y N N 发发送送I IP P和和I ID D 找找到到客客户户端端并并显显示示 连连接接上上 显显示示 图 3.2 文字聊天流程图 2. 语音视频聊天 语音视频聊天时采用的是 UDP 模式,客户端与客户端点对点的进行,不需要经过 服务器端中转。 在文字聊天的基础上,客户端之间自行处理的语音视频聊天,运用 VFW 函数库中 的函数对 USB 口输入的数字视频信息进行相关处理,比如:视频捕获、影像压缩以及影 像播放等,同时利用线程来处理声音部分的录制、回放等。 A 客户端向 B 客户端请求语音视频聊天是通过 B 客户端的用户名来获得 B 客户端的 IP 地址,并向 B 客

48、户端发送语音视频聊天请求,当 B 客户端接受后捕获视频,并进行 压缩传输到 A 客户端解压并进行播放,在 B 客户端接受视频的同时,A 客户端也捕获视 频,压缩传输到 B 客户端解压并进行显示。语音视频聊天流程图如图 3.3。 显示视频 语音回放 发送视频 帧、语音 视、音频的 压缩 捕获视频、 语音录制 接收语音、 视频帧 视、音频的 解压 接受? 开始 退出 收到语音视频请求 N N Y Y Y Y 10 图 3.3 语音视频聊天流程图 3.2.2 性能需求分析性能需求分析 1. 可靠性高 能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失 败、服务器不在线等,可以提示

49、用户安全退出本程序,在出现不可知的错误以后,可 以尽量安全的退出程序。 在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件 ,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。 2. 宜操作性,程序简单易懂,用户能很容易看懂并使用。 3.2.3 运行需求分析运行需求分析 1. 用户界面 程序较小,启动速度快。 启动后的应用界面要清爽,设计要简单明了,具有较高的易用性。 2. 故障处理 在遇到可预知的故障与情况时,能提示用户并自动退出。在遇到不可预知的故障 时能安全退出。 3.3 可行性研究可行性研究 3.3.1 成本可行性成本可行性 学习研究性开发,暂不考虑成本。 3.3.2 技术可行性技术可行性 已有搭建好的基于 Windows 的软硬件平台,本人对 VC 开发环境有一定的了解,需 继续深入学习 VC 和 Windows socket 编程。 3.4 软硬件环境软硬件环境 硬件环境: 计算机两台,如下: CPU:Intel Pentium或者 Pentium4 1GHz 内存:256

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1