武汉理工大学 多媒体大作业_第1页
武汉理工大学 多媒体大作业_第2页
武汉理工大学 多媒体大作业_第3页
武汉理工大学 多媒体大作业_第4页
武汉理工大学 多媒体大作业_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、多媒体网络通信技术大作业1、题目:基于局域网的可视对讲系统设计2、系统开发环境与工具:(1)、硬件环境:实验室局域网(2)、软件环境:WindowsXP操作系统(3)、开发工具:自己熟悉的面向对象的网络通信编程工具与平台,相关音频、视频编码与传输协议类库3、要求与评分标准:(1)要求:在以上硬软件环境下,利用合适的开发工具,设计一套可视对讲软件,实现局域网内两台计算机之间的可视对讲功能,要求音视频信号连续性、实时性较好,满足正常交流需要。(2)评分标准系统原理分析(20分)1.系统原理概述(10分)2.关键技术分析(10分)系统总体方案设计(30分)1.按模块化设计要求画系统结构图(15分)2

2、数据流分析(15分)系统具体设计(30分)呼叫处理模块流程图与关键代码(6分)音视频采集与播放模块流程图与关键代码(6分)音视频处理(编解码)模块流程图与关键代码(6分)音视频封包与解析模块流程图与关键代码(6分)音视频发送与接收模块流程图与关键代码(6分)系统测试与评价(20)实现语音通信(6分)实现视频通信(6分)实现音视频同步(8分)TOC o 1-5 h z HYPERLINK l bookmark0 摘要1.软件开发工具2WIN32SDK编程2 HYPERLINK l bookmark5 TCP/IP协议及WINDOWSSOCKETS网络编程接口3TCP/IP协议简介3Windows

3、Socket网络编程简介4 HYPERLINK l bookmark7 VC+6.0简介4 HYPERLINK l bookmark9 VideoforWindows简介5 HYPERLINK l bookmark11 G729.dll的简介5 HYPERLINK l bookmark13 LanMsgLibrary.dll的简介6 HYPERLINK l bookmark15 .系统原理分析7 HYPERLINK l bookmark17 系统原理概述7 HYPERLINK l bookmark19 关键技术分析7 HYPERLINK l bookmark25 .系统总体方案设计8 HYPE

4、RLINK l bookmark27 系统功能模块图8 HYPERLINK l bookmark29 语音聊天过程分析9 HYPERLINK l bookmark31 视频聊天过程分析10 HYPERLINK l bookmark33 .系统具体设计11 HYPERLINK l bookmark35 语音视频聊天的实现11 HYPERLINK l bookmark37 视频的捕捉11 HYPERLINK l bookmark39 窗口的捕捉14 HYPERLINK l bookmark41 视频捕获驱动16 HYPERLINK l bookmark43 语音录制16 HYPERLINK l b

5、ookmark45 语音播放17 HYPERLINK l bookmark47 视音频的传输19 HYPERLINK l bookmark49 .系统测试与评价20 HYPERLINK l bookmark51 测试20 HYPERLINK l bookmark53 测试结果分析21.心得体会22.参考文献23 软件开发工具WIN32SDK编程所谓的Win32开发,就是在C+语言的层面上,直接使用Win32API(ApplicationProgrammingInterface:系统开放出来,给程序员使用的接口。)开发Windows应用程序或者系统程序。所谓的Win32,其实是一个API规范,与

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

7、的Windows可执行文件。LWinMain函数main()函数是C+程序的进入点,而WinMain函数则是Windows程序的进入点。Msg结构体定义了一个Msg结构体,是Windows内设的一种数据格式,在Windows程序中,消息是由MSG结构体来表示的。注册窗口RegisterClass()完成注册窗口类的功能,设定窗口的属性:边框、颜色、标题、位置等等。创建窗口CreateWindow函数可以用于创建父窗口、弹出窗口以及子窗口,在创建窗口时它可以确定窗口类、窗口标题、窗口风格、大小以及初始化位置。显示窗口创建窗口后需要使用ShowWindow函数用于显示窗口。6、刷新窗口调用Upda

8、teWindow函数来刷新窗口。消息循环初始化工作完成后,亚皿忖2皿进入所谓的消息循环,使用while循环,不断的GetMessage,再使用TranslateMessage将消息转化,用DispatchMessage将消息传递给窗口函数去处理。获取消息GetMessage功能函数从消息队列中获取消息,如果消息队列中没有消息,此功能函数则会一直等得消息。转换消息将特定的消息转换为不同的消息,例如消息队列中同时有WM_KEYDOWN和WM_KEYUP消息时,意味着用户同时按下了键盘上的某几个键,此时TranslateMessage将其转换为一个WM_CHAR消息。将消息发送到回调函数Dispat

9、chMessage通过USER模块的协助将消息送到该窗口的窗口函数去了,但是DispatchMessage并没有指定函数名,却可以将消息传送过去,这是因为消息发生的时候,OS已经根据当时状态,为它标明了所属窗口,而窗口所属的窗口类亦是明确的。WinMain函数返回值returnmsg.wParam;返回结构体变量msg中的wParam的值。WindowProc窗口函数窗口中的生命枢纽:窗口函数WindowProc。WindowProc是一个callback函数,常利用switch/case方式判断消息的种类,以决定处理方式。TCP/IP协议及WINDOWSSOCKETS网络编程接口TCP/IP

10、协议简介TCP/IP已成为当今计算机网络最成熟、应用最广的互联协议。Internet采用的就是TCP/IP协议,网络上各种各样的计算机上只要安装了TCP/IP协议,它们之间就能相互通信。运行TCP/IP协议的网络是一种采用包(分组)交换网络。TCP/IP协议是由100多个协议组成的协议集,TCP和IP是其中两个最重要的协议。通常包含了一系列与“TCP传输控制协议)”和“IP(网际协议)”有联系的网络协议,它包括其它的协议,应用软件,甚至网络媒介。这些协议的示例是:UDP(UserDatagramProtoco)协议、ICMP(InternetControlMessageProtoc)o协议、A

11、RP(地址解析协议)和其他一些协议的协议组。TCP和IP两个协议分别属于传输层和网络层,在Internet中起着不同的作用。WindowsSocket网络编程简介Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。WindowsSockets规范定义了一套开放的、支持多种协议的、Windows下的网络编程接口。它不仅包含了人们所熟悉的BerkeleySocket风格的库函数,也包含了一组针对Windows的扩展库函数,使得程序员能充分地利用Windows消息驱动机制进行编程。

12、现在的WindowsSockets已经基本上实现了与协议无关,你可以使用WindowsSockets来调用多种协议的功能,但较常使用的是TCP/IP协议。VC+6.0简介我们通常所说的VisualC+实际上是一个完善的、非常强大的C+程序开发环境,它的名字是MicrosoftDeveloperStudio。二者之间的细小差别并不重要,通常这两个术语可以互换。但如果你不围绕DeveloperStudio来进行学习,就不能有效地使用VisualC+(DeveloperStudio听起来很像VisualStudio,但它们之间没有关系)。它包含:C+编译器、调试器、应用程序框架生成器、项目管理器、设

13、计和实现菜单等资源的编辑器等等。VideoforWindows简介VFW是Microsoft1992年推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫AVI的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,在AVI文件中交替存储视频帧和与之相匹配的音频数据。VFW给程序员提供.VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。现在用户不必专门安装VFW

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

15、M):管理用于视频压缩一解压缩的编解码器(CODEC)。(6)音频压缩管理器ACM:提供与ICM相似的服务,不同的是它适于波形音频。G729.dll的简介G.729算法是ITU-T制定的编码速率为8kb/s的共轭结构码激励线性预测声码器语音编码算法标准,作为低速率的语音编码器,在传输的带宽有限的情况下运用越来越受到广泛的重视。G729系列算法声码器的原理都是相通的,各种算法不同之处在于算法的简化和编码比特的多少。G.729编码器是基于码激励线性预测(CELP)声码器模型的。这个编码器运算的帧长为10ms,相应于抽样率为8000kHz的语音数据流的80个样值,具有8kbit/s的编码速率,较低的

16、延迟和高编码语音质量等优点。本程序在语音聊天模块中,调用了G729.dll动态链接库文件,它包括G.729的函数和资源,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。LanMsgLibrary.dll该聊天软件系统的语音聊天、视频聊天功能的实现主要是引用了LanMsgLibrary.dll这个动态链接库文件,它包括VFW以及其他相关的函数与资源。在音频与视频聊天实现的过程中,程序就引用了LanMsgLibrary.dll中的VFW以及相关的函数和资源。在视频聊天过程中,主要实现了视频的捕获与播放,视频流的压缩与解压。在语音聊天过程中,主要实现了声音的采集与播放,通过调用了

17、G729.dll动态链接库文件,对音频进行了压缩与解压。在整个语音聊天与视频聊天实现的过程中,程序主要对LanMsgLibrary.dll的引用来实现其功能。2.系统原理分析系统原理概述从技术上而言,音视频通信技术,涉及音视频设备操作、音视频流编解码、媒体流网络传输、流媒体接受处理等相关技术。另外,由于媒体流信息量大,及时要求度高,还要保障媒体帧的流畅性,这就对依赖于高速网络、高性能的硬件设备以及相关媒体流网络包的建包和解包算法。关键技术分析对于一个端对端的语音聊天系统来说,主要涉及两个方面的动作,即语音的采集和播放、语音数据的发送和接收。系统采用多线程的设计思想来完成并协调各个过程。语音的采

18、集实际上就是一个音频压缩的过程。语音的播放是声音数据流的还原过程,通过一个父线程读取接收线程接收到的数据,并通过管道让其子线程播放解压后的声音数据。语音数据的发送和接收主要用Socket编程来实现,socket是网络通讯过程中端点的抽象表示。为了通过socket接口进行网络通讯,程序在对话的每一端都需要一个socket,两个socket采用无连接的UDP协议。视频模块的设计思想与语音模块一致,也涉及到两个方面的动作,视频的采集和播放,视频数据的发送和接收。视频的采集与播放是基于VFW来实现的,利用VFW的关于数字视频的软件包实现对视频的采集与播放。视频数据的发送与接收同样采用了Socket编程

19、,在发送视频时,通过Socket端口进行监听。当收到对方发送的包含视频请求信息和对方IP地址、端口号等信息后,如果同意请求,则向请求方发送包含了本地IP、端口号的接受视频信息,这样就建立了连接,开始视频聊天。TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互连层、传输层(主机到主机)、和应用层。UDP协议的全称是用户数据包协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。3.3.系统总体方案设计1系统功能模块图图3.1.2语音视频聊天流程图语音聊天过程分析

20、用户1通过麦克对自己的声音进行采集,在通过压缩,使其在网络上传输的效率更高,然后再进行传输,当用户2接收到用户1的声音数据后将其解压,然后进行播放。图3.2.1语音模块数据流程图在进行语音聊天时,两台计算机必须先要建立连接,如图5所示,用户1向用户2发送“发送语音请求”信息,用户2收到用户1请求信息后,发送回应信息给用户1,如果用户2同意,开始语音聊天;不同意,停止语音聊天。图3.2.2语音聊天建立连接图视频聊天过程分析用户1通过摄像头进行视频采集,经过压缩后,向用户2发送采集后的视频数据。用户2接收到用户1发送的视频数据并将其进行解压,然后在用户2的采集窗口上播放,这样视频的传输就完成了。视

21、频模块数据传输流程如图3所示。图3.3.1视频模块数据传输流程图在进行视频数据传输前,两台计算机必须先要建立连接,其原理和语音聊天建立连接的原理一致。用户1向用户2发送视频请求,用户2在接收到用户1的请求后,给用户1发送收到请求后的回应信息,如果同意用户1的请求则用户1与用户2开始视频聊天,如果不同意就终止视频聊天。视频聊天建立连接如图7所示。图2.3.2视频聊天建立连接图.系统具体设计语音视频聊天的实现在实现语音视频聊天时,采用的是基于UDP套接字的点对点模式,即用户与用户之间的数据传输。其套接字的使用如下图。图4.1语音视频聊天套接字图视频的捕捉利用VFW接口,视频捕获可以分为以下几个步骤

22、:建立视频采集窗口:该窗口用来接收视频捕捉驱动程序传来的数据和消息。连接视频驱动程序:将建立的视频捕捉窗口与视频设备驱动程序相连。视频捕获初始化。视频捕捉设置:VFW下视频捕捉参数的设置可以通过调用函数或弹出对话框的形式来实现。一般视频驱动程序允许设置的参数包括视频源选择、视频格式、视频显示格式等。设置回调函数:通过回调函数来通知程序视频事件的发生,比如捕捉一帧图像成功的消息,捕捉出错的消息等。结束捕捉:结束捕捉是应该有一些清除工作。如释放分配的内存,断开捕捉窗口与视频捕捉驱动程序的连接,清除视频捕捉窗口等。窗口类为捕获数字视频流及其相关操作提供了很大的方便,灵活编写其中的回调函数可满足实时视

23、频传输的需要,例如应用程序可直接从缓冲中取得数字视频并对其进行压缩编码后实时地传到远端的客户端。在VC+中,采用VFW技术,客户端通过capSetCallbackOnFrame()注册回调函数,当采集卡采集到一幅图像后,系统就会自动调用回调函数,然后再回调函数中使用ICSeqCompressFrame()函数进行压缩。然后再通过Winsock将压缩后的数据发送到另一客户端。该客户端接收完一帧以后,交给ICDecompress()解压,最后用SetDIBitsToDevice()将图像显示出来。基本的捕获设置包括设置捕获速度(每秒捕获多少帧)、是否同时捕获声频、捕获缓冲、允许最大丢失多少帧和是否

24、使用DOS内存,以及使用键盘的哪个键或鼠标的哪个键来终止捕获等内容,这些设置使用CAPTUREPARAMS结构来描述,capCaptureGetSetup宏来得到当前的设置,然后改变此结构的成员变量,再使用capCaptureSetSetup宏设置新的设置。设置捕获速度,通过使用capCaptureGetSetup宏来得到当前的捕捉速度,将当前的捕捉速度保存在CAPTUREPARAMS结构的dwRequestMicroSecPerFrame成员变量中,也可以通过设置此变量来改变当前设置值。设置终止捕获,同样通过使用capCaptureGetSetup宏来得到当前的设置,当前按键设置保存在CAP

25、TUREPARAMS结构的vKeyAbort成员中,鼠标设置保存在fAbortLeftMouse和fAbortRightMouse成员中,通过修改可以设置新的热健或者鼠标左右键,修改完成后,使用capCaptureSetSetup宏来进行更新。捕获的时间限制,用CAPTUREPARAMS结构中的fLimitEnabled表示捕获是否有时间的限制,wTimeLimit用来设置指示捕获最大的持续时间,其单位为秒。使用capCaptureGetSetup宏来得到当前的设置值。下面程序为设置CAPTUREPARAMS结构的实现代码:BOOLVideoCapture:SetCapturePara()CA

26、PTUREPARMSCapParms=0;capCaptureGetSetup(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.Write

27、String(nFailedtosetthecaptureparameters);returnFALSE;/SetVideoFormatcapGetVideoFormat(m_capwnd,&m_bmpinfo,sizeof(m_bmpinfo);m_bmpinfo.bmiHeader.biWidth=IMAGE_WIDTH;m_bmpinfo.bmiHeader.biHeight=IMAGE_HEIGHT;BOOLret=capSetVideoFormat(m_capwnd,&m_bmpinfo,sizeof(m_bmpinfo);/log.WriteString(nVideoparamet

28、erssetproperly);returnret;/终止一个捕获任务BOOLVideoCapture:StopCapture()capCaptureStop(m_capwnd);capCaptureAbort(m_capwnd);Sleep(500);returnTRUE;窗口的捕捉在捕获前必须创建一个捕获窗口(CaptureWidnow),下面介绍有关捕获窗口的情况:创建一个AVICap捕获窗口,用capCreateCaptureWindow函数并返回一个句柄。将捕获窗口连接至捕获设备,用capDriverConnect函数来使一个捕获窗口与一个捕获设备连接或关联连接上后,就可以通过捕获窗

29、口向捕获设备发送各种消息,可以使用函数capGetDriverDescription来获得已安装的捕获设备名称及版本,将其列举在实现程序过程中。再利用capDriverGetName函数来得到捕获设备的名称将获得的版本发送到capDriverGetVersion。如果断开捕获窗口与捕获设备的连接用capDriverDisconnect。捕获窗口的状态,用capGetStatus函数来获得当前捕获窗口的状态,得到一个CAPSTATUS结构的拷贝。该结构的内容包含了图片的尺寸、卷轴的当前位置、overlay和preview是否已设置。由于其信息是动态的,每当捕获的视频流的尺寸发生改变,程序应该在获

30、取捕获设备的视频格式以后及时进行刷新。而捕获窗口尺寸的改变并不影响实际的捕获视频流的尺寸。该尺寸由视频捕获设备的格式和视频对话框决定。/捕获窗口BOOLVideoCapture:Initialize()chardevname128=0,devversion128=0;intindex=0;BOOLret=TRUE,ret1=TRUE,ret2=TRUE,ret3=TRUE;TRACE(VideoCapture:Initializen);创建一个AVICap捕获窗口m_capwnd=capCreateCaptureWindow(Capture,WS_POPUP,0,0,1,1,0,0);if(!

31、m_capwnd)returnFALSE;/connectcallbackfunctionsret=capSetUserData(m_capwnd,this);/Changedestroyfunctionsalsoret1=capSetCallbackOnVideoStream(m_capwnd,OnCaptureVideo);/得到已安装的捕获设备的名称及版本ret2=capGetDriverDescription(index,devname,100,devversion,100);/Connecttowebcamdriver/使一个捕获窗口与一个捕获设备连接或关联ret3=capDrive

32、rConnect(m_capwnd,index);if(!(ret&ret1&ret2&ret3)/Devicemaybeopenalreadyoritmaynothavebeen/closedproperlylasttime.AfxMessageBox(UnabletoopenVideoCaptureDevice);/log.WriteString(nUnabletoconnectdrivertothewindow);m_capwnd=NULL;returnFALSE;/Setthecaptureparametersif(SetCapturePara()=FALSE)/log.WriteSt

33、ring(nSettingcaptureparametersfailed);capDriverDisconnect(m_capwnd);/使捕获窗口与一个捕获设备断开returnFALSE;returnTRUE;视频捕获驱动视频捕获必须具有视频捕获驱动才能进行,其相关内容如下:视频捕获驱动的性能,capDriverGetCap函数得到当前连接视频驱动的硬件性能,该信息保存在CAPDRIVERCAPS结构中;视频对话框,每个视频驱动能够提供4个对话框来控制视频捕获和数字化处理视频对话框定义的视频压缩率和图像品质等。视频对话框都在视频捕获驱动中定义。这个四个对话框分别为:VideoSource对话

34、框用于控制选择视频来源(capDlgVideoSource);VideoFormat对话框定义视频帧的尺寸和精度,以及视频捕获卡的压缩设置(capDlgVideoForm;aW)ideoDisplay对话框控制在视频捕获期间相关显示器上的显示(capDlgVideoDispl;aW)ideoCompressio对话框控制压缩和图像品质(caoDlgVideoCompression)语音录制在音频的录制和播放时,采用的用户界面线程来处理,是CWinThread对象,根据前面线程的介绍,一步一步的来实现。录音用的一个CWinThread对象CAudioRec来实现,部分实现代码:LRESULTCA

35、udioRec:OnStartRecording(WPARAMwp,LPARAMlp)if(recording)returnFALSE;/打开录音设备MMRESULTmmReturn=:waveInOpen(&m_hRecord,WAVE_MAPPER,&m_WaveFormatEx,:GetCurrentThreadId(),0,CALLBACK_THREAD);if(mmReturn!=MMSYSERR_NOERROR)returnFALSE;if(mmReturn=MMSYSERR_NOERROR)for(inti=0;iMAXRECBUFFER;i+)/为录音设备准备缓存mmRetur

36、n=:waveInPrepareHeader(m_hRecord,recheadi,sizeof(WAVEHDR);/给输入设备增加一个缓存mmReturn=:waveInAddBuffer(m_hRecord,recheadi,sizeof(WAVEHDR);mmReturn=:waveInStart(m_hRecord);/开始录音if(mmReturn=MMSYSERR_NOERROR)recording=TRUE;returnTRUE;语音播放同样用的一个CWinThread对象CAudioPlay来实现,部分实现代码:LRESULTCAudioPlay:OnWriteSoundDat

37、a(WPARAMwParam,LPARAMlParam)/TRACE(CAudioPlay:OnWriteSoundDatan);MMRESULTmmResult=FALSE;char*p=NULL;intlength=(int)wParam;if(Playing=FALSE)returnFALSE;if(lengthlpData=p;lpHdr-dwBufferLength=length;mmResult=:waveOutPrepareHeader(m_hPlay,lpHdr,sizeof(WAVEHDR);/为回放设备准备内存块if(mmResult)deletelpHdr;deletep

38、;returnmmResult;mmResult=:waveOutWrite(m_hPlay,lpHdr,sizeof(WAVEHDR);/写数据(放音)if(mmResult)deletelpHdr;deletep;returnmmResult;m_Count+;returnMMSYSERR_NOERROR;视音频的传输视频采集采用AVICap从视频采集卡捕获视频图像,得到的是位图形式的视频帧,然后用Divx编码器进行压缩,压缩以后形成以帧为格式的Mpeg4流。通过Winsock实现压缩后的视频数据在局域网中的实时传输,接收完的数据交给Divx解码器,以帧的格式解压,最后实现视频显示。所以提

39、出以帧为单位发送视频数据流。为了在接收端能够方便地提取出一帧,提出如表4.1所示的格式组建帧。完整的一帧由5个字段组成,各个字段的意义如下:帧开始标志:标志着一帧地开始,占用4个字节的空间;帧大小:表示整个帧的大小,包括5个字段的大小,占用4个字节的空间;帧编号:表示帧的顺序编号,占用4个字节的空间;帧类型:标志此帧是否是关键帧,占用1个字节的空间;帧数据:存放压缩后一帧的完整数据。处理视频传输如下图。图4.7视频传输图相对于视频的传输,语音的传输就简单得多了,在这里建立了两个线程来处理,先来用一个语音录制线程在一个客户端录制语音,再通过用G729a对语音进行编码,然后传输到另一客户端,同样用

40、G729a对语音进行解码,然后用一个语音回放线程将语音播放出来。.系统测试与评价测试拷贝客户端与服务器端到两台配置如下的计算机上:硬件环境:CPU:IntelPentiumlll或者Pentium41GHz内存:256MB以上硬盘:20GB以上其它:分别配有摄像头、麦克风、音响或者耳机等外部设备软件环境:WindowsXP操作系统分别运行两个客户端和一个服务器端,使用A客户端向B客户端发送消息,A可以正常发送消息并可以显示消息,B可以接收到信息并显示。服务器端维护的在线用户信息正常,客户端接收到的在线用户信息与服务器端相同,在有一个客户端下线或上线时,可以在一定的时间内得到更新,说明服务器端可以正常维护在线用户列表,并将在线用户列表正常的发送到客户端。此外,AB可以进行语音视频聊天。图5.1语音视频聊天窗口如图5.1所示,进入到与好友的对话界面后,如果想与好友进行语音、视频聊天,那么单击该界面上的“请求视频”按钮,好友就会收到你请求视频聊天信息的对话框,好友同意,则单击接收视频按钮,两人就可以进行视频、语音聊天了。在界面的话筒和喇叭的图片旁边有两个调

温馨提示

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

评论

0/150

提交评论