虚拟教室系统的设计与实现

虚拟教室系统的设计与实现

ID:37122066

大小:1.22 MB

页数:77页

时间:2019-05-18

上传者:U-145848
虚拟教室系统的设计与实现_第1页
虚拟教室系统的设计与实现_第2页
虚拟教室系统的设计与实现_第3页
虚拟教室系统的设计与实现_第4页
虚拟教室系统的设计与实现_第5页
资源描述:

《虚拟教室系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

摘要随着计算机技术、网络通信技术和多媒体技术的发展,以网络远程教育为主体新一代远程教育模式逐渐形成。这种模式打破了传统教育模式的局限,为地域分散的教师和学生提供一个共享协作式的网络学习环境,为普及教育、实施继续教育提供了一种十分有效的方式。本文在分析国内外远程教育系统的基础上,设计并实现了一种基于网络的实时交互式虚拟教室系统。系统通过模拟来实现传统课堂的教学功能,为虚拟教室的学生与教师提供了文字聊天、电子白板、语音聊天、视频直播等多种交流方式。本文首先阐述了论文的背景与主要研究内容,然后分析了P2P(PeertoPeer)技术在流媒体传输上的优势,同时提出了以Mediastreamer2多媒体库为基础实现音视频的采集、编码、传输、解码和播放的方案,并分析了块可扩展交互协议框架BEEP(BlockExtensibleExchangeProtocol)在设计应用层协议方面的优点以及ActiveX技术的特点。然后,在需求分析的基础上,给出了系统的整体结构设计与模块划分,同时定义了通信消息的格式,接着分别从客户端和服务器两个方面论述了系统的详细设计与实现。最后,对系统进行了功能测试与性能测试,并对测试结果进行了分析,提出了今后的研究方向。关键词关键词:关键词:::虚拟教室P2PMediastreamer2BEEP AbstractWiththedevelopmentofcomputertechnology,networkcommunicationtechnologyandmultimediatechnology,apatternofremoteeducationbasedonnetworkisslowlytakingform.Thepatternbreaksupthelimitationsoftraditionaleducationpattern,andprovidesanetworklearningenvironmentforthegeographicallydispersedteachersandstudents.Thepatternalsooffersaveryeffectivewaytopopularizeeducationandimplementcontinuingeducation.Thethesisdesignedandimplementedareal-timevirtualclassroomsystembasedonnetworkaccordingtotheanalysisofremoteeducationathomeandabroad.Thesystemimplementedtheteachingfunctionsofconventionalclassrooms,andprovidedfortheteachersandstudentsmanycommunicationways,suchastextchat,electronicwhite-board,voicechatandvideolivingbroadcast.Thethesisfirstlygaveadescriptionofthebackgroundandcontentsoftheresearch,andanalyzedtheadvantagesofP2P(PeertoPeer)technologyforstreamingapplications.Atthesametime,aschemebasedonMediastreamer2librarytoimplementtheacquisition,coding,transmission,decodingandplayingofaudioandvideowasproposed.Also,advantagesofBEEP(BlockExtensibleExchangeProtocol)protocolonapplicationlayerandActiveXtechnologywereanalyzed.Secondly,onthebasisofrequirementanalysis,thethesisproposedtheoveralldesignandmodularizationofthesystem,definedtheformatofmessage,andelaboratedthedetaileddesignandimplementationofthesystemfromtheaspectsofclientandserver.Functiontestingandperformancetestingwereconducted,andthetestresultswereanalyzed.Finally,thethesispointedouttheresearchdirectioninthefuture.Keyword:VirtualClassroomP2PMediastreamer2BEEP 目录第一章绪论.....................................................................................................................11.1论文背景.............................................................................................................11.2国内外研究现状.................................................................................................21.3本文的主要研究内容.........................................................................................21.4章节安排.............................................................................................................3第二章相关技术.............................................................................................................52.1P2P与流媒体技术..............................................................................................52.1.1P2P技术概述............................................................................................52.1.2流媒体技术概述.......................................................................................62.1.3流媒体传输策略.......................................................................................72.1.4Mediastreamer2开发框架.........................................................................92.2BEEP协议.........................................................................................................112.2.1BEEP协议原理.......................................................................................112.2.2BEEP协议特点.......................................................................................132.3ActiveX技术.....................................................................................................132.4本章小节...........................................................................................................14第三章虚拟教室系统的需求分析与总体设计...........................................................153.1系统需求分析...................................................................................................153.1.1系统的功能性需求.................................................................................153.1.2系统的性能需求.....................................................................................173.2系统总体结构设计...........................................................................................183.2.1系统网络结构设计.................................................................................183.2.2系统模块划分.........................................................................................193.3消息格式定义...................................................................................................213.4本章小结...........................................................................................................26第四章客户端的详细设计与实现...............................................................................274.1登录认证模块...................................................................................................274.1.1登录认证模块的逻辑设计.....................................................................274.1.2登录认证模块的流程设计.....................................................................284.2业务管理模块...................................................................................................294.2.1业务管理模块的逻辑设计.....................................................................294.2.2业务管理模块的流程设计.....................................................................31 4.3虚拟教室模块...................................................................................................314.3.1虚拟教室模块的逻辑设计.....................................................................324.3.2虚拟教室模块的流程设计.....................................................................334.4流媒体处理模块...............................................................................................374.4.1流媒体处理模块的结构设计.................................................................374.4.2流媒体处理模块的实现.........................................................................394.5P2P传输模块....................................................................................................404.6本章小节...........................................................................................................41第五章服务器端的详细设计与实现...........................................................................435.1通信模块的设计与实现...................................................................................435.2在线用户管理模块...........................................................................................445.2.1在线用户管理模块的逻辑设计.............................................................445.2.2在线用户管理模块的流程设计.............................................................465.3虚拟教室管理模块...........................................................................................475.3.1虚拟教室模块的逻辑设计.....................................................................475.3.2虚拟教室模块的流程设计.....................................................................515.4P2P传输模块....................................................................................................535.5本章小节...........................................................................................................55第六章系统测试...........................................................................................................576.1系统功能测试...................................................................................................576.2系统性能测试...................................................................................................646.3测试结果分析...................................................................................................656.4本章小节...........................................................................................................65第七章总结与展望.......................................................................................................677.1本文工作...........................................................................................................677.2存在问题...........................................................................................................67致谢.................................................................................................................................69参考文献.........................................................................................................................71 第一章绪论1第一章绪论本章首先论述本文的选题背景,然后将会分析国内外远程教育系统的发展状况并,其次会介绍国内外的一些有特色的平台。本章的最后会指出本文的主要研究内容和章节安排。1.1论文背景随着计算机科学技术和通信技术的迅速发展,社会信息化程度的逐渐深化,当今社会各个领域的人们都必须不断更新知识,不断学习,传统校园教育由于其课堂面授的形式显然已经无法满足这种需求,而远程教育在这方面具有独特的优势。同时,计算机通信技术和多媒体技术等技术的高速发展,这些都使得基于网络的多媒体远程教学成为了可能,目前,建立远程教育系统,开展网络化教育已经成为国内外研究的热点。我国远程教育的发展至今大约经历了三代:第一代是函授教育。第二代是利用广播电视、录音录像等大众传媒开展多种媒体教学的远程教育,即广播电视教[1]育。第三代是基于现代通讯技术的远程教育,即现代远程教育。远程教育系统克服了时间和地域的限制,有利于共享教学资源,降低教育成本和提供学习效率,是解决我国教育资源不足的有效方法之一。在远程教育系统中,用户只要连接网络,就可以使用该教学系统,真正实现远程教学。这种网络化的教学方式使得学生可以根据自己的学习情况和时间情况更加合理地制定学习计划;通过通信技术实现同步或者异步通讯,可以完成教师与学生之间的互动交流,使得教学活动更加开放、灵活和多样化;而且由于在教学过程中可以利用文本、图形、图像、音频和动画等多种媒体进行交流,从而充分地激发学生的学习兴趣,提高教学质量和学习效果,更加有效地发挥各种教育资源的优势,为学生提供更好的服务。[2]虚拟教室是远程教育系统的核心组成部分。虚拟教室,顾名思义就是在计算机网络上利用多媒体通信技术构建一个虚拟的交互式教学环境,通过模拟传统课堂的教学功能,为地域分散的教师和学生提供一个共享协同式课堂学习环境,使他们可以通过语音、视频、文字和电子白板等多种方式进行实时的交流和协同操作。与传统的课堂教学模式相比较,虚拟教室打破了原有的时间与空间的约束,满足了信息时代的人们在线交流与学习的迫切需求。 2虚拟教室系统的设计与实现1.2国内外研究现状国际上的远程教育起步的较早,最初是一些计算网络比较发达的国家,例如美国、英国和德国等。在很短的时间内,远程教育的发展与应用发生了巨大的变化。美国作为目前远程教育规模最大的国家,从早期就十分重视远程教育的发展,截至2002年,全美约90%的公立高校提供电子媒体的远程教育课程,相对于1998[3][4]年的70%有了很大的提高。宾夕法尼亚州立大学的WorldCampus平台作为美国最早开设硕士教育,将远程教育推向更高的层次水平。英国则在全国范围内的所有院校中实施一项称为“计算机用于教学创新”计划,其目的是通过计算机、多媒体于远程通讯技术相结合,实现对高等学府所有学科从科学模式、教学内容到[5]教学组织形式的彻底变革。德国的远程教育则更具有普遍性,由政府于企业联合共同推出中小学联网计划。截止到2000年前夕,德国已经上网的中小学已达3500所,同时国家还设立了“国家远程教育中心”,将远程教育渗透到基础教育之中。[6][7]目前,国外比较有特色的平台主要有:TopClass、LearningSpace、WEBCT、Virtual-U,WISH,ClassFronter等。以WISH为例,WISH是由美国Pennsylvania州立大学开发的,包括课堂管理、电子通信、课程公共牌、电子白板、实时音频系统、邮件列表等系统模块。该系统的特点是提供教学资源的管理工作,远程教学功能是通过一些通用工具完成的。我国的远程教育起始于1997年,之后迅速发展,特别是1998年国务院批准了教育部《关于发展我国现代远程教育的意见》,代表着我国现代远程教育开始进[8]入了规范化发展阶段。清华大学、北京邮电大学、浙江大学、中国广播电视大学等一批单位纷纷开始从事远程教育方面的实验并取得了不错的效果。随着新的理论研究成果不断涌现,我国远程教育平台的建设与发展也是日新[9]月异,涌现出一批优先的远程教育支持平台。国内的平台主要有:安博远程教育平台、网窗远程教育平台,方正校园解决方案,金海航新数字学校等。如安博远程教育平台是一个基于课程、支持国际和国家教育行业标注的网络教育软件平台,支持同步教学、异步教学、教师引导教学和学生自主学习等多种教学模式。同时平台还拥有功能强大、灵活、方便的网络教育教务管理功能。1.3本文的主要研究内容本文的主要研究目的是设计与实现一个基于网络的实时交互式虚拟教室系统,论文的主要研究内容包括:1.研究虚拟教室实现的关键技术,介绍P2P(PeertoPeer)技术与流媒体技 第一章绪论3术基本概念,分析了基于C/S模式的传统流媒体系统中数据分发策略的不足,以及内容分发网络CDN(ContentDeliveryNetwork)、IP组播等改进策略存在的问题,提出P2P方式的流媒体数据传输策略;简要分析了Tribler开源项目以及Mediastreamer2开发框架的基本原理及特点;研究了块可扩展交互协议框架BEEP(BlockExtensibleExchangeProtocol)的原理以及特点,分析了利用BEEP协议框架设计应用层协议的优势,提出利用Vortex开源库的设计本系统的通信协议;分析了ActiveX技术的原理与应用。2.对虚拟教室系统进行了详细的需求分析,并在功能需求分析的基础上,对系统进行总体设计,然后将系统划分为客户端与服务器端两个部分,分别对客户端与服务器端进行模块划分,并设计了服务器与客户端之间的消息格式。3.根据系统的总体设计与模块划分,结合UML类图与流程图,详细描述客户端与服务器的设计与实现。4.根据系统的功能性需求,撰写测试用例,结合具体的测试用例对系统的各个模块进行功能测试,然后对系统进行性能测试,通过对系统测试结果的分析,确认系统基本达到的预期的设计目标。1.4章节安排本文的组织结构如下:第一章:绪论,阐述了本文课题的研究背景,国内外研究现状,研究目的和意义,介绍了本文的主要工作和组织结构。第二章:相关技术,介绍了虚拟教室开发的相关技术,主要包括P2P技术、流媒体技术、Mediastreamer2开发框架、BEEP协议、ActiveX技术的理论和特点。第三章:虚拟教室系统的需求分析与总体设计。对虚拟教室系统的需求进行了分析,然后根据功能分析,对系统进行总体设计,最后介绍了系统客户端与服务器通信的协议。第四章:客户端的详细设计与实现。根据第三章的总体设计,对客户端子系统的主要功能模块进行了详细设计与实现。第五章:服务器端的详细设计与实现。根据第三章的总体设计,对服务器端的主要功能模块进行了详细设计与实现。第六章:运行与测试。首先通过设计测试用例进行系统的功能测试,然后给出系统运行时的性能参数,最后对测试结果进行分析,验证了虚拟教室系统的有效性和可靠性。第七章:总结与展望。对本文的研究工作做出总结,并对未来的研究工作做出展望。 4虚拟教室系统的设计与实现 第二章相关技术5第二章相关技术本章主要介绍虚拟教室系统中的关键技术,首先将介绍P2P技术与流媒体技术的基本概念,然后对Tribler开源项目以及Mediastreamer2开发框架进行分析,其次将会介绍BEEP协议以及Vortex库,最后将阐述ActiveX技术的原理和应用。2.1P2P与流媒体技术2.1.1P2P技术概述随着互联网在社会生活中各个领域的广泛应用和迅速普及,信息量和用户量剧增,现有的C/S模式已经无法支持大规模的网络应用,由此产生了P2P技术。[10]P2P,即Peer-to-Peer的缩写,Peer在英文里有同等者、伙伴和合作者等意思。因此P2P可以理解是伙伴之间平等交流、互惠互利。P2P网络是一种分布式的对等网络,在P2P网络中,所有成员之间不需要中间节点而可以直接通信,成员既是服务的消费者又是服务的提供者。在为其他成员提供自身的资源和消息的同时[11]也从其他成员中获取资源和消息。P2P模式与C/S模式的根本区别在于两者的网络拓扑结构不同,即两个系统中节点的连接方式不同。分布式网络拓扑结构有集中式拓扑、分散式拓扑、树型拓扑和环形拓扑4种基本形式,由这4种基本形式可以组成各种混合拓扑结构,C/S模式属于集中式拓扑结构,部分P2P模式属于分散式拓扑,其余大多数属于混合[12]式拓扑结构。由于网络拓扑结构的不同,基于P2P模式的网络相对于基于C/S模式的网络具有以下的特点:非中心化:网络中的资源和服务都分散在P2P网络的所有节点上,信息的传输和服务的实现都是由节点之间直接进行。这样彻底解决了由于服务器性能不足而引起的瓶颈问题。P2P的非中心基本特点,带来了其在可扩展性、健壮性等方面[13]的优势。可扩展性:在P2P网络中,随着新成员的加入,不仅服务的需求在增加,系统的资源和服务能力也在同步扩展,如果能够对系统中所有成员的资源和能力进行合理利用,理论上系统的规模可以无限扩展。健壮性:由于P2P网络的无中心化,系统中没有所谓的中心和枢纽,系统中的部分节点或者网络遭到破坏对其他部分的影响很小。P2P网络一般在部分节点失效时能够自动调整拓扑结构,保持其他节点之间的连通性。P2P网络通常是自组织 6虚拟教室系统的设计与实现的方式建立起来的,并允许节点自由地加入和离开。P2P网络还能够根据网络带宽、节点数、负载等变化不断地做出自适应的调整。安全性:在P2P网络中,信息分布式地存储在系统各个成员中,而且系统中数据和信息交互都是动态调整的,没有固定的路线。所以系统的安全性得到了极大地提高。高性能比:随着个人计算机的普及和硬件能力在高速发展,目前计算机终端的资源和处理能力依照摩尔定理高速发展。P2P技术正是通过有效组织这些散列在互联网中的大量普通节点,利用其中闲置的计算能力、存储空间或者网络带宽,达到更高的计算和服务能力。负载均衡:在P2P网络中,对等节点既是客户端又是服务器,减少了传统C/S结构下对服务器计算能力、存储能力和网络带宽的要求,缓解由于服务器过载而造成单点失效的问题。2.1.2流媒体技术概述流媒体技术是一种可以使音频、视频和其他多媒体文件能够在Internet以及[14]Intranet上以实时的、无需下载等待的方式进行播放的技术。简单来说就是应用流式传输技术,把连续时基的图像和声音数据经过压缩等处理后组成一个个特殊格式的压缩包,从流媒体服务器向客户端连续、实时地传输。让用户一边下载一边观看、收听,而不需要把整个文件下载完之后再光看,这项技术通常是在客户端创建一个缓冲区,在播放前预先下载一段数据作为缓冲,缓冲区技术能够有效地缓解客户端播放的延迟和抖动现象,保证数据包顺序正确,从而使得流媒体数据能够连续播放。流媒体技术不是单一的技术,它是建立在很多基础技术之上的[15]技术,包括网络通信、数据采集、数据压缩、数据存储和数据传输等多项技术。流媒体技术的工作流程主要包括数据采集压缩、数据发布、数据传输、数据[16]解压缩播放四个环节。数据采集压缩:将原始的多媒体文件或者由摄像头和麦克风等硬件设备采集的实时音视频数据,经过编码器压缩转换成适合网络传输的流格式数据,然后保存成流式文件存储在流媒体服务器中,或者直接发送到流媒体服务器。数据发布:适合流式传输的流式文件或者现场采集的实时流媒体数据,通过专门的流媒体服务器,完成发布。流媒体服务器是整个流媒体系统的核心,其存储量大,数据率高,并且要具有请求处理、数据检索、流式传输、播放控制等功能。数据传输:流媒体数据的传输需要适合的传输协议。目前在Internet上实时流[17]式传输协议主要包括实时传输协议RTP(Real-timeTransportProtocol)、与RTP 第二章相关技术7[18]一起提供流量控制和拥塞控制服务的实时传输控制协议RTCP(Real-timeTransportControlProtocol)、定义一对多应用程序如何有效地通过IP网络传输多媒[19][20]体数据的实时流协议RTSP(Real-timeStreamingProtcol)、资源预留协议RSVP(ResourceReservationProtocol)等。数据解压缩播放:流媒体到达客户端后,进入缓冲区,以减少抖动,并保证[21]数据包顺序正确,然后进行音/视频界面,采用同步算法,播放多媒体数据。2.1.3流媒体传输策略传统的流媒体系统是基于C/S模式,服务器以单播方式与客户端建立连接。由于流媒体服务具有高带宽、持续时间长等特点,随着客户端数目的增加,服务[22]器的资源如带宽、I/O处理能力等很快就会被消耗完,成为系统的瓶颈所在。[23]目前的解决方法主要包括:一是采用IP组播技术提供广播,实现Internet上高效的一对多通信,提高系统的可扩展性,但是IP组播存在种种限制,例如IP分组通常需要多跳才能到达客户端,存在时延叠加效应,同时缺乏拥塞控制和难[24]以在现实网络中实现,这种技术并未广泛应用;二是内容分发网络(CDN)技术将服务器尽量放到离客户端近的地方以减轻网络负载,该方法需要ISP支持,运营成本高,并且只能部分解决可扩展性问题,因为CND服务器有可能成为系统的瓶颈;三是采用P2P技术完成流媒体分发。根据2.1.1P2P技术概述,P2P技术具有自组织、自适应、容错能力强、可扩展性强、负载均衡等优点,将P2P技术应用到流媒体分发过程中后,客户端可以根据网络状态、设备处理能力与一个或者多个其他客户端共享数据,这种方式可以充分利用客户端的资源,使得流媒体传输所需要的大量带宽和数据处理能力由P2P网络中的对等节点共同分担,从而有效地减少流媒体服务器的压力。目前基于P2P技术的网络直播软件已经得到广泛应用,代表性的有PPLive、PPStream、UUsee[25]等,它们都是采用P2P技术传输流媒体数据。在虚拟教室系统的开发中,服务器流媒体数据的分发以及客户端流媒体数据的下载都是采用P2P传输技术实现。由于P2P传输模块要实现的功能较复杂,并且对稳定性、可扩展性和性能的要求较高,因此P2P传输模块拟定在成熟的开源项目基础上实现。通过对目前主流的P2P开源项目进行比较分析后,确定采用开源的Tribler项目作为该模块的实现基础。Tribler是基于ABCClient实现的客户端,ABCClient是基于BitTornado开源项目设计的,BitTorando又是原始BitTorrent协[26][27]议栈的扩展。BitTorrent协议栈是基于Python语言实现的,Python语言是一种完全面向对象的、功能强大的解释型编程语言,其语法结构简单,提供丰富的数[28]据结构和多元化的基础类库,包括网络编程库、GUI开发库、多线程库等。同 8虚拟教室系统的设计与实现时,Python语言具有良好的跨平台特性,支持与C语言、Java语言的互相调用接口。同时,Tribler开源项目通过封装BitTornado、CacheDB、NATFireWall等基础模块实现Tribler.Core模块,Tribler.Core模块为软件开发人员提供实现基于BT协议应用的公共访问类以及静态方法,因此Tribler是一个灵活的BT协议扩展库,可以在其基础之上方便地构建基于BT协议的应用和服务。图2.1TriblerCore模块的子模块和关键类图2.1包括的是TriblerCore模块的主要子模块和关键类。TriblerCore模块封装了BitTorrent协议栈的调用接口,提供更高层次的类和方法,用于实现基于BT协议的P2P传输模块。下面对各个包中主要类进行描述分析。API模块主要是导入TriblerCore模块的各个子模块。Base模块主要是包括对象序列化的接口类Serialization以及对象拷贝函数的接 第二章相关技术9口类Copyable,TriblerCore中的相关子模块会实现这些接口。Session模块是TriblerCore模块的核心子模块,一个Session对象就是一个TriblerCore的运行实例,主要是管理下载任务Download列表,提供启动下载任务、取消下载任务、设置下载状态的回调函数、添加和取消Session的监听函数等方法。SessionConfig模块主要是完成Session对象的参数配置,SessionConfigInterface是接口类,通过(key,value)键值对的方式设置Session对象的PermID、监听端口、IP地址、Socket超时时间、Socket超时的检测时间等参数,同时提供获取这些参数的方法,SessionStartConfig继承SessionConfigInterface接口类、Copyable接口类、Serialization接口类,提供SessionConfigInterface对象序列化和反序列化的方法。TorrentDef模块主要是保存下载任务的静态信息,包括BT协议下载文件时Torrent文件的信息,如Tracker服务器URL地址、数据Piece的长度、Torrent文件的哈希值等,同时提供创建流媒体直播流下载任务的方法。Download模块主要是包括Download类,一个Download对象代表一个运行的BT下载任务,Download类提供暂停下载任务、重启下载任务、设置和获取最高下载速度等方法。DownloadConfig模块主要是负责完成Download对象的配置信息设置,DownloadConfigInterface是接口类,通过(key,value)键值对的方式设置下载文件的保存路径、流媒体直播的数据源、Download对象支持的事件以及事件的回调函数、Download对象的最大连接数、下载模式等,同时提供获取这些参数的方法。DownloadStartConfig继承DownloadConfigInterface接口类、Copyable接口类、Serialization接口类,提供DownloadConfigInterface对象序列化和反序列化的方法。DownloadState模块主要是反应当前时刻Download对象的下载情况,提供获取节点列表、当前下载进度、下载速度、活动连接数等参数的方法。Exceptions模块主要是定义BT下载时的异常错误。Defaults模块主要是保存TriblerCore模块的默认配置。Osutils模块主要包括一些常用的工具函数。通过上面的分析可以发现,TriblerCore模块的各个子模块的实现比较清晰合理,便于在其基础上进行扩展和调用,实现虚拟教室系统的P2P传输模块。2.1.4Mediastreamer2开发框架[29]Mediastreamer2是一个功能强大、体积小巧并且可定制性强的媒体流引擎,尤其是应用在音频或者视频电话会议系统中。它是一个流媒体的开发包,主要完成音频数据与视频数据的采集、编码、解码、格式化和播放,同时提供多媒体流的网络发送以及接收功能。它通过调用音频编码库(PCM、GSM、SPEEX等)、视频编码库(ffmpeg)和RTP库(ORTP)完成整个音视频流的处理。 10虚拟教室系统的设计与实现在Mediastreamer2框架中,负责处理数据的基本单元是被一种称为MSFilter的过滤器(Filter)对象。每个MSFilter按照某种特定的方式处理数据,包括捕捉音视频数据,显示音视频数据,发送和接收RTP数据,编解码视频音频数据等。每个MSFilter都有0个或者多个输入连接点(Pin),同时有0个多个输出连接点(Pin)。MSFilter之间通过连接点(Pin)互相连接,对于每个Filter对象,数据首先通过输入Pin进入过滤器,过滤器完成数据处理后,会通过输出Pin将处理后的数据发送其他的Filter。这样MSFilter会通过Pin将数据在多个过滤器之间流动,形成链表的结构,这样的MSFilter链表称为过滤器图表(FilterGraph)。图2.2Mediastreamer2的过滤器图表如图2.2所示,在Mediastreamer2框架中,按照处理流程分类,MSFilter可以分为源过滤器、转换过滤器、输出过滤器三类。1.源过滤器(SourceFilter):源过滤器主要是完成音频数据和视频数据的采集工作,数据源可以是文件、网络、摄像头、麦克风等。不同的源过滤器可以处理不同类别的数据源。2.转换过滤器(TransformFilter):转换过滤器主要是从输入Pin获取数据流,处理数据,然后产生输出流。转换过滤器对数据的处理主要包括:编码、解码、设置图像大小、设置音频的采样率、混音等。3.输出过滤器(OutputFilter):输入过滤器在过滤器表图处理最后一级,主要负责数据的最终处理方式。例如,将数据流通过RTP发送出去、将数据流保存成本地文件、将视频数据显示在屏幕上等。过滤器组成滤器图表后,由过滤器图表控制器(FilterGraphManager)进行管理。过滤器图表控制器主要包括以下的功能:1.协调Filter对象之间的状态改变。过滤器具有两个状态:运行与停止。当一个过滤器运行时,它就处理媒体流数据;停止时,过滤器就不处理数据。应用程序并不将状态改变的命令直接发给Filter,而是将相应的状态改变命令发送给FilterGraphManager,由Manager将命令发给Graph中对应的Filter,从而使得Graph中所有的Filter的状态保持一致性。2.建立一个参考时钟。媒体处理过程通过MSTicker进行调度,它以线程的 第二章相关技术11形式,每隔一定时间调度Graph中的所有过滤器进行数据处理。同时可以使用多个MSTicker,例如一个MSTicker调度音频过滤器,另一个调度视频过滤器。3.提供建立FilterGraph的方法,如:在Graph中添加Filter,连接Filter的方法,断开Filter连接的方法,并包括程序结束时FilterGraph上相关变量的撤销。但是FilterGraph没有提供如何将数据从一个Filter发送到另一个Filter的方法,这是由Filter内部通过Pin独立完成的。4.将Filter的处理消息反馈给应用程序。在过滤表控制器的管理下,系统各模块之间实现了统一的操作接口,简化了系统中流媒体开发的流程。虚拟教室系统采用Mediastreamer2框架中的不同类型的过滤器来实现视频采集模块、音频采集模块、音频发送/接收模块、视频发送/接收模块、音频播放模块等模块,其主要原因如下:1.Mediastreamer2是一个轻便的库,在x86上,包括全部的功能和扩展库时,它仅产生800个.ko文件。同时Mediastreamer2链是通过sys-Vmblk_t结构优化的,这使得架构或者重组媒体流时能有较少的消耗,避免过程时间的备份。2.Mediastreamer2不仅提供speex、G711、GSM、H264、H263等多种格式的编解码功能,同时提供多通道的音视频,发送或者接收RTP包等功能,这些现有的技术极大简化了虚拟教室系统中流媒体数据开发流程。3.Mediastreamer2使用方便,它对简单的视频流和音频流的API都进行了封装。如果需要在Mediastreamer2中添加新的功能,也只需直接对Filter进行相应的实现,不需要进行十分复杂的声明或是继承。2.2BEEP协议BEEP协议框架是MarballTRose设计并于2001年由互联网工作任务组[30](InternetEngineeringTaskForce,IETF)颁布的,标准化标号是RFC3080。BEEP协议框架包含BEEP核心协议和一系列的扩展协议。BEEP核心协议定义了BEEP对等节点之间同时进行相互独立的消息交换的基本通信规则;安全认证、加密、XML-RPC等都是在其扩展协议中定义。2.2.1BEEP协议原理BEEP协议是面向连接的,面向消息的、支持异步交互的应用层协议框架。[31]BEEP协议是一个对等协议,通信双方被称为BEEP对等节点。BEEP协议框架不对BEEP对等节点之间传输的数据类型进行描述,而是由具体的应用层协议配 12虚拟教室系统的设计与实现置文件(Profile)描述,Peer之间通过建立通道(Channel)完成消息传递,通道内的通信规则由Profile文件来确定。BEEP协议基本原理如图2.3所示。所有的数据传输都是在Channel中完成,每个Channel都会对应一个Profile,由Profile来定义Channel中数据交互的语法和语义,同时确定Channel在应用时的具体应用类型,例如传输安全、用户认证或者[32]是数据交互。图2.3BEEP协议的基本原理图在BEEP会话建立之初,BEEP对等节点之间会互相通知自己支持的Profile集合,然后在建立Channel时,发起者会提供期望用于建立此通道的可选Profile集合,如果侦听者无法支持其中任何一个Profile,就会拒绝建立Channel,否则就会选择一个Profile并在响应消息中指出。BEEP对等节点之间只需建立一个TCP连接,然后这个连接会被多路复用以创建多个独立的Channel。一次会话建立完成后,第一个通道,即Channel0,通常也会随之创建,Channel0支持BEEP管理配置文件,而配置文件是具体负责协商多个独立通道的通信规则,决定各个通道中数据的交互过程。因此基于BEEP协议框架开发应用层协议可以理解为对配置文件的定义。BEEP核心协议中定义了一个管理Profile实现Profile管理、一组SASLProfile实现用户身份验证、一个SSL/TLSProfile来保证应用层数[33]据的传输安全性,其他的用于数据交互的Profile是由用户自己定义的。按照BEEP核心协议的规则将配置文件加载到BEEP协议框架上就可以实现用户身份认证、数据的安全通信以及自定义的通信协议。在BEEP协议中,消息都是基于MIME(MultipurposeInternetMailExtensions)规则封装,因此消息可以是任意的类型。同时消息的大小也没有限制,而是由具体应用类型决定。因此BEEP在实现时,需要提供比消息小的通信单元,这个通信单元就是组成消息的帧。通常情况下,消息可以由以一帧发送出去,但是也有可能需要分成许多帧。消息帧中包含标识它所属的通道、消息头以及消息中的顺序,这样才可以在消息的接收方完成消息的重组。 第二章相关技术132.2.2BEEP协议特点根据上面的BEEP协议原理的分析,BEEP具有如下的应用范围:1.面向连接:使用BEEP传递数据的应用程序被期望连接、进行数据交换然后端口连接。这使通信具有有序、可靠和对拥塞敏感的特征。2.面向消息:使用BEEP传递数据的应用程序期望用自定义的结构化数据包通信。这意味着正在通信的应用程序是松散耦合的而且不需要详尽地了解彼此的接口。3.支持异步交互:与HTTP不同,BEEP不限于请求和响应的特定顺序。异步方式的对等通信,但它不排除常规的客户机/服务器通信。同时,BEEP协议框架提供多路异步请求、协商加密、消息分离、消息编码和错误报告等功能。因此利用BEEP协议框架开发新应用层协议具有如下优势:首先,避免了应用程序设计人员把过多的精力放在所设计的应用程序放在如何连接、如何验证、如何发送和接收消息、如何报告错误等问题上;其次,可以以根据需要灵活配置应用程序,并以Profile(配置文件)的形式加载BEEP框架之上的底层传输协议细节;第三,MIME标准组织消息使得它能够好地适合面向连接的协议请求;最后,多通道机制使得多元的、不同敏感级别的数据可以分类进行传输、分级进行保护,能够很好的解决安全和消息之间的矛盾。综上所述,BEEP协议框架避免了重复设计与实现通信的基本功能,因此本文客户端与服务器之间的通信协议是基于BEEP协议框架实现。目前比较流行的BEEP开源协议栈主要包括IBMBeepLite、VortexLibrary、beep4j、BEEPFp、BEEPy、[34]jsVortex、LuaVortex等。其中Vortex库是一个基于C语言实现的开源协议栈,能够在Windows和Linux下编译。Vortex协议栈不仅包括BEEP核心协议,还提[35][36]供XML-RPCoverBEEP以及XML-RPC协议编译器、TUUNEL协议、简单认[37]证与安全层协议SASL(SimpleAuthenticationandSecurity)、安全传输层协议[38]TLS(TransportLayerSecurity)等扩展子集,同时具有完整的开发文档与示例可供参考。Vortex库支持GNU/Linux、Windows、MacOS/X等多个操作系统,因此本文选择Vortex协议栈作为应用层协议的开发基础,完成通信模块的设计与实现。2.3ActiveX技术[39]ActiveX在广义上是指Microsoft的整个对象组件模型COM(ComponentObjectModel)架构,但是现在通常是表示基于标准COM接口来实现对象连接与接入的ActiveX控件。ActiveX控件是一直可重用的软件组件,ActiveX控件一旦 14虚拟教室系统的设计与实现完成开发,设计与开发人员就可以把它当作预装配件,用于开发不同的客户端程序。ActiveX控件的开发是跨语言的,可以由不同语言的开发工具开发,包括C++、VB和PowerBuilder,甚至是一些脚本语言如VBScript。ActiveX包括如下几类:1.自动化服务器:可由其他应用程序编程驱动的组件。自动化服务器至少包括一个或者多个供其他应用程序生成和连接的基于IDispatch的接口。自动化服务器可以包含也可以没有用户界面,这取决于服务器的特性和功能。2.自动化控制器:那些可以使用和操作自动化服务器的应用程序。3.控件:ActiveX控件等价于以前的OLE控件或者OCX。一个典型的控件包括设计时和运行时的用户界面,唯一的IDispatch接口定义控件的方法和属性,唯一的IConnectionPoint接口定义控件可触发的事件。4.文档:ActiveX文档,等价于以前的DocObject,表示一种不仅仅是简单控件或自动化服务器的对象。ActiveX文档在结构上是对OLE链接和模型的扩展,并对其所在的容器具有更多控制权。一个最显著的变化是菜单的显示方式。一个典型的OLE文档的菜单会与容器菜单合并形成一个新的集合,而ActiveX文档将替换整个菜单系统,只表现出文档的特性而不是文档与容器共同的特性。5.容器:ActiveX容器是一个可以作为自动化服务器、控件和文档宿主的应用程序。本文在客户端程序的设计时,虚拟教室的电子白板模块和视频播放模块都是利用ActiveX技术完成软件组件的封装,主程序通过IDispatch接口访问ActiveX控件,实现了程序设计的模块化,增强了后续的可复用性以及可扩展性。2.4本章小节本章详细介绍了本系统中所用的主要技术,首先介绍了P2P技术与流媒体技术的概念,然后分析了MediaStreamer2流媒体开发框架,然后介绍了BEEP协议框架和Vortex开发库,最后介绍了ActiveX技术的原理与应用。 第三章虚拟教室系统的需求分析与总体设计15第三章虚拟教室系统的需求分析与总体设计本章首先将从用户的角度分析系统的功能需求和非功能需求,并在此基础上设计系统的网络拓扑结构,然后将分别对客户端程序和服务器端程序进行软件模块划分,最后会详细定义客户端与服务器之间的消息格式。3.1系统需求分析虚拟教室是在网络环境下建立的虚拟交互教学系统,通过模拟传统课堂的教学功能,为地域分散的教师和学生提供一个共享协作式的课堂学习环境,使其可以通过文字聊天、电子白板、语音交流、视频等多种交流方式完成远程交互式教学。本节主要从用户的角度分析了虚拟教室系统的功能性需求和非功能性需求,然后将虚拟教室系统划分为后台管理子系统和教学子系统,确立了本文的重点,即教学子系统的设计与实现。3.1.1系统的功能性需求虚拟教室系统的用户包括系统管理员、教师和学生。系统管理员主要进行虚拟教室系统的日常维护工作,包括用户信息管理、虚拟学校管理、课程资源管理、教学记录查询、系统消息发送等,如图3.1所示。教学记录查系统消息发新建用户询送«include»年级管理批量导入用户«include»«include»虚拟学校管用户管理理«include»管理员修改信息«include»虚拟教室管«include»课程资源管理理删除用户«include»«include»«include»上传课程资下载课程资删除课程资源源源图3.1系统管理员的用例图 16虚拟教室系统的设计与实现如图3.1所示,对于系统管理员,系统应该具有以下功能:1.用户管理。包括创建新的学生或者教师账号,设置新账号的用户名、密码和分组信息,同时系统需要支持批量地导入账号。系统管理员可以搜索账号,然后选择修改账号信息或者删除账号。2.虚拟学校管理。虚拟学校与传统学校类似,有相应的层次结构,即学校、年级、教室。因此虚拟教室系统必须具有学校日常事务的管理功能,主要包括创建年级、删除年级、设置年级信息,创建教室、删除教室、设置教室信息,其中教室信息主要包括课堂名称、课程简介、授课教师、课堂容量、上课时间等信息。3.课程资源管理。系统管理员可以上传、下载和删除包括课件、作业以及演示视频等课程资料。4.教学记录查询。系统管理员可以根据账号、起止时间等条件查询学生或者教师参与虚拟教学的历史记录。5.系统消息发送。设定消息类型和内容,向特定的用户发送系统消息。教师是远程教学任务的主导者,学生是虚拟教室系统的服务对象,虚拟教室系统需要为教师和学生提供登录认证、课程资源下载、用户状态管理等功能,同时提供文字聊天、电子白板、视频直播、语音聊天等多种交流方式。如图3.2所示。课程资源下音频采集和文字聊天电子白板登录认证载处理视频采集和处理«include»«include»停止/开始音频上传开始/停止«include»视频上传«include»多路音频混«include»视频直播语音聊天音用户«include»«include»开始/停止视频下载成员状态管停止/开始«include»理«include»音频下载视频播放«include»«include»«include»«include»«include»音频播放学生电子举教师设置学加入/离开教师设置教教师踢人手生状态虚拟教室室状态图3.2学生和教师的用例图如图3.2所示,对于学生和教师,系统的应该具有以下功能:1.登录认证。登录认证是指用户的登入、登出以及超时控制。2.课程资源下载。系统以列表的形式将课程资源提供给教师和学生,他们能够自由地选择下载这些资源。 第三章虚拟教室系统的需求分析与总体设计173.成员状态管理。成员状态管理是维护所有虚拟教室成员的状态,主要包括用户加入和退出虚拟教室、学生电子举手,教师设置发言人状态和教师踢人等子功能。在虚拟教室系统中,学生和教师可以同时加入一个或者多个虚拟教室。虚拟教室成员的状态是其文本聊天状态、视频直播状态、语音聊天状态和电子白板状态的组合,如果用户的某个功能处于开启状态,那么该用户就是此功能的数据源,即是该功能的发言者,否则就是旁听者。学生通过电子举手来请求发言,教师如果同意请求,则设置该学生为发言人,同时选择发言人的权限。4.语音聊天。虚拟教室需要支持多人同时发言,当虚拟教室的语音聊天功能启动后,教师自动拥有语音聊天功能的发言权,学生通过电子举手请求发言,教师可以设置其参与语音聊天的权限。语音聊天功能主要包括语音数据的采集、上传、混音、P2P方式的下载和播放。5.视频直播。在虚拟教室的视频直播功能启动后,该虚拟教室的所有用户都会观看到教师端的实时视频。视频直播功能主要包括视频采集、视频格式化编码、视频上传、视频P2P方式的下载以及视频显示。6.电子白板。电子白板是一个虚拟公用区域,教师和学生可以利用电子白板进行交流和讨论。电子白板支持的输入数据类型包括文字类和图形类,文本用于虚拟教室成员之间进行文字交流,图形包括直线、矩形、椭圆、自由画线等。电子白板的发言人可以自由地选择电子白板的工具,设置工具样式,在共享区域绘制图形或者发布文字。处于旁听状态的客户端会同步地显示电子白板的内容。7.文字聊天。文字聊天的方式包括私聊、群聊,私聊是指用户选择虚拟教室中特定的用户为聊天对象,向该用户发送文本消息,而群聊是指用户聊天的对象是当前虚拟教室中的所有用户。该功能包含文本的发送、文本的接收和显示。根据上面的需求分析,可以将虚拟教室系统划分为后台管理子系统和教学子系统。系统管理员使用后台管理子系统完成系统的日常管理工作,学生和老师使用教学子系统参与远程教学。本文涉及的主要内容是教学子系统的设计与实现。3.1.2系统的性能需求虚拟教室系统的性能需求主要从软件的用户体验、可扩展性、稳定性等方面来说明。具体要求如下:1.用户体验:虚拟教室系统必须为用户提供良好的使用体验,主要表现在较低的响应延迟、合理的系统开销和流畅的视频音频实时播放。2.可扩展性:系统在模块设计时,各个模块必须实现低耦合和高内聚,易于系统的测试以及升级。3.稳定性:作为商业应用,为满足用户的使用需求,要保证系统的稳定性和 18虚拟教室系统的设计与实现健壮性,系统必须建立一套异常恢复机制,在系统发生故障后,可迅速恢复,不丢失数据。4.性能和容量:系统需要同时支持大数量级用户的访问和使用。5.易操作性:系统具有友好的用户界面,用户使用方便、简单、易学。3.2系统总体结构设计3.2.1系统网络结构设计虚拟教室系统是一个完全基于网络的应用,用户通过客户端程序登录系统,获取系统提供的功能服务。根据系统的需求分析,如图3.3所示,虚拟教室系统是采取C/S结构与P2P结构混合的网络模型,主要包括客户端和服务器端两个部分。一般的控制类消息以及数据消息都是基于C/S网络结构在客户端与服务器之间直接传输的,而P2P覆盖网络主要是完成虚拟教室中音频数据和视频数据的传输。图3.3系统平台的网络架构图客户端是用户与系统交互的接口,以消息的方式向服务器发送用户的操作例如,登录请求消息、学生电子举手消息、设置学生状态消息、文本消息、电子白板消息等,同时接收并处理服务器的消息,例如:登录成功消息、文本消息、电子白板消息等,客户端还负责音视频的采集、上传、P2P方式的下载以及播放。服务器端从逻辑上由四个部分组成:后台服务器、Tracker服务器、资源服务器和数据库服务器。其中,后台服务器主要负责处理客户端的连接请求,接收用户的消息,分析消息内容,根据消息的类型,完成数据转发或者用户状态的控制, 第三章虚拟教室系统的需求分析与总体设计19同时向客户端发送相应的响应消息。另外,后台服务器需要接收客户端的流媒体数据,处理流媒体数据,同时作为P2P覆盖网络的数据源节点,参与流媒体数据的传输。数据库服务器的主要功能是存储用户个人信息、教室信息等数据,响应后台服务器的请求,完成数据的增加、删除、修改和查询等操作。Tracker服务器的主要作用是维护P2P覆盖网络中各个节点的状态信息,响应客户端的请求,完成P2P节点的加入,实现P2P节点的资源定位,处理P2P节点的离开。资源服务器主要存储课程资源,包括课件、作业以及演示视频等。3.2.2系统模块划分根据虚拟教室系统的需求分析和系统拓扑结构的设计,本着降低程序各个构成部分的耦合性,方便程序调试、维护和扩展的目的,下面分别对客户端端和服务器端进行模块划分。1.客户端的模块划分如图3.4所示,客户端主要包括通信模块、登录认证模块、业务管理模块、虚拟教室模块、流媒体模块和P2P传输模块。图3.4客户端的功能模块图下面分别对客户端的各个功能模块进行详细的分析:1)通信模块。通信模块是客户端程序的数据传输接口,主要负责将客户端的数据或者控制命令封装成特定格式的消息发送给服务器,同时接收来自服务器的消息。其他模块可以通过调用通信模块的接口完成与服务器的交互。2)登录认证模块。登录认证模块主要是用户登录系统、退出系统和超时控制。 20虚拟教室系统的设计与实现3)业务管理模块。业务管理模块是客户端子系统的中心控制器,主要功能是:(1)获取教室列表,实现学生自由的加入教室和退出教室的功能;(2)获取课程资源列表,学生可用选择下载感兴趣的资料;(3)监听P2P传输模块,当P2P传输模块完成某个流媒体数据块的下载后,业务管理模块会转发该数据块,如果是音频数据块,则发送给流媒体模块,在完成多路混音后播放,如果是视频数据块则转发给虚拟教室模块,在对应的虚拟教室对象中完成视频播放;(4)监听通信模块,当通信模块接收到服务器的数据包时,业务管理模块解析数据包,根据数据包中虚拟教室编号字段,将数据包转发给虚拟教室模块中对应的虚拟教室对象中,然后虚拟教室对象会解析数据包,根据消息类型,调用相关处理模块的接口。4)虚拟教室模块。虚拟教室模块主要包括虚拟教室状态的管理功能和文本聊天功能、电子白板功能、视频播放功能。其中,虚拟教室状态的管理功能主要是完成虚拟教室状态以及虚拟教室中所有在线成员状态的维护与更新。5)流媒体处理模块。流媒体处理模块主要负责客户端的音频采集、编码、上传、混音和播放,视频的采集、编码和上传。虚拟教室系统支持用户同时登入一个或者多个教室,因此客户端下载的音频数据和视频数据可能会来自不同的教室,对于音频数据,需要完成多路音频的混合,然后再播放,对于视频数据,则需要在对应虚拟教室中的视频播放区域显示。6)P2P传输模块。P2P传输模块主要是虚拟教室中流媒体数据的P2P方式下载功能,主要包括添加下载任务、关闭下载任务、启动下载任务、暂停下载任务。2.服务器端的模块划分如图3.5所示,服务器端主要包括通信模块、在线用户管理模块、虚拟教室管理模块、数据库访问模块、流媒体模块、P2P传输模块。服务器子系统在虚数线拟据P2P通用教库传信户室访输模管管块理理问模模模模块块块块图3.5服务器端的功能模块图 第三章虚拟教室系统的需求分析与总体设计21下面分别对服务器端的各个功能模块进行详细的分析:1)通信模块。通信模块的主要功能是响应客户端的连接请求、验证用户的个人信息、接收客户端的消息和向客户端发送消息。虚拟教室系统中客户端之间的控制消息、电子白板消息、文本消息都是通过服务器完成转发的。2)在线用户管理模块。一个在线用户对象代表一个登录用户的客户端,在线用户管理模块主要负责在虚拟教室系统中添加在线用户对象,删除在线用户对象,维护在线用户对象所在的虚拟教室对象列表,向某个在线用户对象发送消息,接收客户端的音视频数据,建立或者拆除在线用户对象的音视频接收部分与虚拟教室对象的音视频处理部分之间的连接。3)虚拟教室管理模块。一个虚拟教室对象代表一个已经有用户加入的虚拟教室,虚拟教室管理模块主要的功能包括:在虚拟教室系统中添加虚拟教室对象;删除虚拟教室对象;维护虚拟教室对象的在线用户对象列表;向虚拟教室对象中的在线用户广播消息;通过与在线用户对象之间的连接接收该在线用户对象的音视频数据,虚拟教室支持多人同时参与音频聊天,因此如果是音频数据则先将虚拟教室中多个发言人对象的音频数据进行混音后,再将虚拟教室的音频数据通过P2P传输模块下发到该虚拟教室中所有在线用对象户对应的客户端,如果是视频数据,则直接通过P2P传输模块完成数据下发。4)数据库访问模块。通过封装访问数据服务器的过程,为其他模块提供访问数据库服务器的调用接口。5)P2P传输模块。P2P传输模块主要是完成虚拟教室中流媒体数据的P2P方式的下发。主要包括添加下载任务、关闭下载任务、启动下载任务、暂停下载任务。3.3消息格式定义本章3.2节已经对虚拟教室系统的总体结构进行了分析,整个系统的客户端与服务器之间是通过互相发送消息来完成信息交换、传递命令,以实现虚拟教室中各个客户端的数据传输以及状态同步。根据虚拟教室系统的功能性需求,消息分为四类:包括电子白板消息、文本消息、控制消息、事件消息。为了统一系统中的消息格式,本小节将设计一套消息格式在虚拟教室系统中使用。根据2.2节的分析,本文是采用BEEP协议作为消息的网络发送协议。消息在发送之前,需要经过适当的封装,系统中的消息首先经过BEEP协议封装,然后打包成TCP数据段,最后组装成IP协议报文来发送。BEEP协议是采用Vortex开源协议栈,同时TCP协议以及IP协议都是操作系统的协议栈,因此BEEP协议、IP协议和TCP协议在这里都不会详细讨论。本小节重点讨论系统自定义消息的格 22虚拟教室系统的设计与实现式。图3.6给出的是系统自定义消息的格式。图3.6系统消息的格式从图3.6中可以看出,系统中所有消息都具有一个统一的消息头。其中各个字段的含义如下:消息类型:占1个字节。表示消息是电子白板消息、文本消息、控制消息、事件消息。其中字符B表示电子白板消息;字符T表示文本消息;字符C表示控制消息;字符E表示事件消息。教室ID:占4个字节。系统中的各类消息都是在虚拟教室中成员之间传输的,教室ID表示该虚拟教室在服务器端虚拟教室列表中的索引号,是一个整数。源ID:占32个字节。表示消息的源端,可以是用户ID或者”SYSTEM”。其中”SYSTEM”表示系统消息。目的ID:占32个字节。表示消息的目的端,可以是用户ID或者”ALL”。其中”ALL”表示虚拟教室的广播消息。时间戳:占20个字节。表示消息的服务器时间,其格式是”YYYY-MM-DDHH:MM:SS”。操作类型:占2个字节。表示控制消息或者事件消息的具体类型。消息体数据:包含详细的控制消息或者数据。表3.1中是虚拟教室系统中常用的消息含义。表3.1消息定义消息定义类型值含义MSG_TEXT_CHATNULL文本聊天数据MSG_WHITEBOARDNULL电子白板数据CMD_START_CLASS0x0001教师客户端向服务器发送的上课消息CMD_STOP_CLASS0x0002教师客户端向服务器发送的下课消息 第三章虚拟教室系统的需求分析与总体设计23续表3.1消息定义CMD_START_AUDIO0x0003教师客户端向服务器发送的开启教室语音功能消息CMD_STOP_AUDIO0x0004教师客户端向服务器发送的关闭教室语音功能消息CMD_START_VIDEO0x0005教师客户端向服务器发送的开启教室视频功能消息CMD_STOP_VIDEO0x0006教师客户端向服务器发送的关闭教室视频功能消息CMD_HANDUP0x0007学生客户端向服务器发送的电子举手消息CMD_HANDDOWN0x0008学生客户端向服务器发送的取消电子举手消息CMD_MICRO_ENABLE0x0009教师客户端向服务器发送的设置学生语音聊天消息CMD_MICRO_DISABLE0x000A教师客户端向服务器发送的取消学生语音聊天消息CMD_BOARD_ENABLE0x000B教师客户端向服务器发送的设置学生白板权限消息CMD_BOARD_DISABLE0x000C教师客户端向服务器发送的取消学生白板权限消息CMD_BOARD_CREATE0x000D电子白板发言人向服务器发送的创建电子白板消息CMD_BOARD_CLOSE0x000E电子白板发言人向服务器发送的关闭电子白板消息CMD_BOARD_SWITCH0x0010电子白板发言人向服务器发送的切换电子白板消息CMD_AUDIO_ON0x0011语音发言人向服务器发送开始音频传输的消息CMD_AUDIO_OFF0x0012语音发言人向服务器发送停止音频传输的消息CMD_VIDEO_ON0x0013视频发言人向服务器发送开始视频传输的消息CMD_VIDEO_OFF0x0014视频发言人向服务器发送停止视频传输的消息EVENT_USER_JOIN0x0015服务器向虚拟教室所有客户端广播新成员加入消息EVENT_USER_LEAVE0x0016服务器向虚拟教室所有客户端广播成员离开消息EVENT_USER_NOTEXIST0x0017服务器向客户端发送文本消息接收方不存在的消息EVENT_USER_STATUS0x0018服务器向虚拟教室的所有客户端广播教室成员状态EVENT_BOARD_STATUS0x0019服务器向虚拟教室的所有客户端广播电子白板状态EVENT_CLASS_STATUS0x0020服务器向虚拟教室的所有客户端广播教室状态EVENT_AUDIO_SESSION0x0021服务器向语音发言人发送会话信息,主要是端口号EVENT_VIDEO_SESSION0x0022服务器向视频发言人发送会话信息,主要是端口号………………在这四类消息中,命令控制消息的结构最简单,它在消息体字段通常都是为空,只需要操作类型字段就可以表示消息的含义。只有创建电子白板消息、删除电子白板消息以及切换电子白板消息的消息体字段中需要附带电子白板的编号。事件消息则需要消息体字段保存必要的信息。以EVENT_USER_STATUS、EVENT_AUDIO_SESSION消息为例说明此类消息的情况。图3.7是EVENT_USER_STATUS消息,该消息是当用户的状态改变时,服务器在当前虚拟教室中广播该用户的新状态,实现虚拟教室多个客户端之间用户状 24虚拟教室系统的设计与实现态的同步。因此除了统一的消息头之外,在消息体里需要附带用户信息:用户ID、用户类型、用户状态。图3.7用户状态更新消息的格式图3.8显示的是EVENT_AUDIO_SESSION消息,该消息是当教师设置学生的语音聊天权限后,即教师客户端向服务器发送CMD_MICRO_ENABLE消息后,服务器检测服务器端的学生语音接收模块未初始化后,会创建语音接收模块,分配端口号,然后向学生的客户端发送EVENT_AUDIO_SESSION消息,返回端口信息,通知客户端可以开始发送语音数据。其中ServerPort占4字节的字符串。图3.8音频会话消息的格式图3.9显示的是MSG_TEXT_CHAT文本聊天消息,除了文本内容,还包括文字大小、字体类型、字体颜色信息。文本内容是变长的。其中FontSize是整型值,表示字体的大小。FontFormat是CHARFORMAT2类型,表示字体的风格。FontColor是COLORREF类型值,表示字体的颜色。TextContent表示文本的内容。图3.9文本消息的格式 第三章虚拟教室系统的需求分析与总体设计25电子白板模块提供文本框工具,画笔、画刷和橡皮擦工具,直线、矩形、椭圆、圆角矩形固定图形的绘图工具,这里将给这些白板工具定义各自的消息格式。电子白板消息可以分为文本框消息以及绘图消息,它们具有相同的电子白板消息头,各自不同的消息体,下面分别给出其消息格式。图3.10文本框消息的格式如图3.10所示,其中电子白板消息头字段含义如下:MsgType字段,占1个字节,表示消息类型,字符T表示文本框消息,字符G表示绘图消息。MsgLength字段,占4个字节,表示白板消息的长度,不包括消息头。MsgIndex字段,占4个字节,表示电子白板消息的编号。其中文本框消息的消息体字段含义:StartPoint字段:占16个字节。表示文本框起点的坐标。文本框是矩形,起点是矩形左上角的点,终点是矩形右下角的点。EndPoint字段:占16个字节。表示文本框终点的坐标。FontTyple字段:一个LOGFONT类型值,表示字体的类型。FontColor字段:一个COLORREF类型值,表示字体的颜色。TextContent字段:表示文本框中的文本内容,是变长的字符串。绘图消息结构BClassIDSYSTEMALLTimeStampNULL消息体数据MsgTypeMsgLengthMsgIndex绘图消息体ToolIndexToolStyleStartPointColorBeforeColorBack消息内容图3.11绘图消息的格式 26虚拟教室系统的设计与实现如图3.11所示,其中绘图消息的消息体字段定义如下:ToolIndex字段:占4个字节。表示绘图工具的索引编号,定义成枚举类型,ToolStyle字段:占4个字节。表示绘图工具的风格,定义成枚举类型。如果绘图工具是画笔、画刷或者橡皮,则表示这些工具的形状;如果是直线,则表示线条的宽度;如果是矩形、椭圆或者圆角矩形,则表示图形的风格,显示边框、显示填充色和显示全部图形。StartPoint字段:占16个字节。表示图形的起始点。ColorBefore字段:一个COLORREF类型值。表示图形的前景色。ColorBack字段:一个COLORREF类型值。表示图形的后景色。消息内容字段:可变字段,记录绘制图形的轨迹信息。如果是绘图工具是画笔、画刷、直线、或者橡皮,这些是自由绘制的图形,则是图形的坐标数组。如果是矩形、椭圆或者圆角矩形,这些是固定形状的图形,则是图形终点坐标。3.4本章小结本章首先对虚拟教室系统中的用户行为进行了分析,然后给出了系统的功能性和非功能性需求,确定了开发目标和边界。接着按照系统的需求设计出系统的整体网络架构,将系统划分为服务器子系统和客户端子系统,然后分别对客户端子系统和服务器子系统进行了模块划分和功能定义。最后本章给出了客户端与服务器之间通信的消息格式。 第四章客户端的详细设计与实现27第四章客户端的详细设计与实现本章主要完成客户端的详细设计与实现,根据第三章的分析,客户端子系统主要包括通信模块、登录认证模块、业务管理模块、虚拟教室模块、流媒体处理模块、P2P传输模块。本章将会介绍各个模块的具体实现。4.1登录认证模块4.1.1登录认证模块的逻辑设计客户端的登录认证模块主要由ClientApp主程序类、LoginWnd登录界面类、ConfigManager配置管理类、NetworkManager通信管理类组成。其类图如图4.1所示。图4.1登录认证模块的类图ClientApp类:应用程序类,代表整个客户端程序。主要通过调用ConfigManager类读写默认的配置信息,根据服务器的IP地址和端口号创建NetworkManager类,设置LoginWnd类登录窗口默认的用户名和密码。ConfigManager类:配置管理类。主要提供对配置文件的读写操作,配置文件 28虚拟教室系统的设计与实现主要存储用户帐户信息和服务器地址信息。LoginWnd类:登录窗口类。主要通过调用NetworkManager类发送用户登录验证信息,并接收返回结果。NetworkManager类:通信管理类。NetworkManager类是基于Vortex库设计与[40]实现的,由多个模块共享,通过Loki库实现单例模式。NetworkManager类提供登录/退出系统的调用函数DoLogin()和DoLogout()、电子白板消息的发送函数SendBoardMsg()、文本聊天消息的发送函数SendChatMsg()以及控制消息的发送函数SendControlMsg()。NetworkManager类同时提供获取虚拟学校信息的RPC方法GetVSchoolInfo()、获取课程资源列表的RPC方法GetResourceMenu()、获取课程资源信息的RPC方法GetResourceData()。当客户端接收到服务器程序的数据时,会回调OnMessageRev函数,完成该消息的处理。4.1.2登录认证模块的流程设计登录认证模块的工作流程是启动登录界面,用户在登录界面输入个人信息,向服务器发送用户的个人信息,服务器对用户的身份进行验证,正确后方可跳转到客户端的主界面。其序列图如图4.2所示。图4.2登录认证的序列图 第四章客户端的详细设计与实现29首先,客户端主程序会读取系统配置文件获取服务器IP地址、端口号、上次成功登录的用户名和密码,然后创建和初始化NetworkManager网络管理类对象。然后,客户端主程序会创建LoginWnd登录界面对象。LoginWnd对象会判断上次用户登录的用户名和密码是否存在:若存在,则根据系统配置文件中的记录信息将用户名和密码输入框的内容初始化为上次成功登录的用户信息;若不存在,则将用户名和密码输入框的内容置空,等待用户输入相关信息。在用户选择登录功能后,LoginWnd对象立即创建登录线程,向NetworkManager对象发起登录请求消息。最后,当NetworkManager对象接收到登录请求消息后,首先建立客户端与服务器之间VortexConnection连接,然后设置该连接上的验证信息,向服务器发起个人信息的认证请求。在完成用户认证后,NetworkManager对象与服务器协商Vortex通道的配置文件,如果服务器支持这种配置文件,则创建VortexChannel通道对象,同时创建VortexChannelPool通道池对象,然后向LoginWnd对象发送登录完成消息,LoginWnd对象会关闭登录线程,同时创建MainWnd对象,客户端跳转到客户端的主界面。4.2业务管理模块业务管理模块是客户端子系统的控制中心,主要功能是实现教师和学生自由地加入或者退出虚拟教室,下载需要的课程资源,同时负责监听通信模块和P2P传输模块的事件消息,解析消息内容,向流媒体处理模块或者虚拟教室模块转发流媒体数据和服务器消息。4.2.1业务管理模块的逻辑设计业务管理模块的关键功能是负责监听通信模块和P2P传输模块的事件消息。当获取通信模块的消息后,在消息处理函数中完成消息的解析、转发和处理;对于P2P传输模块的事件消息,由于流媒体数据对实时性要求较高,如果在P2P传输模块的事件处理函数将流媒体数据直接转发给其他模块的任务,可能会导致大量流媒体数据因为过时而失效,因此本文在P2P传输模块的事件处理函数只是将接收的数据缓存在队列中,然后由专门的流媒体数据处理线程完成转发。根据上面的分析,业务管理模块的类图如图4.3所示。 30虚拟教室系统的设计与实现MainWnd-roomMap-roomAudioHashIDMapNetworkManager-roomVideoHashIDMapMessageHelper-m_mediaThread+Initialize()+HandleP2PMediaMsg()+getVSchoolInfo()+HandleNetworkMsg()+PackMessage()+RefreshVSchoolInfo()+getMenubyId()+Parsemessage()+JoinClassroom()+getResourceMenu()+getResourceData()+RemoveClassroom()+onMessageRecv()+LoadTreeMenu()+LoadResourceMenu()+LoadResourceData()11MediaProcessThreadEventCallbackModule-m_media_queue:MSQueue-callBackMethods:PyMethodDef**+startProcessMedia()+InitilizeCallbackModule()+stopMediaPiece()+p2p_piece_downloaded_event_callback()+InitQueue()+InsertMediaPiece()-ProcessMedia()图4.3业务管理模块的类图如图4.3所示,业务管理模块共有五个主要的功能类:MainWnd类:主窗口类。MainWnd主要完成的工作是:(1)通过XML-RPC调用,获取当前虚拟学校的教室列表,学生和教师都可以自由地选择加入或者退出网络课堂;(2)通过XML-RPC调用,获取系统中课程资源的列表,学生和教师都可以选择下载其感兴趣的资料;(3)监听P2P传输模块,调用MediaProcessThread流媒体处理线程类的InsertMediaPiece()方法,将下载的流媒体数据块添加到m_media_queue队列中;(4)监听通信模块,解析服务器消息,获取服务器消息的教室ID字段,调用此教室的消息处理函数。MediaProcessThread类:流媒体处理线程类。主要实现了流媒体数据包的转发,解析P2P事件消息,获取教室ID,如果P2P数据是音频则转发给流媒体处理模块,如果是视频数据则转发给虚拟教室对象。NetworkManager类:通信管理类。负责接收服务器消息,同时为其他模块提供向服务器发送消息的调用接口。MessageHelper类:消息处理类。主要是完成消息的封装和解析。EventCallbackModule类:该类主要提供C++层的P2P数据分片下载完成事件的回调函数。关于P2P传输模块的设计与实现在4.5节中详细描述。 第四章客户端的详细设计与实现314.2.2业务管理模块的流程设计当用户登录系统后,客户端程序跳转到主界面,自动向服务器发送查询虚拟学校消息请求,服务器返回当前虚拟学校的信息,然后学生和教师都选择自己感兴趣的虚拟教室,如果是虚拟教室的合法成员,则服务器会执行添加在线用户的调用,返回结果,完成登入虚拟教室的流程,其序列图如图4.4所示。图4.4用户加入虚拟教室的序列图首先MainWnd通过NetworkManager向服务器发送查询虚拟学校信息的XML-RPC请求。服务器执行查询过程,返回虚拟学校的信息给NetworkManager,再由NetworkManager转发给MainWnd主界面,主界面会刷新虚拟教室的列表。然后,学生或者老师在虚拟教室列表中,选择自己感兴趣的虚拟教室,通过NetworkManager向服务器发送加入虚拟教室的XML-RPC请求。当服务器接收到RPC请求后,验证当前用户的有效性。如果用户是当前虚拟教室的成员,则允许用户进入教室,同时将虚拟教室的状态信息返回给NetworkManager;否则拒绝请求,然返回拒绝消息。NetworkManager转发结果信息给MainWnd主界面,MainWnd创建虚拟教室窗口对象,完成虚拟教室窗口对象的初始化,包括新建音频和视频的P2P下载任务,初始化虚拟教室的成员列表、电子白板控件和视频播放控件等。4.3虚拟教室模块虚拟教室模块主要包括虚拟教室状态的管理功能,文本聊天功能,电子白板功能和视频播放功能。本节主要完成虚拟教室模块各个子模块的逻辑设计,然后 32虚拟教室系统的设计与实现给出关键的流程设计。4.3.1虚拟教室模块的逻辑设计虚拟教室状态的管理功能主要是虚拟教室的状态以及所有虚拟教室成员的状态维护与更新。虚拟教室的状态主要包括课前准备状态、上课状态和下课状态,当处于上课状态时,教师可以启动或者关闭视频直播功能和语音交流功能。在线用户的状态,包括文本聊天状态、视频直播状态、语音聊天状态和电子白板状态,学生通过电子举手请求发言,教师可以设置学生为发言人,同时设置发言人状态。电子白板功能主要包括文本输入和图形绘制,将发言人的绘图动作封装成白板消息,调用通信模块完成白板消息的发送和接收,电子白板内容的显示和更新。电子白板的设计思路是通过ActiveX控件封装电子白板的主体功能,通过IDispatch接口类,实现控件的数据写入接口和电子白板绘画事件的回调函数。文本聊天的方式包括私聊、群聊,文本聊天的功能主要包括文字接收、文字发送和文字显示。视频播放功能主要是完成虚拟教室中视频流的实时显示。根据上面的分析,虚拟教室模块的类图如图4.5所示。图4.5虚拟教室模块的类图如图4.5所示,虚拟教室模块共有八个主要的功能类: 第四章客户端的详细设计与实现33VirtualClassroomWnd类:虚拟教室窗口类。该类是虚拟教室模块的主体类,主要保存登录用户的状态信息,虚拟教室的状态信息,包含电子白板、视频播放、文本聊天、媒体控制等功能类的实例。同时负责处理MainWnd类分发的消息,调用不同的功能类实体处理。UserOperation类:用户操作类。主要包括学生的电子举手操作和停止电子举手操作,教师的设置虚拟教室状态操作和设置学生状态操作。UserList类:在线用户列表类。该类负责维护虚拟教室的在线用户列表,提供添加用户、删除用户、更新用户状态和刷新用户列表等操作。BTDownloadManagerWrapper类:位于C++层的BT下载任务管理类,包含位于Python层的BT下载任务管理类接口的封装,提供新建BT下载任务、删除BT下载任务、启动BT下载任务、暂停BT下载任务等功能。关于P2P传输模块的设计与实现在4.5节中详细描述。BoardCtrlWrapper类:电子白板控件类。该类保存了电子白板的ActiveX控件和访问ActiveX控件的接口,提供设置电子白板控件读写权限的方法SetHost()、外部对象向电子白板控件中写数据的调用函数DataIn()、电子白板绘图事件的处理函数OnEventInvoke()。VCRMediaControl类:虚拟教室媒体控制类。主要包括设置或者取消登录用户成为当前虚拟教室语音聊天的数据源、设置或者取消登录用户成为当前虚拟教室视频直播的数据源。VideoPlayer类:视频播放类。主要完成虚拟教室的视频播放功能。提供启动播放器控件、关闭播放器控件以及向播放器控件写入视频数据等接口函数。TextChat类:文本聊天类。主要完成虚拟教室的文本聊天功能,包括文本发送、文本显示以及聊天模式的设置。4.3.2虚拟教室模块的流程设计1.教室状态管理模块的相关流程1)控制消息的处理流程当用户加入虚拟教室、用户离开虚拟教室、用户状态更新时,服务器都会在虚拟教室中广播对应的控制消息,其他客户端在接收到广播消息后,都会解析消息,然后更新在线用户的列表。下面以新用户加入虚拟教室为例,用户离开虚拟教室与用户状态更新的消息处理流程类似。首先客户端的NetworkManager类会接收到新用户加入教室的消息,然后调用MainWnd主界面类的消息处理函数,MainWnd类会解析消息头,根据虚拟教室ID字段,调用VirtualClassroomWnd类的消息处理函数,VirtualClassroomWnd类会解 34虚拟教室系统的设计与实现析消息内容,识别消息的内容是新用户加入教室的消息,然后会在虚拟教室的UserList中添加新成员,同时刷新列表。其序列图如图4.6所示。图4.6处理新成员加入消息的序列图2)学生通过电子举手请求发言,教师设置发言权限的流程。在虚拟教室中,学生通过电子举手请求发言,首先由NetworkManager向服务器发送请求;然后服务器在虚拟教室中广播请求消息,所有虚拟教室的成员都会接收到此消息,同时更新用户状态列表;最后,教师可以选择设置请求发言的学生成为发言人,并设置发言人的权限。其中学生请求发言的序列图如图4.7所示。图4.7学生请求发言的序列图 第四章客户端的详细设计与实现35教师的客户端程序同时会获取服务器的广播消息,更新状态列表。教师可以设置学生的发言人状态,这里以设置学生语音聊天的发言权限为例,设置电子白板发言权与语音发言权类似。首先,教师端向服务器发送允许学生语音聊天的消息。当服务器接收到此消息后,会检查是否已经创建学生对象的语音接收模块:如果已经创建,则在学生对象的语音接收模块与虚拟教室对象的语音处理模块之间建立连接,然后在虚拟教室中广播允许学生语音聊天的消息;否则,服务器首先创建学生对象的语音接收模块,在学生对象的语音接收模块与教室对象的语音处理模块之间建立连接,然后向学生的客户端发送服务器语音接收模块的会话信息,同时在虚拟教室中广播允许学生语音聊天的消息。2.电子白板模块与文本聊天模块的相关流程电子白板模块的流程主要包括电子白板消息的发送、电子白板消息的接收与显示。文本聊天模块的流程主要包括文本消息的发送、文本消息的接收、文本消息的显示。下面以电子白板消息的处理流程为例,文本消息的处理流程类似,这里不再详细说明。1)电子白板消息的发送流程当电子白板的发言人完成某个绘图动作之后,会调用电子白板绘图事件的处理函数OnEventInvoke()。在OnEventInvoke()处理函数中,首先通过MessageHelper类将绘图的信息打包成电子白板的消息,然后调用NetworkManager类,向服务器发送电子白板消息。其序列图如图4.8所示。图4.8发送电子白板消息的序列图2)电子白板消息的接收流程首先NetworkManager类会接收到服务器发送的电子白板消息,调用MainWnd主界面类的消息处理函数,MainWnd类会解析消息头,根据虚拟教室ID字段,调用VirtualClassroomWnd类的消息处理函数,VirtualClassroomWnd类会解析消息内 36虚拟教室系统的设计与实现容,识别消息的内容是电子白板消息,然后调用白板控件类的写数据函数DataIn()。其序列图如图4.9所示。图4.9处理电子白板消息的序列图3.视频播放模块的相关流程当P2P传输模块下载完一个视频数据块时,位于Python层的BT传输层就会调用EventCallbackModule中的处理函数,该处理函数会调用MainWnd类的P2P数据处理函数HandleP2PMsg()方法,在P2P消息处理函数中,MainWnd会通过调用MediaProcessThread流媒体处理线程类的InsertMediaPiece()方法向数据缓冲区存入视频数据块,同时MediaProcessThread类会不断地处理数据缓冲区中的流媒体数据,根据视频数据流的哈希值查找其对应的虚拟教室对象,然后调用其VideoPlayer类中ActiveX视频控件的数据写入接口,最后由VideoPlayer类的视频控件完成视频帧的显示。其序列图如图4.10所示。图4.10视频直播过程的序列图 第四章客户端的详细设计与实现374.4流媒体处理模块流媒体处理模块主要功能包括音频的采集、编码、上传、混音和播放,视频的采集、编码和上传。流媒体模块的设计与实现是基于Mediastreamer2流媒体框架完成的,Mediastreamer2默认提供了多种类型的Filter,流媒体处理模块的各个子功能都可以由默认的MSFilter完成,因此流媒体模块的设计思路是:首先分析虚拟教室系统的流媒体处理流程,选择适合虚拟教室系统的MSFilter过滤器,设计过滤器表图;然后采用面向对象的思想,封装MSFilter状态的设置以及通过连接器建立或者拆除传输链的过程,提供相关的访问接口。4.4.1流媒体处理模块的结构设计本文的音频采用Speex压缩格式,视频采用H264压缩格式,Mediastreamer2对这两种格式都有良好的支持。下面分别给出音频采集部分、视频采集部分以及音频播放部分的结构设计。1.音频采集、编码与上传部分在虚拟教室系统中,在同一时刻,学生和教师可以选择进入多个教室。因此当登录用户在多个教室拥有语音的发言权时,音频采集模块捕抓的数据需要在多个虚拟教室中共享,为了实现数据共享,可以选择由客户端完成数据复制,然后向服务器的多个虚拟教室对象发送音频数据相同的拷贝,或者选择客户端向服务器只发送一份数据,而由服务器完成数据拷贝,考虑客户端的网络带宽和处理能力有限,因此本文采用后一种方案。视频的情景与音频相似。图4.11音频处理部分的结构图如图4.11所示,音频处理部分的Filter图表由四个Filter组成,第一个Filter没有输入,直接从驱动捕抓音频数据,并将数据输出到输出端口。这个数据被传送到Audio_Volume的输入端口,Audio_Volume主要是调节音量和过滤噪声,然后将数据发送到其传输端口。Audio_Encoder将音频数据编码成Speex压缩格式,发送到输出端口,Audio_RTP_SEND会将编码后的数据包封装成RTP包并发送出 38虚拟教室系统的设计与实现去。其中MSTicker对象负责完成流媒体工作的执行工作,系统中有个特定的进程,它每隔10ms被唤醒一次,对MSTicker管理的Filter链进行数据处理。2.视频采集、编码与上传部分与音频采集部分类似,视频数据的共享是在服务器实现的。下面给出视频发送部分的Filter图。图4.12视频处理部分的结构图如图4.12所示,视频发送部分的Filter由五个Filter组成,Video_Capture负责直接从驱动抓取视频数据,Video_PixConv完成像素格式的转换,Video_SizeConv完成图像大小的设置,Video_Encoder完成编码视频数据,Video_RTP_SEND将编码后的视频数据封装成RTP包发送出去。MSTicker对象负责驱动Filter链的数据处理。3.音频播放部分在虚拟教室系统中,学生和教师可以选择进入多个教室,因此同一时刻,客户端接收的音频数据可能是来自不同的教室,因此各个教室的音频RTP数据包需要首先缓存到其音频数据队列中,然后由音频RTP解包模块解析RTP包结构,还原Speex格式的音频数据,解码音频数据,最后将解码后的多路音频流的混音后,才可以播放。音频播放部分的整体流程图如图4.13所示。图4.13音频播放的整体流程图根据音频播放的流程分析,如图4.14所示,音频播放部分是由五类Filter组成的,其中Audio_RTP负责从当前教室的音频缓存队列中获取音频数据,然后输出到自己的传输端口。Audio_Decoder负责解码音频数据流。Audio_Mixer完成不同 第四章客户端的详细设计与实现39教室的音频流。Audio_Playback完成音频数据的播放。MSTicker过滤器Audio_RTPAudio_Decoder过滤器过滤器Audio_MixerAudio_Playback过滤器过滤器Audio_RTPAudio_Decoder过滤器过滤器图4.14音频播放的结构图4.4.2流媒体处理模块的实现根据上面的分析,流媒体处理模块的类图如图4.15所示。图4.15流媒体处理模块的类图 40虚拟教室系统的设计与实现MeidiaController类:流媒体控制类。该类保存了客户端音/视频采集模块与服务器音视/频接收模块连接的基本信息以及音频采集模块与视频采集模块的引用次数,包含音频采集类、视频采集类、音频播放功能类的实例。主要完成流媒体处理模块实现细节的封装。AudioCapture类:音频采集类。主要是从声卡驱动中捕抓音频帧,设置噪声过滤以及音量,编码成Speex格式,然后将音频帧封装成RTP包,发送至服务器的音频接收模块。VideoCapture类:视频采集类。主要是从显卡驱动中捕抓视频帧,设置视频帧的像素格式以及图片大小,编码成H264格式,然后将视频帧封装成RTP包,发送至服务器的视频接收模块。AudioPlayer类:音频播放类。主要完成多个虚拟教室音频数据的混音,然后通过将混音后的音频流同步播放。提供开始AudioChannel类:音频频道类。主要是接收并缓存音频RTP包,同时循环地解析虚拟教室的RTP音频包,解码音频数据,将解码后音频流至AudioPlayer类的负责混音的MSFilter。4.5P2P传输模块客户端的P2P传输模块由位于C++层的BT封装部分以及位于Python层的BT传输层部分组成。位于C++层的部分主要通过对Python层中BT下载任务管理类的封装提供新建BT下载任务、启动BT下载任务、删除BT下载任务、暂停BT下载任务等功能,在实现C++层调用Python层的方法时,由于Python的解释器是非线程安全的全局对象,因此在调用Python层的方法时,都是首先获取Python解释器的互斥锁,然后调用Python层的方法,在执行完函数调用后,释放Python解释器的互斥锁以便其他线程可以获取Python解释器。同时位于C++层的部分通过定义C++层的P2P数据分片下载完成事件的处理函数,由Python层的相关事件处理函数调用,实现P2P数据在C++层的高效处理。位于Python层的部分主要是通过封装BitTorrent协议栈的相关对象,实现BT下载任务管理类以及BT下载任务类。位于Python层的部分是基于Python语言实现的,虽然Python语言是一种解释性语言,但是Python是一种完全面向对象的语言,因此P2P传输模块的设计与实现完全以面向对象的方式完成。根据以上分析,如图4.16所示,P2P传输模块主要由四个主要的类组成。 第四章客户端的详细设计与实现41图4.16P2P传输模块的部分类图BTDownloadManagerWrapper类:位于C++层的BT下载任务管理类,包含位于Python层的BT下载任务管理类接口的封装,提供新建BT下载任务、删除BT下载任务、启动BT下载任务、暂停BT下载任务等功能。EventCallbackModule类:该类主要提供C++层的处理P2P数据下载完成事件的回调函数,一旦位于Python层的BT传输层下载完P2P数据分片时,就会立即调用p2p_piece_downloader_event_callback()方法处理P2P数据,然后通过业务管理模块的MainWnd类的HandleP2PMsg()方法处理P2P数据。BTDownloadManager类:位于Python层的BT下载任务管理类,通过封装Session对象实现,主要作用是维护BT下载任务的列表。提供新建BT下载任务、启动BT下载任务、暂停BT下载任务以及删除BT下载任务的方法。DownloadTask类:位于Python层的BT下载任务类,通过封装Download对象实现,该类提供新建暂停BT下载任务、设置启动时的配置信息、设置BT下载任务的工作模式以及设置BT下载任务的事件处理函数等功能。4.6本章小节本章主要是在系统总体分析的基础上,完成了客户端子系统的详细设计与实现,首先对登录认证模块、业务管理模块、虚拟教室模块的逻辑设计和流程设计分别进行了详细的说明,然后设计了基于Mediastreamer2开发框架实现的流媒体处理模块,最后描述了P2P传输模块的设计与实现。 42虚拟教室系统的设计与实现 第五章服务器端的详细设计与实现43第五章服务器端的详细设计与实现本章将详细介绍服务器端的设计与实现,根据第三章的分析,服务器子系统主要包括通信模块、在线用户管理模块、虚拟教室管理模块、P2P传输模块、数据访问层模块。本章将会介绍各个模块的具体实现。5.1通信模块的设计与实现通信模块主要功能是处理客户端的连接请求、完成身份验证、响应客户端的状态控制命令和转发客户端消息。为了实现TCP连接请求处理的并发性和实时性,虚拟教室系统服务器程序的通信模块是基于Vortex库设计,Vortex库是一个BEEP协议基于TCP协议的实现与扩展。由于BEEP协议中节点之间传递的数据单元是帧,避免应用程序自己去解析字节流的过程,简化设计与开发流程。同时在处理用户登录验证时,充分利用Vortex库的SASL模块完成身份认证,简化认证的调用流程。客户端请求资源时,利用Vortex库的XML-RPC模块,使得客户端获取资源时,如同调用本地的API函数,简化应用层的调用流程,由于服务器的开始过程中,使用了成熟的Vortex开源库,客观上增强了系统的可维护性和健壮性。根据通信模块的分析,服务器端通信模块的类图如图5.1所示。图5.1通信模块的类图 44虚拟教室系统的设计与实现如图5.1所示,通信模块共有4个主要的功能类:NetworkServer类:通信模块的主体类。主要完成后台服务器的建立、客户端VortexConnection连接请求的响应、客户端消息的接收、VortexConnection连接断开的处理等。该类在初始化时,主要完成创建与初始化Vortex库的运行上下文,设置服务器的XML-RPC模块,初始化SASL模块,设置SASL模块的验证处理函数intOnSASLValidation(),创建VortexListener监听对象。该类提供启动与关闭监听对象的方法voidServerStart()、voidServerShutdown()。当服务器接收到客户端消息时,调用voidOnFrameReceived()函数处理客户端消息。XMLRPCServer类:XML-RPC服务类。主要响应客户端程序的XML-RPC请求,解析RPC请求消息,调用XMLRPCServiceDispatch中的RPC方法,在执行完RPC调用后,封装RPC返回消息,然后发送给客户端程序。XMLRPCServiceDispatch类:XML-RPC服务分发类。该类直接调用获取虚拟学校信息、获取资源菜单、获取资源信息和加入虚拟教室的RPC方法。DBHandler类:数据库访问类。主要通过封装访问数据服务器的过程,为其他模块提供访问数据库服务器的调用接口。5.2在线用户管理模块在线用户管理模块主要是维护虚拟教室系统的所有登录用户的状态,包括在线用户列表的维护和在线用户流媒体的处理。本节主要完成在线用户管理模块的逻辑设计,并给出关键流程的设计。5.2.1在线用户管理模块的逻辑设计在虚拟教室系统中,一个在线用户对象代表一个登录用户的客户端,在线用户管理模块的主要功能是在线用户列表的维护和在线用户流媒体的处理。1.在线用户列表的维护在同一时刻,虚拟教室系统存在多个在线用户,系统的每个用户可以自由选择进入一个或者多个虚拟教室,因此服务器需要保存和更新当前所有在线用户的个人信息以及他们加入虚拟教室的情况。在线用户管理模块的设计时,采用STLmap的数据结构维护系统中所有在线用户的指针,通过该数据结构可以添加、删除和查找系统中所有的在线用户对象。在线用户对象主要是保存与更新在线用户的个人信息、在线用户所加入的虚拟教室对象的指针。2.在线用户流媒体的处理当在线用户是一个或者多个教室的音频或者视频的发言人时,在线用户对象 第五章服务器端的详细设计与实现45需要能够接收客户端程序的音频流与视频流,同时维护在线用户对象的媒体流与虚拟教室的流媒体流之间的连接关系。因此,服务器程序必须保存在线用户的下列信息:在线用户的ID、在线用户的类型、客户端与服务器之间的VortexConnection连接对象、在线用户与服务器之间的VortexChannel通道对象、在线用户所在的教室集合、在线用户的音频处理模块、在线用户的视频处理模块、在线用户音频处理模块的连接情况、在线用户视频模块的连接情况。根据上面的分析,下面给出在线用户管理模块的类图:图5.2在线用户管理模块的类图 46虚拟教室系统的设计与实现如图5.2所示,在线用户管理模块共有五个主要的功能类:UserManager类:在线用户管理类,管理当前所有在线用户对象。该类保存了所有在线用户对象的列表以及访问在线对象列表的互斥变量。负责对外提供接口,调用其余类的函数完成相关功能。OnlineUser类:在线用户类,代表客户端的某个在线用户。该类主要保存了该用户的客户端与服务器Vortex连接的基本信息,该用户所加入的虚拟教室的集合,包含在线用户音频处理、在线用户视频处理等主要功能类的实例。为UserManager的调用提供处理函数,主要包括向在某个在线用户发送消息、建立或者取消在线用户音频处理模块与虚拟教室音频处理模块的连接、建立或者取消在线用户视频处理模块与虚拟教室视频处理模块的连接等。UserAudioHandler类:在线用户音频处理类,实现在线用户对象的音频流处理,主要包括音频流的接收,音频流的解码、音频流的输出和音频流输出对象的控制。UserVideoHandler类:在线用户视频处理类,实现在线用户对象的视频流处理,主要包括视频流的接收,视频流的解码、视频流的输出和视频流输出对象的控制。MediaChannel类:媒体通道类。该类记录了在线用户对象的音频处理部分或者视频处理部分与虚拟教室对象流媒体处理部分的连接情况。5.2.2在线用户管理模块的流程设计当服务器程序启动后,首先由NetworkServer响应客户端连接请求,包括登录认证模块的SASL消息,控制消息的识别、执行和转发,数据类消息的转发。其中数据类消息主要是电子白板消息、文本聊天消息。本小节主要描述服务器处理SASL登录认证消息的流程。用户登录认证的流程如图5.3所示。图5.3登录认证的序列图 第五章服务器端的详细设计与实现47如图5.3所示,当服务器收到客户端的SASL登录消息时,会调用数据库访问层的对用户信息进行验证,如果用户信息正确,则调用UserManager向服务器的在线用户列表中添加新的用户对象,然后向客户端发送登录成功的响应消息,否则发送登录失败的提示消息,同时关闭Vortex连接。对于控制消息以及数据类消息的处理,由于涉及到虚拟教室模块,因此在5.3.2虚拟教室模块的流程设计中详细描述。5.3虚拟教室管理模块虚拟教室模块主要维护系统中所有虚拟教室的状态,包括虚拟教室中所有在线用户的状态、虚拟教室的状态以及虚拟教室的流媒体处理。本节主要完成在线虚拟教室模块的逻辑设计,并给出关键流程的设计。5.3.1虚拟教室模块的逻辑设计在虚拟教室系统中,一个虚拟教室对象代表系统中当前的虚拟教室,虚拟教室管理模块主要功能是虚拟教室状态的维护和虚拟教室流媒体的处理。1.虚拟教室状态维护在虚拟教室系统中,系统管理员和教师可以创建多个虚拟教室,学生和老师可以自由地选择加入或者离开虚拟教室。因此服务器需要维护虚拟教室对象的列表。同时,在虚拟教室中,不同角色的状态会根据客户端登录用户的操作而发送变化的,为了保证虚拟教室中在线用户状态的一致性,服务器程序必须维护当前虚拟教室中所有在线用户的状态,同时当在线用户的状态发送改变时,向虚拟教室中的所有在线用户广播该用户的状态变化消息。虚拟教室管理模块的设计时,采用STLmap的数据结构维护当前虚拟教室中所有在线用户的状态信息。2.虚拟教室流媒体的处理流媒体处理部分主要是负责接收虚拟教室中音频或者视频发言人的实时数据,经过处理后,转发给P2P传输模块,由P2P传输模块完成多媒体数据的下发。虚拟教室的流媒体处理包括音频处理部分和视频处理部分,都是基于Mediastreamer2框架实现的。在流媒体处理部分的设计时,为了确保响应的实时性,采用队列的方式缓存音频和视频的RTP包,流媒体数据处理模块在MSTicker的驱动之下,按照设定的工作方式,从网络上将客户端的RTP包接收,处理后,存入队列,然后再由另外一个单独的发送线程,每隔200ms周期性地从视频缓冲队列VideoQueue或者音频缓冲队列AudioQueue中的获取RTP包,封装成P2P的分片后,发送给P2P传输模块,由P2P传输模块完成音视频流的下发。 48虚拟教室系统的设计与实现下面详细描述服务器关于音频数据的处理流程和视频数据的处理流程:视频数据的处理流程。在虚拟教室系统中,在某个特定时间段,虚拟教室的视频数据只能来自于一个客户端,通常是当前教室的教师客户端,但是同一个客户端的数据源可以被多个教室共享。下面给出关于视频数据的处理流程图:图5.4视频数据的处理流程图如图5.4所示,服务器程序维护一个代表用户A的OnlineUser对象A,ClassRoom对象表示客户端A所在的教室,MSTickerFilter是整个FilterGraph的控制器,VideoQueue是当前教室的视频缓冲队列。Video_RTP_REV对象是MS_RTP_RECV_ID类型的MSFilter,主要负责接收用户A的视频RTP包。Video_TEE对象是MS_TEE_ID类型的MSFiler,主要负责将单个视频流复制成多个相同的视频流,实现流的复用,使得其他的教室可以在同一时间观看本教室的实时视频。Video_RTP_SINK对象是MS_RTP_SEND_ID类型的MSFilter,主要负责将视频数据的RTP包存入VideoQueue。VideoSenderTh是视频RTP包的发送线程,负责周期性地从VideoQueue队列中获取视频RTP包,封装成P2P的Piece分片后,通过UnixSocket的方式,发送给P2P分发模块,然后完成视频流的下发。音频数据的处理流程。在虚拟教室系统中,在某个特定的时间段,某个教室的音频数据会来自不同的用户,只要用户在该教室被授权可以使用语音交流,因此在服务器端的流媒体汇聚子模块,需要完成混音的工作。下面给出音频数据的 第五章服务器端的详细设计与实现49处理流程图。图5.5音频数据的处理流程图如图5.5所示,用户A与用户B在相同的虚拟教室中,都是发言人。服务器程序同时维护代表用户A和用户B的OnlineUser对象。Audio_RTP_REV是MS_RTP_RECV_ID类型的MSFilter,主要负责接收用户的音频RTP包。Audio_Decoder是负责解压缩音频流,把Speex压缩方式的音频流解压成原始的音频流。Audio_TEE是MS_TEE_ID类型的MSFilter,主要负责把单个输入音频流复制成多个相同的输出音频流。Audio_Mixer是MS_AUDIO_MIXER_ID类型的MSFilter,主要负责把多个不同输入的输入音频流,混合成单个输出音频流,完成服务器端音频的混音工作。Audio_Encoder主要负责把原始的音频流,压缩成speex格式的音频流。Audio_RTP_SINK是MS_RTP_SEND_ID类型的MSFilter,主要获取Speex音频数据包,然后打包成RTP包,存入AudioQueue队列中。AudioSenderTh是音频数据的发送线程,周期性地从AudioQueue中获取RTP包,封装成P2P分片后,通过UnixSocket的方式,发送给P2P分发模块,然后完成视频流的下发。根据上面的分析给出,下面给出虚拟教室管理模块的类图。 50虚拟教室系统的设计与实现VirtualClassroomP2PDownloadManagerVCRManager-videoQueue:MSQueue-btDownloadTaskMangager:PyObject-m_classroomTable:map<>-videoQueueMutex:mutex-mainThreadState:PyThreadState-m_mutex:shared_mutex-audioQueue:MSQueue+Init()-audioQueueMutex:mutex+Initialize()+DispatchMessage()-classroomId:int+Lock()+AddClassRoom()10..*-classroomName:string+Unlock()+RemoveClassroom()-audioSenderTh:boost::thread*+AddTask()+JoinClassroom()-videoSenderTh:boost::thread*+RemoveTask()-......+GetMediaTorrentString()+Init()+StartClass()VCRWhiteBoardInfo+StopClass()1..*1+HandleUserEvent()-index:int+BroadcastUserStatus()-boardName:string+AddUser()VCRAudioHandler-seq:int+RemoveUser()-speekerList:set1+SetUserStatus()-speekerListMutex:shared_mutex+GetUserStatus()-isAudioStarted+CleanUserStatus()-audioMixerFilter:MSFilterVCRUserInfo+StartP2PMedia()-audioRTPTransport:RtpTransport*-userName:string-audioEncoderFilter:MSFilter-type:int11-audioSinkRTPFilter:MSFilter1-status:int-audioSendRTPSession:RtpSessionVCRVideoHandler+StartAudio()-camerUserName+StopAudio()-isVideoStarted+Init()-videoSinkRTPFilter:MSFilter+AudioRTPSendTo()-videoRTPTransport:RtpTransport-videoSendRTPSession:RtpSession+StartVideo()+StopVideo()+Init()+VideoRTPSendTo()图5.6虚拟教室管理模块的类图如图所示,虚拟教室管理模块共有七个主要的功能类:VCRManager类:虚拟教室管理类,管理所有虚拟教室对象的对象。该类保存了所有虚拟教室对象的列表以及访问虚拟教室列表的互斥变量。该类是对虚拟教室管理模块的封装,主要提供以下的方法:加载MediaStreamer2库和完成初始化工作的方法Initialize();分发消息的方法DisptachMessage(),当服务器程序在接收到消息之后,首先调用该函数,然后根据消息类型调用虚拟教室对象的处理函数;新建虚拟教室和删除虚拟教室的方法;用户加入虚拟教室的方法JoinClassRoom()。VirtualClassroom类:虚拟教室类,主要负责维护虚拟教室的状态。该类保存了虚拟教室中的在线用户列表、虚拟教室中电子白板的状态信息、音视频数据的缓冲队列以及其对应的数据发送线程、音视频数据发送线程的Unix套接字以及其绑定的文件路径、音视频下载任务对应的Python对象和音视频下载任务对应的描述字符串等信息,同时包含虚拟教室音频处理类和虚拟教室音频处理类的实例。该类提供虚拟教室中的所有操作,主要包括开始上课的方法、下课的方法、新建P2P下载任务的方法、控制消息的处理函数HandleUserEvent()、广播在线用户状态的方法、在用户列表添加和删除用户的方法、获取用户状态的方法、设置用户状 第五章服务器端的详细设计与实现51态的方法等。VCRUserInfo:在线用户的状态类,代表一个在线用户的状态,其中type表示在线用户的类型,status表示在线用户的状态。VCRWhiteBoardInfo:电子白板的状态类,代表一个电子白板的状态,其中index表示电子白板的编号,name表示电子白板的名称,seq表示电子白板数据的编号。VCRAudioHandler:虚拟教室音频处理类,主要完成虚拟教室中多路音频流的混合,然后将混合后音频流存入虚拟教室对象的音频缓冲队列中。VCRVideoHandler:虚拟教室视频处理类,主要完成虚拟教室中视频流的转发,将视频流存入虚拟教室对象的视频缓冲队列中。P2PDownloadManager:P2P下载任务管理类,包含C++层调用位于Python层的P2P传输模块接口的封装,提供新建P2P下载任务、删除P2P下载任务以及获取P2P下载任务的描述字符串等功能。位于Python层的P2P传输模块的设计与实现在5.4节中详细描述。5.3.2虚拟教室模块的流程设计1.用户加入虚拟教室的消息处理流程首先由XMLRPCServer响应XML-RPC请求消息时,包括解析XML消息内容,调用XML-RPC服务类中的doJoinClassroom()方法加入虚拟教室;然后会向VirtualClassroom类中添加虚拟教室的新成员,根据DBHandler返回的用户类型,设置新成员的初始状态,同时在虚拟教室中广播新成员加入的消息;然后通过UserManager类调用Online类的成员方法反向添加虚拟教室的引用;最后将虚拟教室的媒体描述信息封装成XML消息,返回给客户端,同时会在当前虚拟教室广播,新用户加入的消息。用户加入虚拟教室的流程如图5.7所示。图5.7用户加入虚拟教室的序列图 52虚拟教室系统的设计与实现对于其他XML-RPC请求的处理也是类似的流程,首先解析XML请求消息,然后根据XML请求消息执行RPC调用,在完成处理之后将RPC执行的结果封装成XML消息,返回给客户端。2.用户离开虚拟教室的消息处理流程用户离开虚拟教室时,客户端会通过VortexChannel向服务器发送离开教室的消息,服务器会调用消息处理函数,解析消息,然后在虚拟教室对象的用户列表中删除当前在线用户的信息,同时在服务器的在线用户对象中删除教室对象的引用。最后,向该虚拟教室中所有其他用户广播,在线用户离开的消息。用户离开虚拟教室消息的流程如图5.8所示。NetworkServerVCRManagerVirtualClassroomUserManagerOnlineUserMessageHelper成员离开教室消息调用消息分发函数解析消息返回消息调用消息处理函数删除在线用户反向删除教室引用删除教室引用返回返回生成用户离开教室的广播消息返回消息广播消息图5.8用户离开虚拟教室的序列图当NetworkServer收到用户离开教室消息时,首先调用VCRManager的消息分发函数,然后利用MessageHelper完成消息解析,根据消息的教室ID字段,调用其虚拟教室对象的消息处理函数,然后在虚拟教室对象的在线用户列表中删除当前在线用户的引用,同时通过UserManager在线用户管理类调用OnlineUser在线用户对象类的成员方法反向删除虚拟教室的引用,最后在虚拟教室中广播成员离开的消息。对于其他控制类消息的处理也是类似的流程,首先解析消息的内容,然后根据消息的教室ID字段,调用虚拟教室的消息处理函数,执行控制命令后,根据命令执行的结果完成响应消息的打包,在虚拟教室中广播响应消息。3.设置发言人权限的消息处理流程设置发言人权限,是指教师设置学生的发言状态,主要包括电子白板的发言权限和语音聊天的发言权限。这里以教师设置语音聊天的发言权限为例。服务器 第五章服务器端的详细设计与实现53处理设置语音聊天消息的流程如图5.9所示。图5.9处理设置语音聊天消息的序列图当NetworkServer收到成员离开教室消息后,首先调用VCRManager的消息分发函数,然后利用MessageHelper完成消息解析,根据消息的教室ID字段,调用虚拟教室的消息处理函数。通过UserManager在线用户管理类调用OnlineUser在线用户对象类的成员方法LinkClassroomAudio(),试图建立在线用户对象的语音处理模块与虚拟教室对象的语音处理模块之间的连接,由于是首次建立连接,所以需要创建在线对象的语音处理模块UserAudioHander,然后封装UserAudioHandler的端口信息,返回给请求发言的学生客户端,通知他启动音频数据的发送模块。最后在虚拟教室中广播用户状态改变的消息。对于其他设置发言人权限的消息处理流程类似,这里不再详细描述。5.4P2P传输模块在5.3.1节中已经对服务器子系统中流媒体数据的处理流程进行了分析,流媒体处理线程每隔200ms都会周期性地处理数据缓冲队列中的RTP包,包括将当前缓冲队列中的RTP包封装成P2P数据分片,然后通过Socket向位于Python层的P2P传输模块发送P2P数据分片。当P2P传输模块通过Socket接收数据分片时, 54虚拟教室系统的设计与实现调用BitTorrent协议栈实现向BT传输层添加数据分片,然后由BT传输层下发数据分片。根据以上分析,位于Python层的P2P传输模块的高层次类图如图5.10所示。图5.10P2P传输模块的部分类图结合前面提到的流媒体数据处理流程,对图5.10中的主要功能类进行说明:BTDownloadManager类:P2P下载任务的管理类,通过封装Session对象实现,主要作用是维护每个下载任务的实例。每当有新的下载任务时,该类就会新生成一个对应下载任务实例,添加到Session对象的下载任务列表里,并负责维护。DownloadTask类:下载任务对应的实例类,通过封装Download对象实现,每一个BT下载任务都会有一个对应的DownloadTask类实例,该类包含新建BT下载任务、设置启动时配置信息、暂停BT下载任务、设置BT下载任务的工作模式、设置BT下载任务的数据源等功能。UnixSocketDatagram类:主要包含通过UnixSocket获取P2P数据分片的相关方法,包括创建UnixSocket、通过UnixSocket读取数据分片和关闭UnixSocket。该类由BTWriter类调用完成向BT传输层添加数据分片。BTWriter类:该类负责将P2P数据写入BT传输层的,通过封装BT1Downloader对象实现。该类会运行一个后台线程btwritethread,对应的方法是bt1handler函数,bt1handler处理函数是一个while循环,会不断地通过UnixSocket读取P2P数据, 第五章服务器端的详细设计与实现55然后通过write_piece()方法将数据发往BT传输层,最后BT传输层会完成P2P数据的下发。5.5本章小节本章主要是在系统总体分析的基础上,完成了服务器子系统的详细设计与实现,首先介绍了基于BEEP协议栈的通信模块的设计,然后再对在线用户管理模块和虚拟教室管理模块的逻辑设计和流程设计分别进行了详细的说明,最后描述了位于Python层的P2P传输模块的设计与实现。 56虚拟教室系统的设计与实现 第六章系统测试57第六章系统测试本章首先根据系统的功能需求设计相关测试用例对系统的主要功能进行测试,然后给出系统运行时的性能参数,最后将对测试结果进行简要的分析。系统的测试环境如表6.1所示。表6.1测试环境模块设备数量客户端处理器:Intel(R)Celeron(R)450@2.2GHz7内存:2G操作系统:WindowsXP服务器处理器:Intel(R)Xeon(R)W3505@2.53GHz64bit1内存:4G硬盘:500G7200转操作系统:openSUSE11.2(i586)网卡:BroadcomCorporationNetXtremeBCM5764MGigabitEthernetPCIe6.1系统功能测试1.登录认证功能的测试在虚拟教室系统中,教师和学生必须登录系统后才能参与虚拟教学活动,登录界面如图6.1所示。图6.1登录界面如图所示,登录系统需要输入用户名和密码,点击登录按钮,系统会验证用户输入的个人信息。如果登录成功,则跳转到主界面;否则提示个人信息输入错 58虚拟教室系统的设计与实现误。在测试登录认证功能时,分别使用学生账号、教师账号以及错误账号,并输入正确和错误的密码进行测试。测试结果达到预期目标。2.用户状态管理功能的测试用户状态管理功能涉及的客户端界面是主界面和虚拟教室界面,如图6.2和图6.3所示。图6.2主界面图6.3虚拟教室界面 第六章系统测试59用户状态管理功能主要包括用户加入和退出虚拟教室、学生电子举手,教师设置发言人权限和教师踢人,下面结合具体用例对这四个功能进行测试。1)用户加入和退出虚拟教室功能当用户登录系统后,客户端跳转至主界面,用户选择加入一个或者多个虚拟教室,同时可以选择退出虚拟教室。如表6.2所示,按照学生和教师这两种角色测试用户加入和退出虚拟教室的功能。表6.2用户加入和退出教室测试用例用例ID用户加入退出教室_01用例名称用户加入退出教室测试用例用例描述验证用户是否可以同时加入多个虚拟教室并退出虚拟教室测试步骤1、运行主程序2、登录系统,跳转到客户端的主界面3、用户在虚拟教室列表中选择加入一个或者多个虚拟教室4、用户选择退出虚拟教室前置条件后台服务器已经启动,成功地运行客户端程序,并完成登录认证过程用例ID场景测试步骤预期结果达到预期结果TC1学生加入虚拟教室在学生的主界面点击系统跳转到学生是虚拟教室列表,然后的虚拟教室窗口,选择加入多个虚拟教刷新虚拟教室的室成员列表TC2学生退出虚拟教室点击关闭虚拟教室窗虚拟教室窗口关是口的按钮,系统会提闭,显示主界面;示学生是否确认退出其他客户端会刷教室,学生选择是新成员列表TC3教师加入虚拟教室在教师的主界面点击系统跳转到教师是虚拟教室列表,然后的虚拟教室窗口,选择进入多个虚拟教刷新虚拟教室的室成员列表TC4教师退出虚拟教室点击关闭虚拟教室窗虚拟教室窗口关是口的按钮,系统会提闭,显示主界面;示教师是否确认退出其他客户端会刷教室,教师选择是新成员列表2)成员状态管理功能在学生和教师都加入虚拟教室后,学生选择电子举手功能,教师允许学生发言,同时设置其发言权限,然后教师选择踢人。在测试过程中通过观察虚拟教室的在线用户列表,验证成员状态管理功能的正确性。 60虚拟教室系统的设计与实现表6.3成员状态管理功能测试用例用例ID成员状态管理_01用例名称成员状态管理测试用例用例描述对成员状态管理功能进行测试,验证学生电子举手功能,教师设置发言人权限功能以及教师踢人功能测试步骤1、运行主程序2、教师和学生都登录系统,然后进入虚拟教室3、教师点击“开始上课”按钮4、学生选择电子举手功能5、教师分别执行拒绝学生发言、设置发言人权限和踢人6、观察虚拟教室的成员列表前置条件教师和学生都完成登录认证过程,并且已经加入虚拟教室用例ID场景测试步骤预期结果达到预期结果TC1学生电子举手在虚拟教室窗口中,教教师端和学生端的是师点击“开始上课”按虚拟教室窗口都会钮后,然后学生点击刷新当前成员列“举手”按钮表,学生处于请求发言状态TC2教师拒绝学生发在虚拟教室窗口中,教教师端和学生端的是言师在成员列表中右击虚拟教室窗口都会选中请求发言的学生刷新当前成员列项,在弹出的菜单中,表,学生的请求发选择拒绝发言请求言状态被取消TC3教师设置发言人在虚拟教室窗口中,教教师端和学生端的是权限师在成员列表中右击虚拟教室窗口都会选中请求发言的学生刷新当前成员列项,在弹出的菜单中,表,学生处于语音选择设为发言人,同时或者电子白板的发设置其是语音或者白言状态板的发言人TC4教师踢人在虚拟教室窗口中,教教师端和学生端的是师在成员列表中右击虚拟教室窗口都会选中某个学生项,在弹刷新当前成员列表出的菜单中,选择请出用户3.语音聊天功能的测试在虚拟教室中,支持多人同时语音聊天,本节主要对系统的音频采集、音频编码、音频数据传输、服务器混音和P2P传输进行测试。在测试过程中,以3路音频混音为例,即教师设置2名学生是语音聊天功能的发言人,通过观察虚拟教室中用户能否听清所有发言者的声音,判断语音聊天功能的正确性。 第六章系统测试61表6.4语音聊天功能测试用例用例ID语音聊天功能_01用例名称语音聊天功能测试用例用例描述对语音聊天模块进行测试,测试系统是否能够正确地完成音频采集、音频数据编码、音频数据传输、服务器混音、P2P传输测试步骤1、运行主程序2、教师和学生都登录系统,然后进入相同的虚拟教室3、教师点击“开始上课”按钮4、学生选择电子举手功能(可选)5、分别执行教师设置语音聊天发言人、教师开始/停止语音聊天、教师或者学生开始/停止音频发送、教师或者学生开始/停止音频接收等指令6、观察虚拟教室的相关用户能否听清所有发言人的声音前置条件教师和学生都完成登录认证过程,并且已经加入虚拟教室用例ID场景测试步骤预期结果达到预期结果TC1语音聊天—开启教师点击“开始上课”虚拟教室的用户能够是语音聊天功能按钮,同时设置其中2听清所有发言者的声名学生为语音聊天功能音的发言人,然后学生和教师同时参与语音聊天TC2语音聊天—教师在虚拟教室的语音聊天开始/停止虚拟教室是开始/停止语音停止/开始后,教师点击的语音聊天功能,文聊天“开始/停止语音”按钮本会显示区域提示语音聊天功能的状态更新,同时虚拟教室的成员是否会听清所有发言人的声音TC3语音聊天—开始在虚拟教室的语音聊天点击“开始音频发送”是/停止音频发送功能开启后,教师或者按钮后,虚拟教室的学生点击“开始/停止音成员都会听到教师或频发送”按钮者学生的声音;反之,则否TC4语音聊天—开始在虚拟教室的语音聊天点击“开始音频接收”是/停止音频接收功能开启后,教师或者按钮后,教师或者学学生点击“开始/停止音生能够听到所有发言频接收”按钮者的声音;反之,则否4.视频直播功能的测试在虚拟教室的视频直播功能启动后,该虚拟教室的所有用户都会观看到教师端的实时视频。本节主要对系统的视频采集、视频编码、视频上传、视频下发以及视频显示进行测试。在测试过程中,通过观察客户端的视频显示区域能否实时地播放教师端采集的视频数据,判断视频直播功能的正确性。 62虚拟教室系统的设计与实现表6.5视频直播功能测试用例用例ID视频直播功能_01用例名称视频直播功能测试用例用例描述对视频直播功能进行测试,测试系统是否能够正确地完成视频采集、视频编码、视频上传、视频下发以及视频显示测试步骤1、运行主程序2、教师和学生都登录系统,然后进入相同的虚拟教室3、教师点击“开始上课”按钮4、分别执行教师开始/关闭视频直播、教师或者学生开始或者关闭视频接收等命令5、观察客户端的视频显示区域能否实时地播放教师端采集的视频数据前置条件教师和学生都完成登录认证过程,并且已经加入虚拟教室用例ID场景测试步骤预期结果达到预期结果TC1视频直播—开启在虚拟教室窗口中,教虚拟教室的用户能是视频直播功能师点击“开始上课”按够实时地观看教师钮,默认自动开启视频端采集的视频数据直播功能TC2视频直播—教师在虚拟教室的视频直播开始/停止虚拟教室是开启/关闭视频停止/开始后,教师点击的视频直播功能,文直播“开始/停止视频”按钮本会显示区域提示视频直播功能的状态更新,同时虚拟教室的成员能否实时地观看教师端采集的视频数据TC3视频直播—开始在虚拟教室的语音聊天点击“开始/停止视是/停止音频接收功能开启后,教师或者频接收”按钮后,教学生点击“开始/停止视师或者学生能够实频接收”按钮时地观看教师端采集的视频数据;反之,则否5.电子白板功能的测试在虚拟教室中,电子白板支持的输入数据类型包括文字类和图形类,文本用于虚拟教室成员之间进行文字交流,图形则包括直线、矩形、椭圆、自由画线、橡皮擦等。在测试过程中,当电子白板的使用者在白板区域绘制图形时,观察虚拟教室中所有用户的白板区域是否能够及时并且正确地更新数据。下面给出电子白板功能测试的典型用例,包括文本输入、直线绘制和自由画线,其他图形绘制工具的测试用例类似,这里就不再赘述。 第六章系统测试63表6.6电子白板功能测试用例用例ID电子白板功能_01用例名称电子白板功能测试用例用例描述对电子白板功能进行测试,测试系统是否能够正确地完成电子白板类数据的实时广播、接收与显示测试步骤1、运行主程序2、教师和学生都登录系统,然后进入相同的虚拟教室3、教师点击“开始上课”按钮4、教师选择设置电子白板的发言人(可选)5、电子白板的发言人选择白板绘图的工具,设置工具样式6、电子白板的发言人在白板区域绘制图形7、观察虚拟教室中所有在线用户的电子白板区域能否及时地更新数据前置条件教师和学生都完成登录认证过程,并且已经加入虚拟教室用例ID场景测试步骤预期结果达到预期结果TC1电子白板—文本发言人在电子白板工具选择虚拟教室中所是框区域选择文本框工具,设置有在线用户的字体样式,然后在白板绘图电子白板区域区域,创建文本框,输入文能够及时地显本内容,调整文本框的位置,示文本数据完成在文字输入后,在文本框区域外双击鼠标左键结束本次文本输入TC2电子白板—绘制发言人在电子白板工具选择虚拟教室中所是直线区域选择直线工具,设置线有在线用户的条的粗细与颜色,然后在白电子白板区域板绘图区域单击鼠标左键,能够及时地显确定直线的起点位置,保持示白板发言人鼠标左键点击的状态,然后绘制的直线拖动鼠标的位置,调整直线的终点位置,释放鼠标左键,完成直线的绘制TC3电子白板—自由发言人选择铅笔工具,设置虚拟教室中所是曲线线条的粗细与颜色,然后在有在线用户的白板绘图区域单击鼠标左电子白板区域键,确定直线的起点位置,能够及时地显保持鼠标左键点击的状态,示白板发言人然后自由拖动鼠标的位置绘绘制的自由曲制自由曲线,最后释放鼠标线左键,完成直线的绘制6.文本聊天功能文本聊天的方式包括私聊、群聊,文字聊天功能主要包含文本的发送、文本的接收和显示。 64虚拟教室系统的设计与实现表6.7文本聊天功能测试用例用例ID文本聊天功能_01用例名称文本聊天功能测试用例用例描述对文本聊天功能进行测试,测试系统是否能够正确地完成文本消息的发送、接收、显示测试步骤1、运行主程序2、教师和学生都登录系统,然后进入相同的虚拟教室3、分别测试文本聊天的私聊、群聊4、观察相关用户的文本显示区域能否正确显示文本消息前置条件教师和学生都完成登录认证过程,并且已经加入虚拟教室用例ID场景测试步骤预期结果达到预期结果TC1文本聊天—私聊在教师或者学生的文文本消息发送者是本交流区域,通过下拉与接收者的文本框选择特定的聊天对显示区域都会显象,在文本输入区域输示文本信息入文本消息,点击发送TC2文本聊天—群聊在教师或者学生的文当前虚拟教室成是本交流区域,通过下拉员的文本显示区框选择所有人,在文本域都会显示文本输入区域输入文本消信息息,点击发送6.2系统性能测试虚拟教室系统采用P2P方式传输流媒体数据,相对于C/S模式的传输方式,其优点是可以充分利用客户端的资源,使得流媒体传输所需要的大量带宽和数据处理能力由P2P网络中的对等节点共同分担,从而有效地减少流媒体服务器的压力,使得系统具有良好的稳定性和可扩展性。虚拟教室系统的性能测试主要是根据不同的客户端规模,分别测试服务器程序的稳定性和资源占有率,其中资源主要包括CPU、内存、网络带宽。测试的方法是:首先配置并运行相关的后台服务器程序;然后教师通过客户端程序登录系统,进入教室;其次在分别启动不同数量的客户端程序后,学生使用其账号登录系统,进入教室;当学生和教师都进入虚拟教室后,教师选择开始上课,然后设置2名学生参与语音聊天,同时开启视频直播功能、电子白板功能和文本聊天功能;最后,在测试过程中,查看并记录服务器程序在不同用户规模情况下的资源占有率,测试结果如表6.8所示。 第六章系统测试65表6.8服务器性能测试结果性能数据2个学生客户端4个学生客户端6个学生客户端CPU峰值20%23%27%占用率平均值16%18%23%内存占用峰值81.485.786.2(MB)平均值78.779.181.2百兆网带宽峰值0.8%1.2%1.7%占用率平均值0.6%0.9%1.1%6.3测试结果分析本次测试首先通过设计测试用例对虚拟教室系统进行了功能性测试,验证系统在功能的实现基本上达到了设计目标,即测试用例的实际结果与预期结果相符合。在测试过程中,对发现的程序问题进行了及时解决,降低了软件缺陷,保证了软件的质量。另一方面,从系统的性能测试可以发现,由于虚拟教室系统的流媒体分发策略是基于P2P方式完成的,当客户端数量增加时,服务器的各项资源消耗并没有成倍增加,服务器各项功能正常,性能相对稳定,符合系统的应用要求。6.4本章小节本章首先通过设计典型的测试用例对虚拟教室系统进行了功能测试和性能测试,然后通过对测试结果的分析,验证了虚拟教室系统的正确性,同时证明了P2P传输技术在缓解服务器的压力上的良好表现。 66虚拟教室系统的设计与实现 第七章总结与展望67第七章总结与展望7.1本文工作本文采用C/S结构与P2P对等结构的混合网络模型,基于BEEP协议、ActiveX技术和P2P传输技术,设计并实现了虚拟教室系统。该系统是一个完全基于Internet的实时交互式远程教育平台,提供包括文本聊天、电子白板、语音聊天、视频直播等多种交流方式,并且可以动态扩展。同时,由于流媒体传输模块的设计与实现是基于P2P传输技术完成的,所以系统能够有效地降低运行过程中对服务器性能的要求,也可以充分利用所有客户端节点的剩余资源如CPU、带宽等。本文讨论了流媒体的处理流程,选取Mediastreamer2流媒体引擎作为系统中音视频处理模块的实现基础,介绍了应用层协议设计的基础BEEP协议框架,同时选取Vortex库作为通信模块的实现基础,然后简单介绍了ActiveX技术的原理;根据虚拟教室系统的需求,设计了该系统的整体网络结构和系统结构,阐述了系统各个子模块的关系与构成;利用面向对象的思想,设计并实现了客户端的各个功能子模块;在服务器端,利用数据流图以及类图详细描述了关键功能模块的设计与实现;最后根据系统的功能需求,撰写测试用例,对系统各个功能模块进行了测试,并通过对测试结果的分析,表明本系统基本达到了预期的目标。7.2存在问题本文设计并实现了虚拟教室系统,但在很多方面还需要进一步完善,主要体现在以下方面:1.目前虚拟教室系统只支持文本聊天、电子白板、语音聊天、视频直播的交流方式,还缺少对其他交流方式例如协同浏览、同步显示等的支持;2.本系统在实现电子白板时,并发机制是基于完全互斥锁设计的,在同一时刻只允许一个成员编辑电子白板,虽然机制简单稳定,但缺乏实时交互性,后续可以考虑引入令牌传递、事务机制等方法,增强交互性;3.本系统的P2P传输模块是基于Tribler开源项目实现的,虽然较为稳定,但对各个功能模块仍然需要进行详细的分析,并适当的修改以更适合本系统的特点。 68虚拟教室系统的设计与实现 致谢69致谢首先,我要感谢我的导师武波教授。在研究生学习期间以及本论文的完成过程中,武波老师始终给予了我极大的支持和认真细致的指导,提出了很多宝贵的建议。在三年的研究生学习阶段,我从武老师身上学到了很多东西。武老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益匪浅。再次向武老师表示最诚挚的谢意。感谢沈沛意教授,他渊博的学术知识和谨慎认真的态度是我今后学习的榜样,沈老师不仅在学术上给了我资深专业的指导和帮助,更以谦和和平易近人的作风指导我为人处事的道理。感谢张扬老师,他以深厚的理论造诣、敏锐的思考能力和积极的人生态度为我提供有益的指导。在论文写作期间,他给我提出很多合理的建议和科学的解决方案,使我顺利的完成硕士论文工作。感谢张亮老师,他扎实的工作能力、严谨的工作态度和务实求真的工作精神是我今后学习的榜样。感谢实验室所有的同学们!能在这样充满智慧和友爱的集体里学习,我深感荣幸,与你们相处的每一天将永远留在我的记忆中。此外,特别感谢我的父母,他们的支持、关心和鼓励,是我人生路上的动力。最后,衷心感谢所有论文审稿和答辩的专家评委对我的批评和指正。 70虚拟教室系统的设计与实现 参考文献71参考文献[1]张国波,梁国胜,张军儒等.远程教育导引.兰州大学出版社,2008.09[2]Chih-MingChen,Ling-JiunDuh,Chao-YuLiu.Apersonalizedcoursewarerecommendationsystembasedonfuzzyitemresponsetheory[J].E-Technology,e-Commerceande-Service,2004(3):305-308.[3]王继新,李书明主编.远程教育原理与技术.湖北科学技术出版社,2005.10[4]http://www.worldcampus.psu.edu/[5]山东大学硕士论文.徐萌.基于P2P模式的计算机远程教育系统[6]MortenFlatePaulse.AnAnalysisofPotentialImprovementsinLearningManagementSystem.NKIDistanceEducation.October2002[7]TerryFlew.FasttimesatVirtualU:Digitalmedia,marketsandthefutureofhighereducationintheWestReport.AURVolume41,Number1,1998:20-26[8]高晓玲,吕鹏宇.远程教育系统[M].北京:中国宇航出版社,2004:13-16[9]百度文库http://wenku.baidu.com/view/950c29fd700abb68a982fb15.html[10]管磊编著.P2P技术揭秘P2P网络技术原理与典型系统开发.清华大学出版社,2011.01[11]GunjanSmatani,DimpleSadhwanni.WebServicesandPeer-toPeerComputing.2005.2[12]合肥工业大学硕士论文.朱子荣.P2P点播系统媒体缓冲区研究与实现[13]西安电子科技大学硕士论文.张扬.基于P2P技术Qos中间件的研究与设计[14]胡泽,赵新梅编著.流媒体技术与应用.中国广播电视出版社,2006.06[15]廖勇等编著.流媒体技术入门与提高.国防工业出版社,2006.01[16]吴国勇等编著.网络视频流媒体技术与应用.北京邮电大学出版社,2001[17]RFC3550,RTP:ATransportProtocolforReal-TimeApplications[18]RFC3605,RealTimeControlProtocol(RTCP)attributeinSessionDescriptionProtocol(SDP)[19]RFC2326,RTSP:RealTimeStreamingProtocol[20]RFC2205,RSVP:ResourceReSerVationProtocol[21]许先斌,余韦.多媒体组播中的RTP包丢失恢复方案[J].计算机工程与应用.2005年第43期[22]龚海刚,刘明,毛莺池等.P2P流媒体关键技术的研究进展[J].计算机研究与

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭