基于应用层组播的流媒体直播系统的设计与实现李玮liwei@ha.edu.cnmsn:liweihappyeveryday@hotmail.com郑州大学信息网络省重点学科开放实验室内容•一、论文•二、近期工作引言随着互联网的发展,流媒体业务逐渐增多,其中网络电视、网络教学等领域的视频直播服务具有广阔的应用前景。该系统采用了两层架构,使整个系统具有较好的扩展性;结合Scattercast的应用层网关思想,部署多个数据代理服务器改善了域内扩展性与稳定性。设计方案MDP2MDP4(M)ListSrv4(L)ListSrv2音视频文件编码网络层组播传输线路应用层组播传输线路MDP3ListSrv3IPv4/IPv6网络MDP1ListSrv1ListSrvABDEFC发布•模型设计采用两层架构。域间采用应用层组播技术构造转发树,域内可灵活选用IP组播或应用层组播技术。节点采用集中控制方式,分别部署一个转发树节点管理服务器(ListSrv)管理节点。设计方案•系统软件包括WindowsMediaEncoder、ListSrv和MixCast。•WindowsMediaEncoder对流媒体文件编码;•ListSrv负责接受用户的加入请求,监控整个系统的逻辑拓扑,管理并存放节点的信息(节点本机IP以及该节点的所有子节点IP、度、标志位);•普通节点(peer)只需MixCast负责节点选择,上下游节点的维护,节点失效后的重构以及从父节点获得数据,缓存部分流媒体数据并进行转发与本地回放。Networklayer(IPv4/IPv6)WindowsMediaEncoderASFFile封装包Peermanager(ListSrv)MediaplayerBuffermanageChildmanagerpeerpeerpeer转发本地回放转发转发转发转发本地回放本地回放本地回放视频源Peer关键技术与算法转发树构造应用层组播构造涉及组播树中节点加入、节点退出和节点失效后的重构[3]。转发树的构造在整个应用层组播视频直播系统中至关重要,包括节点选择策略和节点加入算法。节点选择策略:基于最大链路带宽与最近网络拓扑节点选择相结合的算法节点加入算法(图)–1.图1中,M为该域的MDP,L为该域的ListSrv,节点M为初始化时的父节点。–2.新加入节点N首先向L发送Join报文,请求加入转发树。L根据节点选择策略将N最优的父节点组B(N)={C,D,E,F}发送给N。–3.节点N收到并发送Join报文给B(N)中“链路有效带宽”最大的节点,其他节点作为备用节点。–4.若节点C度未满则发送Accept报文给N,加入过程结束;若其他节点在N选择C为父节点前已成功成为其子节点而导致节点C度满,C节点发送Refuse报文给N。–5.若N收到Refuse报文,则选择一个备用节点发送Join报文,回到3。若备用节点耗尽,则回到1。关键技术与算法转发树重构•域内节点一般都是普通PC,节点意外失效或强行退出引起的树的断裂会导致其可靠性较低,因此需要一个有效的机制在节点退出后快速地重构转发树[5-6]。–链路预留技术–节点退出分为节点正常退出和节点异常退出。•正常退出之前,节点关闭当前运行的线程并释放所占资源,同时向其父节点与所有子节点发送Leave报文;父节点收到Leave报文后,更新所维护的节点的信息;子节点收到Leave报文,根据链路预留技术选择新的父节点。关键技术与算法节点异常退出获接收数据错误异常10054findFather(),重新找父节点异常退出更新服务器节点信息获发送错误异常10054当前节点父节点子节点节点列表服务器ListSrv系统性能测试及分析726660544842363024181260Time(hour)1200.001000.00800.00600.00400.00200.000.00BandWidth(kb/s)BandwidthTest高中较低低PC配置3.503.002.502.001.501.000.50响应时间(s)响应时间测试6.005.004.003.002.001.00.00层次数15.0010.005.000.00Delay(S)时延与层次关系图小结本文设计并实现了一种应用层组播流媒体直播系统。该系统支持IPv4/IPv6;加入了节点管理功能,增强其可控性;提出了结合最大链路带宽与最近网络拓扑策略的节点选择算法和节点异常离开处理算法。通过实际运行测试,证明该系统有一定的应用价值,能够提供较好的视频直播服务。参考文献[1].林予松.大规模网络环境下的组播通信技术研究[D].解放军信息工程大学,2005.[2].El-SayedA.Application-LevelMulticastTransmissionTechniquesOverTheInternet[D].INSTITUTNATIONALPOLYTECHNIQUEDEGRENOBLE,2004.[3].YeoCK,LeeBS,ErMH.Asurveyofapplicationlevelmulticasttechniques[J].ComputerCommunications,2004,27(15):1547-1568.[4].曹佳,鲁士文.应用层组播的最小延迟生成树算法[J].软件学报,2005,16(10):1765-1772.[5].徐敏,李仁发,乐光学.可扩展的实时流媒体应用层组播系统设计[J].计算机工程,2006,32(20):218-220.[6].王钊.基于Internet应用层组播在流媒体中的应用[J].微计算机应用,2006,27(1):49-51.[7].陈庆吉.支持实时多媒体传输的应用层组播系统[J].计算机工程,2005,31(4):136-140.现在阶段进展基于P2P的流媒体直播系统改进:协议:应用层组播(树)-P2P(网状结构)流媒体:TCP-RTP;调度等策略的加入目的:支持更大规模的流媒体直播,提高传输效率,降低延时,作为平台深入研究系统框架图WEB发布服务器普通结点超级结点(SN)Tracker•上层部署一个WEB服务器,使用XML保存频道ID和发布源IP,用于频道发布。•SN部署固定,为频道信息发布源。当有新频道发布时,首先向web服务器通知,web服务器使用XML保存频道ID和发布源IP,其他SN节点定时从web服务器更新获得频道列表信息;SN节点与发布源节点相连接获得流媒体信息。•当有普通节点加入时,首先下载频道列表信息,点击所需频道连接本域内的SN节点得到父节点列表,从父节点列表中再次选出合适的父节点来获取数据信息。当节点退出时,分别向父、子及SN节点发送消息报文并更新各自列表信息,异常退出时,通过心跳算法更新列表信息。SuperNodeSN节点管理:邻居SN列表(SNList);SN相邻子节点列表(SNPList);动态设置算法:令频道数最大定为M,每个SN节点的转发能力为N,SN中每个频道可转发数为N/M。频道数假设为A,域内当前播放频道数为B,则动态设定每个频道可转发数为(N-(A-B)N/M)/B;SN间的交互•当有新的SN发布频道时,向SNList中的SN节点发送频道更新消息。•SN定期向SNList中的SN节点发送自己正在转发的频道信息。Tracker设计Tracker维护一个节点列表,该列表保存域内频道节点记录(频道ID和节点IP),为新节点加入提供服务。每个域都配置一个Tracker,用来记录管理域内的节点信息,为新加入的节点提供邻居节点信息。1.Tracker维护的列表:•TList:保存域内正在播放的频道信息和对应的节点信息(IP地址和节点性能参数)。2.选择节点算法(为新节点选择下载信息):•先从TList中随机选择N个节点,然后根据IP地址最大匹配算法(考虑综合节点性能参数)从这N个节点中选择M个节点发给新节点。普通节点设计维护三个表:子节点表:本节点的子节点(向其发送数据)信息(包括频道ID和子节点IP)。父节点表:本节点的父节点(从其接收数据)信息(包括频道ID和子节点IP)。邻居表:备用节点信息(未连接的节点,包括频道ID和子节点IP,从这个表中选择通信节点)。普通节点间交互:邻居节点信息交互:节点与连接节点交互邻居表信息。节点维护信息:包括节点的正常退出报文、保持响应报文以及代理退出报文。节点加入流程图•是•连接SN无列表有列表•否TC根据选择算法返回列表•点击频道,连接TC节点根据列表选择父节点进行通信,获取资源信息SN间数据转发节点根据父节点的资源信息,调度下载,连接父节点从父节点获得数据,定期交换邻居节点•打开程序连接YP,下载列表下载速率或连接节点小于一定值•从邻居表中选择节点发起新的通信节点管理--节点的退出正常退出:节点向其子节点、父节点、TC发送“leave”报文,子节点、父节点、TC更新列表信息。非正常退出:节点采用心跳算法对其子节点和父节点进行判断,若指定时间内没有反应,则在节点列表中删除相应节点记录。当节点退出导致域内无节点连接某频道,SN为该频道缓存一段时间。RTP/RTCP•ASF格式•RTP协议封装•发送策略•RTCP数据包分析•发送•IPRTP/RTCP•接收策略•缓存•策略•调度•策略•缓存替•换策略•图一流媒体模块设计框架•拆包策略•发送流媒体部分将数据包拆成小于MTU(最大传输单元)的数据包,大小为1K左右,拆分后的每个包头加上一个序列号,使成为传输过程中唯一统一的序列号•收到子节点“拉”信号时,发送子节点需要的数据包•收到子节点“推”信号时,顺序发送一级缓存中的数据包采用推拉相结合的策略,每个节点保存一个BufferMap,各节点定时信息交换,更新BufferMap中信息。•设定一个最大调度值,一个最小调度值:Max值、Min值。•二级循环队列中:当队尾序号-当前播放的序号Min值时,采用拉的策略,查询每个节点的BufferMap,“拉”自己需要的数据包;•当队尾序号-当前播放的序号Max值时,采用推的策略,节点被动的接收数据包缓存策略2级缓存。第一级用队列,第二级采用循环队列。如图所示,根据调度策略采取非顺序接收数据包,保存在一级缓存里。一级缓存负责整个系统中数据包的传输,包的调度;将有序的数据包保存到自己的二级缓存里,主要负责本地播放。缓存替换策略一级缓存采用LRU替换策略,替换固定时间内访问次数最少的媒体块包。二级缓存采用先进先出策略替换•1•4•3•2•5•8•6•10•2•3•4•5•6•7•8•9•10•11•1•图二缓存策略•Thanksforyourattention!liwei@ha.edu.cn