版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)基于openRTMFP的在线远程培训点播系统服务器控制程序设计与实现学院软件学院专业软件工程学生姓名学生学号指导教师提交日期2014年06月01日摘要本文详细介绍了基于openRTMFP的P2P视频点播系统服务器应用相关原理及该服务器后台控制程序的实现过程。采用基于openRTMFP的P2P视频点播系统方案能减少视频点播时宽带消耗,提升传送速度,以及快速连接恢复。因此,采用这种方案针对视频点播系统的实现将有利于开发者快速部署应用环境,降低开发成本。实时流媒体应用中能提供优秀的的用户体验。openRTMFP(CumulusServer)是一个完全开源和跨平台的可扩展的RTMFP协议媒体服务器,支持P2P点到点服务、修改Lua脚本创建自己的应用程序、实现实时应用的高并发扩展及负载均衡等功能。通过修改脚本创建个性化的服务端应用程序来扩展Cumulus的功能,再创建一个类似客户端的应用与该服务端建立连接和数据通信。服务器端控制程序的设计与实现是基于openRTMFP的P2P点播系统的一个子课题。首先需要熟悉该openRTMFP服务器框架及运行原理,其中包括openRTMFP源程序安装和编译,对POCO库、openssl、Lua脚本的学习等,修改该服务器脚本创建自己的应用程序来扩展Cumulus功能,开发出的程序界面应该简洁友好,便于用户理解和操作。服务器端控制程序实现的主要功能是查看当前用户的连接数量,流量监控,重连,断开服务。本文先对当前基于P2P视频点播系统应用设计技术和背景作简单介绍,对本课题用到的开发工具和任务安排简单说明;接着阐述RTMFP协议特点、开源openRTMFP项目的开放接口及Lua脚本语言,服务器编译安装说明;然后是支持在线远程培训后台管理控制程序的设计与实现过程,涉及到需求、程序概要设计、详细设计和程序测试等。最后总结与展望对该项目的学习和设计过程。关键词:openRTMFP;RTMFP;P2P;实时流媒体;控制程序AbstractThisarticledescribestherelatedprinciplesofopenRTMFP-basedandP2PVODSystemserverapplicationsandtheimplementationprocessofimplementingaservercontrolprogram.TheschemeofP2PVODSystemOpenRTMFP-basedcanreducethetimeconsumptionofbroadbandvideo-on-demand,improvetransmissionspeed,andrestoringconnectionquickly.Therefore,usingthisschemeforvideo-on-demandsystemwillbebeneficialtodeveloperstoquicklydeployapplicationsandreducethecostofdevelopment.Real-timestreamingmediaapplicationscanprovideusersexcellentwithexperience.TheopenRTMFP(CumulusServer)isacompletelyopen-source,cross-platformandscalableRTMFPprotocolmediaserver.SupportingforP2P-pointservice,modifyingLuascripttocreatetheirownapplications,highconcurrentexpansionandloadbalancingcapabilities.BymodifyingthescripttocreateapersonalizedCumulusserverapplicationtoextendfunctions,andthencreateasimilarapplicationclienttoestablishaconnectionanddatacommunicationwiththeserver.Thedesignandimplementationofserver-sidecontrolprogramisasub-topicthatbasedonopenRTMFPofP2Pvideo-on-demandsystem.First,needtobefamiliarwiththeopenRTMFPserverframeworkandoperatingprinciples,includingopenRTMFPsourcecompilationandinstallationofthePOCOlibraries,openssl,Luascriptlearning.ModifyingtheserverscripttocreatetheirownserverapplicationstoextendCumulusfunctions,theinterfaceoftheprogramshouldbesimpleandfriendly,easyforuserstounderstandandoperate.Themainfuctionoftheserver-sidecontrolprogramistoviewthecurrentclients’numbersofconnections,trafficmonitoring,reconnect,disconnecttheservicebetweentheclientandserver.ThisarticlefirstlymakeabriefintroductionofP2P-basedvideo-on-demandonthecurrentsystemapplicationdesigntechniquesandbackground,aexplanationofdevelopmenttoolsandtasksarrangementforthisstudy;thenintroducetheRTMFPprotocolfeatures,APIofopensourceprojectsopenRTMFPandLuascriptinglanguage,theservercompilerinstallationinstructions;thensummarizethedesignandimplementationofdesigningservercontrolprogram,involvingrequirements,proceduresoutlinedesign,detaileddesignandprogramtesting.Intheend,Concludeswiththeprospectoflearninganddesignprocessfortheproject.Keyword:openRTMFP,RTMFP,P2P,realtimestreamingmedia,controlprogram第一章引言1.1课题背景和简介随着计算机网络和视频流媒体技术的发展,人们对互联网视频点播系统的需求与期望更高。传统的客户端/服务器模式的流媒体服务系统已不可以满足流媒体对服务器性能以及高带宽的要求,这类视频应用限制了视频的传输速度和清晰度,影响用户体验。针对这类问题,采用P2P对等网络技术实现的视频通信应用能减低对服务器的压力,降低通信延迟和宽带开销。随着P2P技术发展的逐步完善,在视频点播/在线直播,用户文件共享,分布式计算领域得到广泛应用。目前流行的基于P2P的视频点播系统有:暴风影音、在线电视直播PPLive、FlashPlayer播放器等应用。现有的流媒体协议包括有RSVP(资源预留协议)、RTP(实时传输协议)、RTCP(实时传输控制协议)、MMS(微软流媒体服务协议)、RTSP(实时流传输协议)、MIME(多目因特网电子邮件扩展协议)、RTMP(Adobe实时消息协议)、RTMFP(Adobe实施消息流协议即P2P协议)。Adobe公司的产品FlashPlayer和Air1.5率先使用对等网络实时流媒体协议RTMFP,提供媒体服务端的支持使得可以实现应用层组播和P2P功能。openRTMFP(CumulusServer)是一个完全开源和跨平台的可扩展的RTMFP协议媒体服务器脚本,CumulusServer遵循基于GPL框架下的优势、速度、跨平台、轻量和高质量代码。支持现场直播和视频聊天、支持P2P点到点服务、支持push、RPC、pull切换,并能和服务器端与所有AMF客户端通信、支持修改脚本创建自己的应用程序来扩展Cumulus的功能、负载均衡等功能。1.2主要研究工作本课题运用开源的openRTMFP服务器开发一个基于flash的p2p点播系统。采用基于openRTMFP的P2P视频点播系统方案将能减少视频点播时宽带消耗,提升传送速度,以及快速连接恢复。openRTMFP服务器采用的RTMFP协议是基于UDP的,在减少延时和丢包容忍上有很大优势,同时客户端数据可直接传送,适合大范围部署。利用现有的openRTMFP服务器程序,开发一个界面控制,主要功能有:查看当前用户的连接数量,流量监控,重连,断开服务,主要难点:配置安装openRTMFP服务器,读懂该服务器代码,了解服务器工作原理,进而进行界面开发。因此设计与实现基于openRTMFP的P2P点播系统服务器控制程序,对了解P2P视频通信应用,学习配置基于RTMFP协议的服务器Cumulus有重要意义。熟悉该服务器框架并开发控制程序,监控和维护该视频点播系统中客户端和服务器连接使用情况。1.3相关开发工具与技术介绍MicrosoftVisualStudio2010开发工具VisualStudio是目前最流行的Windows平台应用程序开发环境。MicrosoftVisualC++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面,支持开发面向Windows7的应用程序。除了MicrosoftSQLServer,它还支持
IBM
DB2和Oracle数据库。目前有专业版、高级版、旗舰版、学习版和测试版五个版本。本项目编译Cumulus服务器开源项目使用到的是VS2010的旗舰版。POCOC++库POCOC++库是开源的用于简化和加速C++开发面向网络、可移植应用程序的C++库集。包含4个核心库及一些附加库.这4个核心库分别是:Foundation,XML,Util和Net.附加库中其中2个是NetSSL和Data,NetSSL为Net库中的网络类提供SSL支持,Data库提供访问不同SQL数据库的一致性接口。Foundation库包含底层平台的封装层,也包含经常使用的工具类和函数如:数字和字符处理类,日期时间处理类,stream类用于写二进制数据到流中,多线程的封装等;XML类库支持处理,读取和写XML文件;Net库包含包含socket类,支持TCP流和serversockets,UDPsockets,multicastsockets,ICMP及rawsockets;Util库包含创建命令行和服务器应用框架和管理配置信息。成功编译openTMFP服务器需要安装POCO库支持,因为Cumulus中Cumuluslib是rtmfp主体实现,大量用到poco库中socket、thread、IO线程等。OpenSSL库OpenSSL是安全套接字层密码库,大致可分为SSL协议库,应用程序和密码算法库。编译服务器时需要在系统安装OpenSSL,安装Perl,配置VC环境变量,编译动态链接库等过程。LuaJIT(lua脚本编译器)Lua,轻巧的脚本语言,用于嵌入到应用程序为其提供扩展和定制个性化功能。在本开源服务器项目中的CumulusServer其实是根据CumulusLib而设计的可扩展服务器框架,用来支持lua以及服务器直接负载均衡。JavaScriptJavaScript是一种基于对象和事件驱动并且具有一定的安全性的客户端脚本语言。它是一种动态、弱类型、基于原型的语言,JavaScript内置支持类。一个完整的JavaScript是由以下3个不同部分组成的:核心(ECMAScript)、文档对象模型(简称DOM)、浏览器对象模型(简称BOM)。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。1.4论文内容安排本文主要介绍了openRTMFP服务器的编译安装、实现对服务器应用扩展以及设计实现支持在线远程培训后台管理系统,并对该系统进行系统测试。本文主要内容分为八章,其组织结构如下:第一章为引言,引言的主要内容是对课题背景意义、研究工作、开发工具的介绍。说明了在何种背景下完成该项目和本文完成的工作第二章为相关技术介绍,是对课题涉及的P2P、RTMFP协议、流媒体技术简单分析。熟悉这些技术有利于如何实现本文涉及的项目。第三章为openRTMFP服务器的介绍,主要内容为对openRTMFP源代码的学习分析,了解其架构和核心实现,并利用lua脚本实现服务器的应用扩展meeting服务器应用。第四章、第五章、第六章、第七章是对支持在线远程培训后台管理系统整个开发实现过程的分析和介绍,包括需求分析、概要设计、详细设计、系统应用测试四个方面;最后一章为总结与展望,对本文研究的内容进行总结以及对未来的展望。第二章相关技术介绍2.1P2P目录摘要 IIAbstract IIIThisarticledescribestherelatedprinciplesofopenRTMFP-basedandP2PVODSystemserverapplicationsandtheimplementationprocessofimplementingaservercontrolprogram.TheschemeofP2PVODSystemOpenRTMFP-basedcanreducethetimeconsumptionofbroadbandvideo-on-demand,improvetransmissionspeed,andrestoringconnectionquickly.Therefore,usingthisschemeforvideo-on-demandsystemwillbebeneficialtodeveloperstoquicklydeployapplicationsandreducethecostofdevelopment.Real-timestreamingmediaapplicationscanprovideusersexcellentwithexperience. IIITheopenRTMFP(CumulusServer)isacompletelyopen-source,cross-platformandscalableRTMFPprotocolmediaserver.SupportingforP2P-pointservice,modifyingLuascripttocreatetheirownapplications,highconcurrentexpansionandloadbalancingcapabilities.BymodifyingthescripttocreateapersonalizedCumulusserverapplicationtoextendfunctions,andthencreateasimilarapplicationclienttoestablishaconnectionanddatacommunicationwiththeserver. IIIThedesignandimplementationofserver-sidecontrolprogramisasub-topicthatbasedonopenRTMFPofP2Pvideo-on-demandsystem.First,needtobefamiliarwiththeopenRTMFPserverframeworkandoperatingprinciples,includingopenRTMFPsourcecompilationandinstallationofthePOCOlibraries,openssl,Luascriptlearning.ModifyingtheserverscripttocreatetheirownserverapplicationstoextendCumulusfunctions,theinterfaceoftheprogramshouldbesimpleandfriendly,easyforuserstounderstandandoperate.Themainfuctionoftheserver-sidecontrolprogramistoviewthecurrentclients’numbersofconnections,trafficmonitoring,reconnect,disconnecttheservicebetweentheclientandserver. IIIThisarticlefirstlymakeabriefintroductionofP2P-basedvideo-on-demandonthecurrentsystemapplicationdesigntechniquesandbackground,aexplanationofdevelopmenttoolsandtasksarrangementforthisstudy;thenintroducetheRTMFPprotocolfeatures,APIofopensourceprojectsopenRTMFPandLuascriptinglanguage,theservercompilerinstallationinstructions;thensummarizethedesignandimplementationofdesigningservercontrolprogram,involvingrequirements,proceduresoutlinedesign,detaileddesignandprogramtesting.Intheend,Concludeswiththeprospectoflearninganddesignprocessfortheproject. III第一章引言 IV1.1课题背景和简介 IV1.2主要研究工作 IV1.3相关开发工具与技术介绍 V1.4论文内容安排 VI第二章相关技术介绍 VII2.1P2P VII介绍 VII2.2RTMFP协议 VIII2.2.1RTMFP原理 VIII2.2.2RTMFP特点 IX2.3流媒体技术 IX第三章openRTMFP服务器 X3.1openRTMFP服务器介绍 X3.2openRTMFP服务器编译及安装 X3.3负载均衡及可扩展性 XI3.4openRTMFP常用的API和套接字 XII3.4.1常用的API XII3.4.2openRTMFP的Socket使用 XII3.5openRTMFP源码浅析 XIII3.5.1openRTMFP服务器的启动流程 XIII3.5.2Cumulus服务器主线程分析 XV3.6CumulusServer服务器应用及简单实例 XVI3.6.1如何创建自定义的服务器应用 XVI3.6.2加载全局配置 XVII3.6.3应用间通信 XVII3.6.4自定义服务器应用实例 XVII第四章系统需求分析 XX4.1需求分析的目的和意义 XX4.2功能性需求分析 XX4.2.1 后台用户管理功能需求描述 XX4.2.1 流量、节点监控功能需求描述 XXI4.2.2 广告插播功能需求描述 XXII4.2.3视频控制管理功能 XXIII4.2.4自动转换格式及码率功能需求描述 XXIV4.3非功能性需求分析 XXIV第五章系统概要设计 XXVI5.1系统总体架构设计 XXVI5.2系统后台服务模块设计 XXVI5.2.1后台用户管理模块 XXVI5.2.2视频管理模块 XXVII5.2.3广告管理模块 XXVII5.2.4系统信息模块 XXVIII5.3后台管理系统数据库设计 XXVIII第六章后台管理系统实现 XXXI6.1后台用户管理模块实现 XXXI6.1.1后台用户登录与注销 XXXI6.1.2后台管理用户添加和删除 XXXII6.2视频管理模块实现 XXXIV6.2.1添加视频功能实现 XXXIV6.2.2删除视频功能实现 XXXIV6.3广告管理模块实现 XXXVI6.3.1广告添加功能 XXXVI6.3.2广告删除功能 XXXVI6.4系统信息(监控)模块实现 XXXVII6.4.1节点数量监控实现 XXXVII6.4.2服务器所在系统流量监控实现 XXXVII第七章后台管理系统应用及测试 XXXIX7.1用户管理模块应用与测试 XXXIX7.2视频管理功能应用与测试 XXXIX7.3广告管理功能应用与测试 XXXIX7.4系统信息监控功能测试 XL7.5后台管理系统应用测试小结 XL第八章结论与展望 XLI8.1结论 XLI8.2展望 XLI参考文献 XLII致谢 XLIII2.2RTMFP协议2.2.1RTMFP原理RTMFP实时媒体流协议(Real-Time-MediaFlowProtocol)是Adobe公司开发的一个专有的通信协议,通过C/S和P2P模型能够在网络中高效的传送多媒体信息如音乐视频文件等。RTMFP协议可以让AdobeFlashPlayer的所在终端用户之间实现直接点对点等多种通信。RTMFP将直接减少实时通信流量带宽成本,如音频通话、视频聊天和多人游戏等应用。RTMFP的工作原理是:首先,客户连接到基于RTMFP协议服务器,如FlashMediaServer、openRTMFP(又称Cumulus),连接成功后获得唯一的客户端标识码ID。然后获得ID后的客户端就可以使用UDP协议发布数据、音频或者视频信息。和该客户端连接在同一个服务器上的其他客户端应用可根据ID接收它已发布的流信息。当然其它客户端也要事先连接到同一个服务器,获取自己的ID,以及流资源的一些信息,便于订阅用户所需要的流资源。RTMFP协议实现涉及的技术支持有:客户端涉及到组播的实现,每一个连到服务器的端应用如果相互可见就会在服务器端形成一个组Group。一个Group同时保存组内个成员间的路由信息,因此组内任何两节点间存在直接或间接的通信连接。FlashPlayer10.1版本后允许实现应用层组播技术,寻找合适分发路径,把资源通过P2P方式分发到相应的组。组播通信流是一个或者多个发布者可在group中全体组员发布组播流信息及数据。服务器端需要支持RTMFP协议,支持覆盖网络,对象复制特性,同时在不同地址的服务器通过TCP连接实现共享用户资源信息等。2.2.2RTMFP特点因为RTMFP之间传递数据通信是在最终用户客户端之间传递数据,而不是客户端与服务器之间,服务器的带宽不被大量占用,是成本最低的解决方案。RTMFP使用户通过麦克风和摄像头能够直接与其他用户连接和通信,也可以发送消息。RTMFP协议是基于UDP协议来实现数据传送,UDP协议不可靠但传送音频视频数据速度快。终端用户和终端用户之间实时通信对实时性要求较高,因此可容忍部分丢包、错包的现象存在。RTMFP协议有如下这些特点,可能有助于减少连接失败错误等一下相关影响。(1)较安全且低时延:传输的数据利用AES加密,终端通信安全。UDP协议实时性降低时延。(2)快速连接恢复:网络连接中断后能快速恢复连接。例如,当一个无线网络连接,经历中断,重新连接成功后即有数据传输能力。(3)IP允许变动:即使客户端更改到一个新的IP地址,这个活动的网络的会话依然会保持且在激活状态。2.3流媒体技术流媒体系统的架构主要分四部分:媒体服务器,播放器,媒体编码器,文件存储器。制约流媒体性能服务的关键因素是对传输质量的控制。比如如何支持较多的用户并发数,保证端和端之间的QoS(服务质量)。另外多媒体数据网络传输和控制协议有RTP/RTCP协议、RSVP协议、RTSP协议,RTMP协议、RTMFP协议。第三章openRTMFP服务器3.1openRTMFP服务器介绍openRTMFP(也称CumulusServer)是支持Lunix、Windows、Mac等主流系统的跨平台,可扩展的完全开源服务器。该服务器遵循GPL框架下的优势、跨平台、速度、代码轻量且高质量。用户可以通过Cumulus官网去免费下载源代码并在需要的平台上编译安装CumulusServer。它具有点到点P2P服务、现场音频视频直播以及pull/push/RPC切换支持等特点,支持服务器之间通信来实现负载均衡,而且支持任何AMF终端应用和服务器端进行通信,通过修改脚本(主要用Lua脚本语言)来创建应用程序、扩展Cumulus来实现更个性化的功能。3.2openRTMFP服务器编译及安装编译安装CumulusServer需要OpenSSL密码库、POCO库、LuaJIT编译器等框架的支持,所以安装前要到、、、/OpenRTMFP/Cumulus官网下载好需要的库以及cumulus源代码。下载过程注意选择支持所用操作系统以及编译工具如(VS2010)的正确版本,以免安装过程出错。在Windows系统,VS2010开发环境安装步骤主要有以下几个步骤:安装POCOC++库。命令行下cd进入该库解压目录,分别输入以下命令编译:先"%VS100COMNTOOLS%\vsvars32.bat"
再buildwin100buildstatic_mtbothWin32nosamplesdevenv编译成功后,添加它的包目录和库目录到CumulusServer_2010.sln工程。安装和编译OpenSSL。编译完成后添加openssl的inc32包目录和out32dll库目录到CumulusServer_2010.sln工程。安装和编译LuaJIT编译器。命令行下进入LuaJIT的src资源目录,分别输入
"%VS100COMNTOOLS%\vsvars32.bat"
和msvcbuild.bat命令编译安装完成后,再添加LuaJIT的src目录到CumulusServer_2010.sln工程的VC++库目录。至此,openRTMFP的编译准备工作完成,然后开始编译工程,把src包中的lua51.dll复制到ColumnsServer.exe所在的目录下。安装编译openRTMFP服务器工作有一定的难度,安装过程会发生各种不同的问题,大部分是由于操作系统动态库缺失、编译工具差异引起。因此发生问题时仔细分析出错问题原因,上网查询出错原因及解决方法。成功启动openRTMFP后界面显示如下:图3-1openRTMFP编译成功界面安装成功后,在服务器的可执行目录(即Cumulus.exe的目录)中默认会生成一个logs的文件夹,文件夹里面会生成log.0格式的文件,用windows写字板打开后可查看服务器启动时的时间、端口等基本信息。还会生成名字为www的文件夹,里面存放是利用lua脚本语言扩展cumulus后开发的服务器应用。3.3负载均衡及可扩展性RTMFP是一个P2P协议,需要有一个服务器端点处理所有客户端之间的点对点连接。但基于UDP的特性,RTMFP只有处理如实时视频/音频流的能力,在经典的B/S模式不使用P2P功能。这种情况下一直使用服务器负载,需要中央可用性。当然,一台机器总会有一些硬件上的限制(CPU/内存),这时负载变得特别重要,一个CumulusServer实例将远远不够的。为了解决负荷需求,CumuluServer中的完整框架可使多个CumulusServer实例通信,放大计算和接收能力。它允许配置多个CumulusServer环境,提供检测服务器连接和断开的,服务器之间的数据交换,客户端与服务器的重定向来部署系统的负载均衡,例如在同步客户端信息和与NetGroup的RTMFP选项。服务器之间的通信使用原始的TCP方式进行。负载均衡及可扩展性体现在如下方面:服务器应用之间交换数据和资源。新的服务器应用加入时,分享已有发布者信息。负载均衡和会合服务。客户端连接时接受到多个服务器应用地址,RTMFP启动多个并联连接尝试,最先建立连接的服务器应用将会成功连接到客户端3.4openRTMFP常用的API和套接字本节介绍一些常用的CumulusServer服务器应用的事件和开发接口,方便如何建立服务器应用。另外简单分析openRTMFP套接字运用。3.4.1常用的API表3-1常用API说明对象属性方法名事件对象说明CommonnotionsvaluemethodonManage一些共同的声明CumulusClients,groups,Configs,servers,publicAddresscreateTCPClient(),absolutePath(path)publish(name)…/全局对象,提供对本身元素的访问Clientscountpairs(),(id/rawId)/连接服务器客户端集合Clientid,rawId,address,flashVersion,path,pageUrl,writer…/onManage一个已连接的客户端对象Publicationname,publisherId,listeners,audioQOS,videoQOSpushAudioPacket(.)pushVideoPacket,pushDataPacket,flush(),close(…)发布者Listenerid,audioQOS,receiveAudio等/一个发布的一个订阅者ServerAddress,isTargetpublicAddress/描述服务器间连接的一个对象CumulusServer在服务器应用脚本中调用的事件包括:onStart(path)、onStop(path)、onConnection(client,...)、onDisconnection(client)、onFailed(client,error)、onJoinGroup(client,group)、onUnjoinGroup(client,group)、onPublish(client,publication)、onUnpublish(client,publication)、onVideoPacket(client,publication,time,packet)、onSubscribe(client,listener)、onAudioPacket(client,publication,time,packet)、onManage()、onDataPacket(client,publication,name,packet)、onServerDisconnection(server)、onUnsubscribe(client,listener)、onServerConnection(server)、onHandshake(address,path,properties,attempts)3.4.2openRTMFP的Socket使用CumulusServer的服务器应用使用LUA机制,可以添加一些需要的特性去扩展它。通常用到LUASocket去添加LUA的套接字,但是这种扩展有3种缺点:所有接受和发送数据的方法默认使用阻塞模式,如果修改,就不能在TCP中正确工作,LUA本质是单线程的,每个脚本处理机管理的结果必须返回给Cumulus。LUASocket在Windows系统上并不会一直出色运行。它无效地重复套接字的跨平台特性。为了创建一个UDP套接字,需要调用createUDPSocket([allowBroadcast])方法创建一个socket对象,包含address和peerAddress(连接到这个套接字的点端地址),这里列举一个简单的例子来理解这个运用如下:socket=cumulus:createUDPSocket()functionsocket:onReception(data,address)NOTE("Receptionfrom"..address)self:send(data,address)enderr=socket:bind(":1234")–启动服务器iferrorthenERROR(err)end3.5openRTMFP源码浅析Cumulus服务器源码主要包括两大部分,CumulusLib和CumulusServer,其中CumulusLib是RTMFP协议的主体实现部分,里面大量使用到了poco库相关的thread处理,socket处理,IO线程和work线程池等其它相关工具,因此它基本是服务器本身的一个大概框架。而CumulusServer是使用CumulusLib中的相关类而扩展出去的一个服务器框架,里面的代码用于支持写Lua脚本语言开发服务器应用,以及支持服务器间的负载均衡。CumulusServer部分代码包含服务器启动和处理客户端相关请求的所有方法,并提供lua接口供开发者搭建自己的服务端应用,利用这些接口能快速写上层业务逻辑,也能有效的与下层解耦,不容易出错。3.5.1openRTMFP服务器的启动流程Cumulus启动入口在main.cpp文件中,main.cpp定义了CumulusServer类,声明了程序入口intmain(intargc,char*argv[])函数;其中具体如下:intmain(intargc,char*argv[]){ DetectMemoryLeak();//内存泄露 returnCumulusServer().run(argc,argv)}DetectMemoryLeak()方法用来检查内存泄露,目前的项目没有实现这个功能,是个空函数。returnCumulusServer().run(argc,argv)语句,创建CumulusServer的匿名对象,并调用run(argc,argv)。CumulusServer类继承于ServerApplication,而ServerApplication类继承于Application类。CumulusServer类的对象调用run(argc,argv)函数,实际是ServerApplication的run()函数,ServerApplication的run()函数则是调用Application的函数,而该run(..)函数则是先调用initialize()函数,然后调用main()函数,然后调用uninitialize()函数。如果initialize()函数被调用时抛出异常,则不会执行main()函数,但仍然会执行uninitialize()函数:关于CumulusServer类的相关属性和方法如下://构造、析构函数//显示帮助信息//帮助请求//初始化服务器配置信息//日志路径//CumulusServer的main函数3-3CumulusServer类说明CumulusServer在执行main()函数之前,会启动initialize()函数来初始化配置信息,调用loadConfiguration(conststring&path)装入配置,path为CumulusServer.ini文件的路径。CumulusServer在执行自身的main()函数的流程如下:查看是否需要帮助信息,调用displayHelp()函数实现不需要显示帮助时进入启动状态,先创建RTMFPServerParams对象params,存储OpenRTMFP/CumulusServer的基本配置port、udpBufferSize等信息Serverserver(*this,config());server.start(_params);服务器启动waitForTerminationRequest();//等待终止运行的操作请求,然后server.stop();执行main()函数后是uninitialize()反初始化,其中CumulusServer类还包含一些其它函数,如命令行选项设定defineOptions()函数,命令行选项处理函数handleOption(),处理日志流函数logHandler(),manageLogFile()处理日志文件大小限制产生的问题等函数。kill()停止服务器运行,该函数是ApplicationKiller类的一个纯虚函数,继承ApplicationKiller类的CumulusServer中必须实现。3.5.2Cumulus服务器主线程分析main.cpp文件中会启动server,Server类继承自Cumulus::REMFPServer,而,RTMFP继承自Cumulus::Startable、Cumulus::Gateway、Cumulus::Handler。而Cumulus::Startable继承自Poco::Runnable,在CumulusServer中,该线程就是服务器的主进程。main()方法中调用server.start(_params);语句实现服务器运行。Server类方法和属性如下图:图3-3Server类说明Server::start()中调用其父类(RTMFPServer)的父类(Startable)的方法Startable::start()开启线程。调用Startable::start()函数后,开启线城时传入的参数为*this,所以就会运行Startable::run();Startable::run()调用Startable::prerun()函数,但这个函数被RTMFPServer覆盖,所以会运行RTMFPServer::prerun(),其源码如下:boolRTMFPServer::prerun(){NOTE("RTMFPserverstartson%uport",_port);在RTMFPServer::run()函数中。RTMFPServer覆盖Startable的run()方法,用来绑定CumulusServer的IP地址和端口,调用onStart()表示服务器正在开始运行。RTMFPServer类的类视图和说明见下图:图3-4RTMFP类说明3.6CumulusServer服务器应用及简单实例3.6.1如何创建自定义的服务器应用CumulusServer含有一个强大的脚本引擎(使用LUA语言),你可以创建你自己的服务器应用。它允许你用灵活的脚本语言方式去扩展Cumulus来添加你个性的需求。服务器开始运行后,在它的根目录下如果不存在www文件夹的话,会自动创建一个www的文件夹,在这个文件下你可以创建子文件夹,该子文件夹的名称即是你的服务器应用名称。当一个客户端连接到需要连接到你的服务器应用(假设名称为myApplication),connect()方法连接的URL路径将是rtmfp://host:port/myApplication,对应于www/myApplication文件夹。第一次运行服务器时将会执行myApplication目录下的main.lua文件,当有新的连接进入时,如果main.lua文件不被修改,你的应用会继续运行。当你编辑main.lua文件时,你的服务器应用会动态加载重新建立,但不会重新启动服务器。举个例子,比如myApplication目录下你的main.lua文件内容如下:functiononStart(path)print("Serverapplication'"..path.."'started")endfunctiononStop(path)print("Serverapplication'"..path.."'stopped")end启动服务器时另外会输出:ServerapplicationmyApplicationstarted关闭服务器时另外会输出:ServerapplicationmyApplicationstopped3.6.2加载全局配置CumulusServer可执行目录下的文件CumulusServer.ini用来服务器启动时加载服务器的一些配置信息,如port表示服务器端口,udpBufferSize表示UDP缓冲字节数,keepAlivePeer表示周期性发送包保持端点间连接的时间、keepAliveServer表示周期性发送数据包保持与服务器连接的时间、[logs]标识下的name表示日志名字名(去除后缀名的名称)directory表示日志存放的目录。用户可自定义去修改应用的全局配置信息,服务器启动时自动加载这些配置信息。3.6.3应用间通信CumulusServer应用间通信分不同服务器应用间通信、服务器与客户端通信两种。两个服务器应用间通信时,如果是继承关系的,调用对方的函数方法时需要在该方法前加上对方应用的声明。如果不是,也可以调用另外一个应用的方法,需要先判断该应用是否存在,再判断方法是否存在(用if应用名.方法,如果返回不是nil即说明存在);服务器应用和客户端进行通信时,客户端和服务器必须先建立连接,过程为客户端调用connect()方法连接服务器,服务器调用onConnection(client,..)处理连接。然后客户端使用call(“服务器的函数名”,),服务器响应客户端的调用,返回结果给客户端。3.6.4自定义服务器应用实例这个服务器应用实例实现的功能是:返回给客户端当前连接的服务器应用连接人数,并返回所有在连接的客户端用户名信息。客户端利用flex相关技术实现的连接服务器,并从服务器获取所有连接客户端的一些需要的信息。功能实现流程和关键函数如下:connection=newNetConnection();//创建一个NetConnection对象connection.addEventListener(NetStatusEvent.NET_STATUS,connectionHandler);//事件监听_connection.connect(protocol+_host+"/"+_application,_user,_meeting);//连接服务器第一步:客户端连接服务器,_user表示用户名,_meeting表示连接的服务器应用,服务器应用调用functiononConnection(client,userName,meeting)处理连接。第二步:客户端_netConnection.call("getParticipants",r,_meeting);//请求服务器调用方法getParticipants。服务器应用处理该请求时调用functionclient:getParticipants(meeting);并返回结果。服务器应用meeting的main.lua代码大致如下:functiononStart(path) NOTE("Application'"..path.."'started")endfunctiononStop(path) NOTE("Application'"..path.."'stopped")endfunctiononConnection(client,userName,meeting) client.userName=userName; client.meeting=meeting; INFO("Userconnected:",client.userName,"meeting:",client.meeting); functionclient:getParticipants(meeting)……………….//实现逻辑代码略 returnresult; endfunctiononDisconnection(client) INFO("Userdisconnecting:"..client.userName);end客户端的功能实现如图3-1所示。图3-1客户端应用功能实现效果图3-2服务器端应用meeting显示第四章系统需求分析4.1需求分析的目的和意义需求分析是一个非常重要的过程,它完成的好坏直接影响后续软件开发的质量。一般情况下,用户并不熟悉计算机的相关知识,而软件开发人员对相关的业务领域也不甚了解,用户与开发人员之间对同一问题理解的差异和习惯用语的不同往往会为需求分析带来很大的困难。所以,开发人员和用户之间充分和有效的沟通在需求分析的过程中至关重要。有效的需求分析通常都具有一定的难度,一方面是因为交流存在障碍,另一方面是因为用户通常对需求的陈述不完备、不准确和不全面,并且还可能不断地变化。开发人员不仅需要在用户的帮助下抽象现有的需求,还需要挖掘隐藏的需求。此外,把各项需求抽象为目标系统的高层逻辑模型对日后的开发工作也至关重要。合理的高层逻辑模型是系统设计的前提。在进行需求分析的过程中,首先要明确需求分析应该是一个迭代的过程。由于市场环境的易变性以及用户本身对于需求描述的模糊性,需求往往很难做到一步到位。需求分析不仅仅是属于软件开发生命周期早期的一项工作,而且还应该贯穿于整个生命周期中,它应该随着项目的深入而不断地变化。另外,为了便于后期评审、测试等工作的开展,需求的描述要求做到:具体详细、有可测性以及和可实现性。支持在线远程培训的点播系统服务器控制程序的需求文档的意义和约定在于以下几点:为了确保软件最终实现不偏离系统开发的需求,以及便于项目组成员充分了解软件需求,在需求调研完成以及与用户签订需求确认书后应编写需求文档。结合项目大小、难度、业务需求、研发周期、人员安排等,把软件总体的设计同需求结合在一起形成该软件需求。软件需求设计文档编写完成后,由项目经理/第一负责人组织项目组成员及部门领导等相关人员开会讨论,得到一致认可才能进行代码编写,即对于需求不明确的功能模块不应匆忙编写代码。软件需求文档编写完成后,在项目实施过程及验收交付使用后,用户提出的任何变更需求均及时补充记录在该文档中,利用开发过程的管理,把握进度。4.2功能性需求分析4.2.1 后台用户管理功能需求描述本功能主要对整个后台管理系统的用户进行有效管理,支持用户登录和注销,用户中添加和删除功能以及对用户使用权限进行添加的功能。需求信息如表4-4所示。表4-1用户管理功能需求名称输入过程输出使用方式备注用户登录用户名和用户密码由控制台获取用户信息并从服务器响应返回登录结果登录结果浏览器控制台用户输入用户名密码后点击登录,显示登录结果用户取消登录用户登录界面,用户名和密码由控制台用户点击登录界面的取消登录取消登录成功用户输入用户信息后点击取消登录用户展示数据库中用户数据表的信息获取用户数据表的元组,显示在用户管理界面当前管理系统的用户名称用户打开系统的用户管理界面的用户列表,显示用户名用户添加用户名、密码以及权限在用户管理界面添加用户数据库中用户数据表更新,用户展示更新用户列表用户在用户管理界面中点击添加用户,输入用户信息后进行添加用户删除需要删除的用户信息用户选择要删除的用户,点击删除数据库更新用户数据表,更新用户展示列表在用户管理功能界面选择要删除的用户,点击删除用户4.2.1 流量、节点监控功能需求描述本功能主要用于监控系统运行时,监控服务器的带宽流量以及当前连接的节点数量。主要展示方式为图形为主。需求信息如表4-2所示。表4-2系统信息流量与节点监控功能需求名称输入过程输出使用方式备注流量显示OpenRTMFP程序由控制台获取程序带宽并显示到页面折线图数据浏览器控制台用户手工点击显示流量,确认后,页面以折线图方式显示流量获取系统服务器的整个带宽(而不指定特定程序)节点显示节点数据由控制台获取数据并处理到显示到页面折线图数据浏览器控制台用户手工点击显示节点,确认后,页面以折线图方式显示节点数目4.2.2 广告插播功能需求描述本功能主要用于在视频播放前,设置所要插播的广告,从而当用户选择播放视频时,视频播放前自动加载该广告,同时也可以设置视频无广告插播。需求信息如表4-3所示。表4-3广告管理功能需求名称输入过程输出使用方式备注广告展示数据库广告表由控制台程序获取数据并显示到页面显示广告信息浏览器控制台用户手工点击显示广告,确认后,页面以列表形式显示广告信息(如广告名称、绑定的视频、上传者、上传日期等)广告上传上传广告信息由控制台程序获取信息并保存到数据库和资源服务器数据库和资源服务器增加广告浏览器控制台用户手工点击上传广告,选择上传的广告,确认后,控制程序更新广告信息和文件在广告上传页面进行此功能,格式不限广告删除删除广告信息由控制台程序获取信息并删除数据库和资源服务器的广告信息数据库和资源服务器删除广告浏览器控制台用户手工点击删除广告,确认后,控制程序删除用户所选择的广告信息和文件在广告删除页面进行此功能广告绑定广告、视频信息由控制台程序获取视频与广告绑定的信息数据库更新绑定信息浏览器控制台用户手工选择需要绑定或解除广告的视频,确认某一视频和某一广告绑定或解除后,控制程序更新数据库的绑定或解除信息绑定信息用于播放视频时,先播放视频绑定的广告,解除信息用户删除视频绑定的广告4.2.3视频控制管理功能视频点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银川公司审计制度
- 2026湖北武汉武昌区中南电力设计院有限公司数智科技公司招聘4人参考考试试题附答案解析
- 2026年淄博周村区事业单位公开招聘综合类岗位人员(9人)参考考试题库附答案解析
- 2026山东事业单位统考省文物考古研究院招聘初级综合类岗位2人备考考试题库附答案解析
- 2026福建三明市永安市罗坊乡人民政府招聘编外聘用驾驶员1人参考考试试题附答案解析
- 2026西藏昌都卡若区招聘社区工作者48人参考考试试题附答案解析
- 2026湖北武汉武昌区中南电力设计院有限公司数智科技公司招聘4人参考考试题库附答案解析
- 2026甘肃张掖市生态环境局甘州分局招聘环境监管监测辅助人员4人参考考试试题附答案解析
- 2026广西北海市银海区福成镇人民政府招录公益性岗位人员12人参考考试题库附答案解析
- 2026广东广州花山侨韵文旅产业投资有限公司招聘工作人员22人备考考试题库附答案解析
- 2025年大学生物(细胞结构与功能)试题及答案
- 2026年新通信安全员c证考试题及答案
- 2026届上海市徐汇区上海第四中学高一上数学期末学业质量监测试题含解析
- T-ZZB 2211-2021 单面干手器标准规范
- 快递安检协议书
- 水利水电建设工程验收技术鉴定导则
- 特困供养政策培训课件
- 2025年品质经理年度工作总结及2026年度工作计划
- 土壤监测员职业资格认证考试题含答案
- 2025中国胸痛中心诊疗指南
- 骨科常见疾病及康复治疗
评论
0/150
提交评论