3.2 需求分析 在同一个局域网中,如何根据自身业务的要求,量身定制,对视频设备进行合理搭配,选择一套合理的视频聊天室系统。如何来满足局域网内部用户的通讯要求,在考虑到网络带宽的同时,提高视频清晰度,动态画面的流畅,语音的实时传输等,正是现代社会通讯所必需的。设计本系统时,分析网络承载、整个系统结构的组建等是实现局域网文字聊天和语音视频聊天所必需的。 内容来自论文无忧网 www.paper51.com 文字、语音视频聊天作为一种广泛的网络应用对其基础的承载网络环境有着较高的网络要求。其中应重点考虑的是网络的带宽情况、端到端的时延、时延抖动、丢包率等问题。 内容来自www.paper51.com
(1)网络带宽需求,视频聊天对网络的带宽需求为“视频带宽+IP包头开销”,计算方法为:网络带宽 = 视频带宽 × 1.2。 paper51.com (2)端到端的时延,网络传输不可避免的会发生传输时延,通常建议视频聊天的通用时延小于150ms。 copyright paper51.com
(3)时延抖动,由于音频/视频的传输为实时的交互,因此网络的时延抖动更为重要,一般,视频聊天的时延抖动控制在50ms内。 内容来自论文无忧网 www.paper51.com (4)丢包率,网络数据传输经常会出现丢包现象,视频传输过程中数据丢包严重的话会影响在线视频聊天质量。因此,在设计上应将网络上的丢包率控制在1%以内。 内容来自论文无忧网 www.paper51.com
视频聊天对实时性要求较高的网络应用,作为其基础的承载网络有较高的宽带和对网络中的业务流量有较高的控制能力。而视频聊天系统本身对带宽的要求为62kbit/s~2Mbit/s,但是为了满足流畅的视音频效果,要求带宽不低于384kbit/s。 内容来自www.paper51.com 文字、视频聊天的功能和应用效果体现在客户端,而服务器端则是必不可少的,对于系统的需求分析在系统设计的过程中应该明确、细致: paper51.com (1) 文字聊天:首先启动服务器端,当用户启动客户端时,用服务器保存的用户名和密码来验证客户是否已经登录到服务器。只有当有两个以上的用户启动客户端时,才可以进行文字聊天,聊天内容要经过服务器中转,分别在服务器端和两个聊天的客户端显示聊天。 copyright paper51.com (2) 语音视频聊天:在有两个客户在线的情况下,才能进行语音视频聊天。两个用户要进行语音视频聊天时,一个用户选中另一个用户的用户名,根据该用户名在后台链表中的对应IP地址查找用户并请求视频连接。当双方确认视频连接后就进行视频传输,并显示在客户端,同时用线程实现语音录制和回放。这样,两个用户就实现了点对点的语音视频聊天。在进行语音视频聊天的过程中,不能再与其它用户进行语音视频聊天,但能够与其它用户进行文字聊天。 内容来自论文无忧网 www.paper51.com
4 系统结构 内容来自www.paper51.com
4.1 硬件结构 内容来自论文无忧网 www.paper51.com 该系统采用的是Server/Client结构,服务器端是一台PC机,而客户端是PC机和一个数字摄像头、耳机和麦克风。它们进行文字聊天时,要经过服务器进行中转,而当进行语音视频聊天时是客户端与客户端之间直接进行的点对点的连接,它们之间的网络拓扑结构如图1。在图中,为了简便,没有画出麦克风、音箱或耳机等外部设备。 paper51.com 内容来自www.paper51.com 图1 网络拓扑结构图 copyright paper51.com 4.2 软件结构4.2.1 功能需求 http://www.paper51.com 通过需求调研并分析,确定系统具备的基本功能,包括:文字聊天、语音视频聊天。 内容来自论文无忧网 www.paper51.com
(1) 文字聊天: copyright paper51.com
文字聊天采用的是TCP模式,包括服务器端和客户端。首先启动服务器端,客户端通过用户名和密码登录服务器,服务器响应客户端登录并提示有用户登录,此时两个用户就可以进行文字聊天,在文字聊天时通过服务器中转,而每个用户可以同时与多个用户进行文字聊天。当有用户退出时,服务器做出响应,提示在线用户,××用户下线。 内容来自www.paper51.com (2) 语音视频聊天: paper51.com
语音视频聊天时采用的是UCP模式,客户端与客户端点对点的进行,不需要经过服务器端中转。在文字聊天的基础上,客户端之间自行处理的语音视频聊天,运用VFW函数库中的函数对USB口输入的数字视频信息进行相关处理,比如:视频捕获、影像压缩以及影像播放等,同时利用线程来处理声音部分的录制、回放等。A客户端向B客户端请求语音视频聊天是通过B客户端的用户名来获得B客户端的IP地址,并向B客户端发送语音视频聊天请求,当B客户端接受后捕获视频,并进行压缩传输到A客户端解压并进行显示,在B客户端接受视频的同时,A客户端也捕获视频,压缩传输到B客户端解压并进行显示。 内容来自www.paper51.com 4.2.2 系统功能模块图 paper51.com 该系统分为服务器端和客户端,完成了文字聊天和语音视频聊天,使用上只有文字聊天时才会通过服务器端,而对于语音视频聊天就只需要对整个在线客户端两两之间进行点对点的视频聊天。而在语音视频时包括了视频捕获、视频压缩、解压缩、语音录制、语音回放以及视频传输等。整个系统的功能模块图如图2。 内容来自论文无忧网 www.paper51.com
paper51.com 图2 系统功能模块图 http://www.paper51.com
4.3 系统各模块流程图 copyright paper51.com 在整个系统中主要运行两个功能:图3 文字聊天流程图和图4 语音视频聊天流程图。 paper51.com
copyright paper51.com 图3 文字聊天流程图 copyright paper51.com
copyright paper51.com 图4 语音视频聊天流程图 http://www.paper51.com 5 系统的详细设计 内容来自www.paper51.com
5.1 文字聊天5.1.1 TCP套接字的运用 内容来自论文无忧网 www.paper51.com 在文字聊天时,服务器端与客户端的连接是采用的TCP套接节进行连接。TCP套接字的使用如图5。创建CSocket对象CSocketServer来处理服务器端与客户端的连接,CSocket继承于CasyncSocket,是Windows Socket API的高层抽象。CSocket通常和CsocketFile以及Carchive类混合使用,这两个类负责数据的发送和接收。要使用CSocket对象,首先要调用构造函数,然后调用Create函数创建一个Socket句柄。CSocket函数缺省是创建一个流Socket;如果没有使用CArchive类,那么还可以创建一个数据报Socket。服务器端调用Accept,客户端调用Connect,然后创建一个CsocketFile去关联CSocket。接下来的操作可以创建CArchive对象关联CsocketFile,以用来发送和接收数据。 copyright paper51.com copyright paper51.com 图5 TCP套接字的使用 内容来自www.paper51.com 5.1.2 文字聊天实现 内容来自www.paper51.com ChatServer服务器运行时,利用一个CSocket对象CSocketServer启动服务器,用函数gethostname来获得服务器端主机名和IP,同时在服务器对话框中显示服务器IP,并将分配的固定端口号8123显示在对话框中。用一个list列表显示在线用户,随时更新用户登录情况,用一个edit box显示客户端的聊天内容以及系统提示消息。每一个ChatClient客户端启动时,利用服务器内定的用户号和密码来登录(如图6)。在整个系统中,利用链表来处理所有的用户信息:当有用户登录时,在链表尾部加入该用户信息;当用户下线时,在该链表中删除用户,并提示所有用户,该用户下线。在对链表进行操作的同时,要更新list列表中的信息。 内容来自论文无忧网 www.paper51.com
paper51.com 图6 用户登录界面 内容来自www.paper51.com ChatServer服务器端响应客户端文字聊天时的中转情况如图7。 paper51.com
http://www.paper51.com 图7 服务器响应文字聊天信息中转 copyright paper51.com ChatClient客户端两两间进行文字聊天时,发送信息的处理函数如下: paper51.com void CChatClientDlg::OnChatBtSend() //发送信息按键 copyright paper51.com { copyright paper51.com if(!m_bConnect) 内容来自论文无忧网 www.paper51.com { copyright paper51.com SetMessageBox("请连接服务器!\r\n"); 内容来自www.paper51.com
return; copyright paper51.com } paper51.com
CStringstr; paper51.com CStringszUserName; copyright paper51.com
CMesgmsg; http://www.paper51.com GetDlgItemText(IDC_MESSAGE,str); paper51.com GetDlgItemText(IDC_USERNAME,szUserName); http://www.paper51.com if(str.GetLength() <= 0 ) http://www.paper51.com { http://www.paper51.com SetMessageBox("请输入想要发送的信息!\r\n"); copyright paper51.com
return; paper51.com } paper51.com if( szUserName.GetLength() <= 0) 内容来自论文无忧网 www.paper51.com { http://www.paper51.com SetMessageBox("请选择说话对象!\r\n"); copyright paper51.com
return; 内容来自www.paper51.com } copyright paper51.com //消息封装 paper51.com msg.m_szCommand.Format("Message"); http://www.paper51.com
msg.m_szRecObject.Format(szUserName); 内容来自论文无忧网 www.paper51.com msg.m_szText.Format(str); paper51.com m_csClient->SendM(&msg); 内容来自论文无忧网 www.paper51.com AddReceiver(szUserName, true); paper51.com AddChatMessage(str); paper51.com } 内容来自www.paper51.com 在聊天两个客户端的信息情况如图8和图9。 内容来自www.paper51.com http://www.paper51.com 图8 接收文字信息 内容来自www.paper51.com
copyright paper51.com 图9 发送文字信息 http://www.paper51.com 5.2 语音视频聊天5.2.1 UDP套接字的运用 http://www.paper51.com 在实现语音视频聊天时,采用的是基于UDP套接字的点对点模式,而UDP面向的是无连接的数据服务,其套接字的使用如图10所示。 copyright paper51.com
paper51.com
图10 UDP套接字的使用 内容来自www.paper51.com |