具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
P2P流媒体网络具有多种拓扑结构,其中,基于gossip算法的P2P网络拓扑构造方法近年来得到了大量的应用,这样构造的网络模型称为网状模型,较之以往的基于树状结构的模型有更强的鲁棒性。在网状模型中,每个节点有若干直接相连的伙伴节点,它可以同时从多个结点请求数据,所以这种模型也叫多源模型。根据数据获取方式的不同,网状模型又可分为三种:数据驱动的网状模型、发送者驱动的网状模型和接收者驱动的网状模型。其中接收者驱动的网状模型因其QoS保障高、高效和网络中传输的冗余数据较少而得到了广泛的认同。
由于在网状模型中可能有多个节点同时持有某块数据,当一个节点向它的伙伴节点请求自己没有的数据时,需要确定向哪个伙伴节点请求数据,要求既能充分利用每个节点的空闲带宽使数据尽可能快的收到,同时又能维持整个网络的负载均衡,所以这个过程就需要一个智能的调度算法。
图1为本发明实施例一提供的流媒体数据调度方法的流程图,本实施例基于接收者驱动的网状模型提供一种流媒体数据调度方法,如图1所示,本实施例提供的流媒体数据调度方法包括:
步骤101,获取需要调度的当前数据块的数据块编号,根据数据块编号查询本地节点的伙伴节点集合,获取拥有当前数据块的伙伴列表;
具体的,步骤101包括:
步骤1011,根据本地节点的缓冲视图中存储的数据块的存在状态和数据块对应的数据块编号,查询需要调度的当前数据块的数据块编号;
其中,在接收者驱动的网状模型中,媒体数据被分成若干个大小相当的块,节点之间以块为单位来传送数据。每个节点维护一个自己的缓冲视图,缓冲视图用于存储节点的数据块的存在状态,即记录自己持有哪些数据块,然后定时把自己缓冲视图的变化发送给自己所有的伙伴节点,这样每个节点都能及时地了解它的伙伴节点持有哪些数据块,本地节点的缓冲视图中存储本地节点的数据块的存在状态。具体的,缓冲视图可以是一个数组,每个数组位对应一个数据块,例如,当数组位为0时,表示本地节点没有该数组位所对应的数据块,即需要调度该数据块;当数组位为1时,表示本地节点持有该数据位所对应的数据块。
步骤1012,根据数据块编号查询本地节点的伙伴节点集合,获取拥有当前数据块的伙伴列表;
其中,伙伴节点集合,是一个集合,它包含本地节点所有伙伴节点的信息,通过该集合可以查询到其中伙伴节点拥有的数据块的状况,以便后续向该节点发送调度请求。
步骤102,根据伙伴列表中伙伴节点的引用计数确定调度节点,所述调度节点为引用计数最小的伙伴节点;
其中,伙伴节点的引用计数用于表示本地节点向相应的伙伴节点已发送调度请求,但尚未收到或者在规定时间内未收到的数据块的数量,在P2P网络中每个节点的伙伴节点都有一个对应于该节点的引用计数。
当发现新伙伴节点时,将该新伙伴节点的引用计数初始化为0,当向一个伙伴节点发出调度请求时,将该伙伴节点的引用计数加1,并在请求调度的数据块在该数据块的播放时间之前到达时,将该伙伴节点的引用计数减1,因此,如果某个节点的服务能力较强,它就能在数据块的播放时间之前将数据块传输至请求节点,其引用计数不会很大,反之,当某个节点的服务能力较差时,它将无法在数据块的播放时间之前将数据块传输至请求节点,其引用计数会不断累加,当达到一个门限值,说明该伙伴节点的服务能力已经不适合作为请求节点的伙伴节点,应该对伙伴节点集合进行更新,其中,伙伴节点的服务能力体现为多个方面,例如节点采取的处理方式、节点的处理速度、节点的硬件设施及节点的软件资源等。
另外,当前数据块是否到达以及到达时间这种反馈信息体现了网络状态,例如网络异构性、带宽波动和节点频繁加入或退出或者防火墙等。通过上面对引用计数的定义和对其操作过程可知,网络状态的体现由引用计数实现,由此可知,引用计数一方面体现了网络状态,另一方面引用计数的大小体现了伙伴节点的服务能力,通过对引用计数的操作过程可知,引用计数越小说明该伙伴节点的服务能力越强。调度节点是指为本地节点提供当前数据块的伙伴节点。
步骤103,向调度节点发送调度当前数据块的调度请求。
通过P2P流媒体网络,向调度节点发送调度请求,并将该调度节点的引用计数加1,等待接收调度节点发送的当前数据块。
采用上述技术方案,通过引入引用计数的概念,克服了已有调度算法存在的或者没有考虑节点能力或者没有考虑网络状态的缺陷,引用计数一方面体现了网络状态,另一方面体现了伙伴节点的服务能力,通过引用计数选择P2P流媒体网络中具有较佳服务能力的伙伴节点作为调度节点,以实现对流媒体数据的调度,因此,本实施例提供的流媒体数据调度方法,克服了网络状态对数据调度的影响,平衡了伙伴节点的服务能力,从数据需求上实现了节点间的负载均衡。
基于实施例一提供的技术方案,根据数据块编号查询本地节点的伙伴节点集合时,若伙伴节点集合存在持有当前数据块的伙伴节点,则持有当前数据块的伙伴节点形成伙伴列表;若伙伴节点集合中不存在持有当前数据块的伙伴节点,说明当前伙伴节点集合已经过期,则更新伙伴节点集合,然后重新根据数据块编号查询更新后的伙伴节点集合,并由持有当前数据块的伙伴节点形成伙伴列表,其中更新伙伴节点集合的操作,采用P2P网络中的现有技术,例如,各个节点定时以广播方式或者组播方式向P2P网络中广播节点自身信息。
采用上述技术方案,可以实现对过期伙伴节点集合的更新,确保本地节点能够找到调度节点,进而完成对当前数据块的调度。
基于实施例一提供的技术方案,当伙伴列表中引用计数最小的伙伴节点为多个时,即多个伙伴节点具有相同的最小引用计数,按照伙伴节点的路由顺序最近匹配原则从中选择距离本地节点最近的、引用计数最小的伙伴节点作为调度节点。
采用上述技术方案,在优先考虑引用计数最小的基础上,通过路由顺序最近匹配原则选择调度节点,可以解决当存在多个引用计数最小的伙伴节点时的调度节点的选择,保证了引用计数所达到的充分利用各个节点的空闲带宽,平衡各个节点的服务能力,最大限度的维护节点之间负载均衡的性能优势;同时,引入了网络路由因素,将调度节点的选择和维护与网络拓扑结构相结合,进一步考虑了网络状态,在不需要全局信息的情况下达到近似最优的调度。
图2为本发明实施例二提供的流媒体数据初始调度方法的流程图,本实施例的执行主体为本地节点,如图2所示,本实施例提供的流媒体数据初始调度方法包括:
步骤201,初始获取伙伴节点集合,并根据伙伴节点集合中伙伴节点的缓冲视图,确定本地节点的缓冲视图的初始数据块编号,并初始化伙伴节点的引用计数;
其中,初始数据块编号是指本地节点加入P2P系统时,请求调度的第一个数据块的数据块编号,用于初始化本地节点的缓冲视图。在初始化缓冲视图的同时,初始化伙伴节点的引用计数,即初始化所有伙伴节点的引用计数,通常将引用计数初始化为0,同时,完成本地节点和其伙伴节点之间的信息交互,例如,伙伴节点也会将本地节点的引用计数初始化为0、获取本地节点的缓冲视图的信息等。
步骤202,根据初始数据块编号查询本地节点的伙伴节点集合,获取拥有初始数据块的伙伴列表;
步骤203,确定伙伴列表中的一个伙伴节点作为调度节点;若伙伴列表中只有一个伙伴节点,则该伙伴节点即为调度节点;若伙伴列表中有多个伙伴节点时,由于初始化后,所有伙伴节点的引用计数都为0,此时,可从伙伴列表中随机选择一个伙伴节点作为调度节点,也可以根据路由顺序最近匹配原则,确定距离本地节点最近的伙伴节点为本地节点的调度节点。
步骤204,向调度节点发送调度初始数据块的调度请求,并将调度节点的引用计数加1。
本实施例提供的技术方案通过确定初始数据块编号以及将伙伴节点的引用计数初始为0,并确定调度节点,实现了初始化状态下本地节点进行流媒体数据的调度,从而保证了后续采用本发明实施例一提供的调度方法对流媒体数据进行调度时能够顺利执行。
在上述技术方案的基础上,对刚加入P2P网络的本地节点进行初始化时,需要确定初始数据块,即请求调度的第一个数据块,初始数据块选择的是否合适,将会影响后续数据块的调度过程,如果初始数据块选择的不合理,例如,若初始数据块选择的太靠近当前播放数据块,在后续调度过程中可能出现调度超前的情况,无法及时的完成数据块的调度,使播放过程卡顿;若初始数据块选择的很滞后当前播放数据块,则在后续调度过程中可能出现调度不到所需的数据块,同样使播放过程卡顿,甚至无法正常播放。
基于此,本实施例提供一种初始化本地节点的缓冲视图的方法,用以给出初始数据块合适的调度位置,该方法具体包括:
步骤2011,确定伙伴节点集合中伙伴节点的缓冲视图的上界值和下界值,其中,上界值为缓冲视图对应的最晚数据块的数据块编号,下界值为缓冲视图对应的最早数据块的数据块编号;
具体的,确定伙伴节点集合中持有本地节点要调度的流媒体数据的伙伴节点的缓冲视图的上界值和下界值,即缓冲视图存储的对应流媒体数据的数据块编号的较大值和数据块编号的较小值。当存在多个伙伴节点时,就会对应多个上界值和多个下界值。
步骤2012,将缓冲视图中的最小上界值与最大下界值做差,并生成一第一差值;
具体的,将多个上界值进行比较确定最小上界值,将多个下界值进行比较确定最大下界值,并将最小上界值和最大下界值做差,生成第一差值,所述第一差值表示各个伙伴节点持有的流媒体数据块的接近程度,且第一差值越大表示各个伙伴节点持有的流媒体数据块越接近,反之,表示各个伙伴节点持有的流媒体数据块的差距比较大。
步骤2013,当第一差值大于等于第一阈值时,将最大下界值加一第一数值,作为本地节点的初始数据块编号;
当第一差值大于等于第二阈值小于第一阈值时,将最大下界值作为本地节点的初始数据块编号;该步骤在各个伙伴节点所持有的数据块的差距较小时,保证本地节点调度尽可能多的流媒体数据块;
当第一差值小于第二阈值时,将最小上界值作为本地节点的初始数据块编号;该步骤在各个伙伴节点所持有的数据块差距较大时,保证本地节点优先调度较新的流媒体数据块,避免因调度滞后造成播放卡顿的情况。
具体的,第一阈值大于第二阈值,且第一阈值和第二阈值的确定与缓冲视图的大小有关,缓冲视图的大小对应于依次存储的流媒体数据的时间长度,流媒体数据的时间长度是指流媒体数据源每次提供的流媒体时长,例如一次为2分钟;其中,第一数值也与缓冲视图的大小有关。本实施例提供一种较佳的数据关系,当流媒体数据的时间长度为120s时,对应于缓冲视图的大小为120位,每位对应于1s的流媒体数据,此时,第一阈值确定为90,第二阈值为30,第一数值为30,以上数值为实现本实施例技术方案的较佳选择,但并不限于此,使用者根据本技术方案的实质,可以自行进行调整和设置。
采用上述技术方案,根据缓冲视图的大小和流媒体数据块的时间长度,确定第一阈值、第二阈值和第一数值,通过本实施例提供的方法可以对本地节点的缓冲视图设置合适的初始数据块编号,保证本发明实施例提供的流媒体数据调度方法对后续数据块调度的顺利进行,充分发挥本发明技术方案的性能优势。
图3为本发明实施例三提供的流媒体数据调度方法的流程图,如图3所示,本实施例提供的流媒体调度方法包括:
步骤301,从本地节点的缓冲视图中查询需要调度的当前数据块的数据块编号;
其中,缓冲视图存储有本地节点的数据块的存在状态,具体的,缓冲视图中第一个为0的数组位所对应的数据块即为当前数据块。
步骤302,判断当前数据块的数据块编号是否大于缓冲视图中最晚一个数据块编号,如果不大于,则执行步骤303,否则结束;
如果当前数据块的数据块编号大于缓冲视图中最晚一个数据块编号,说明要调度的当前数据块超前了,则应结束对该当前数据块的调度,可以重新选择需要调度的数据块,或者说明数据块的调度过程结束。
步骤303,根据数据块编号查询本地节点的伙伴节点集合,获取拥有当前数据块的伙伴列表;
步骤304,根据伙伴列表中伙伴节点的引用计数,确定调度节点;
当引用计数最小的伙伴节点为一个时,则该伙伴节点作为调度节点,当引用计数最小的伙伴节点为多个时,根据路由顺序最近原则,确定距离本地节点最近的引用计数最小的伙伴节点为调度节点。
步骤305,向调度节点发送调度当前数据块的调度请求,并将调度节点的引用计数加1,同时,计算当前数据块的播放时间和一预设时间门限之差,生成预定到达时间,其中,预设时间门限是根据当前数据块之前接收到的数据块的实际到达时间和播放时间,计算得出;
具体的,在本实施例的技术方案中,数据块的调度过程是基于单个调度节点实现的,如果该数据块在该数据块的播放时间之前未到达,则会造成流媒体数据播放的卡顿,影响用户的观看质量,因此,为了保证P2P网络中流媒体服务的质量,本实施例设置一预设时间门限,所述预设时间门限用于表示在一个数据块播放时间之前获取该数据块的安全时间门限,若到达播放时间和预设时间门限做差得出的预定到达时间时,数据块还没有到达,则表明该数据块存在无法在播放时间之前到达的风险,为避免此风险,本实施例提供一种解决办法,即步骤306所示。
步骤306,当前时间到达预定到达时间时,判断当前数据块是否到达,若未到达,则触发本地节点执行重新确定另一调度节点的操作;
当前时间到达预定到达时间时,若当前数据块未到达,说明该数据块存在无法在播放时间之前到达的风险,通过启动确定另一调度节点的操作,即向另一伙伴节点发送调度请求,以确保本地节点以较高的可靠性在播放时间之前获取当前数据块。
其中,预设时间门限是通过对当前数据块之前接收到的数据块的实际到达时间和播放时间之差取绝对值,然后求和取平均计算得出的,距离播放时间的一个平均时间值,体现了本地节点的伙伴节点的平均服务能力。
步骤307,记录当前数据块的到达时间,并判断到达时间是否在当前数据块的播放时间之前,若是,将调度节点的引用计数减1,并结束本次调度。
具体的,当当前数据块在播放时间之前到达,则说明调度节点的服务能力较佳,能够满足调度过程的需求,将该调度节点的引用计数减1,通过这种方式,可以简单有效的了解伙伴节点的服务能力,其中,一个伙伴节点的服务能力一方面与节点自身的处理能力有关,一方面与该节点到发送调度请求的本地节点之间的带宽情况有关。另一方面,由于当前数据块能否在播放时间之前到达,受多方面因素的影响,例如网络带宽、网络路由信息、防火墙的影响等,因此当前数据块能否在播放时间之前到达这一反馈信息体现了网络的当前状态,在本实施例中网络状态的体现具体由引用计数实现。因此,步骤307保证了引用计数能够体现网络状态和节点的服务能力,以便引用计数充分发挥其作用。但是,当当前数据块在播放时间之后到达时,说明调度节点的此次服务能力较差,此时,对应的引用计数不减1。
本实施例提供的流媒体数据调度方法,通过判断当前数据块是否是缓冲视图中最晚的一个数据块,解决了数据块调度超前或者调度结束的问题,通过引入预设时间门限和执行重新向另一伙伴节点发送调度请求的操作,避免了当前数据块无法在播放时间之前到达的风险,以及通过对引用计数的减1操作,使得引用计数充分体现了网络状态和伙伴节点的服务能力。因此,本实施例提供的流媒体数据调度方法具有以下技术效果:基于P2P网络,本地节点进行数据调度时,不测量和估算伙伴节点之间的带宽,完全基于自身情况去完成当前数据块的选定、调度节点的选择以及对调度节点服务超时等情况的处理,具有简单高效的特点;引入引用计数的概念,并基于此实现调度节点的选择,平衡了伙伴节点的服务能力,保证伙伴节点之间的负载均衡;同时,引入伙伴节点的路由信息,将调度节点的选择和维护与网络拓扑结构及伙伴节点实际带宽情况相结合,在不需要全局信息的情况下达到近似最优的调度;另外,基于引用计数,本地节点可以自收敛的根据其他节点的实际服务能力自动的完成对于流媒体数据块的请求,可以适应不同的网络状况。
基于上述技术方案,当经过几轮调度过程后,伙伴节点的引用计数超过一阈值时,可以认为该伙伴节点为不良节点,即不再具有满足本地节点的调度请求的能力,本实施例提供一种优选处理方式,通过更新伙伴节点集合,将该伙伴节点替换掉,以保证本地节点的伙伴节点集合具有最优的组播结构。
目前基于P2P的流媒体服务主要有直播和点播,用于实现用户间流媒体数据的实时传输与共享,实现直播和点播的关键是各节点之间数据块的调度,本发明实施例提供的上述技术方案,并未限制具体的应用环境,适用于直播和点播,下面以直播为例,对本发明技术方案进行详细、完整的说明。
在介绍具体的调度过程之前先对一些参数进行说明,具体如下:
伙伴节点集合(PartnerSet):是一个包含本地节点所有伙伴节点的集合,其中伙伴节点是指与本地节点直接相连有数据交互的节点;
缓冲视图(BufferMap):是一个存储本地节点的数据块的存在状态的数组,其中,若数组位为0,则表示数组位对应的数据块不存在,需要向伙伴节点调度,若数组位为1,则表示该数组位对应的数据块存在;
伙伴节点数目(PartnerNum):表示本地节点当前连接的伙伴节点数目;
当前数据块(nCurrBlock):当前要请求调度的数据块;
数据提供者(Supplier):表示可向本地节点提供当前数据块的伙伴节点;
数据块编号(Seq):表示数据块的数据块编号,与BufferMap数组中的数组位相对应;
请求数目(ReqNum[s]):表示本地节点已经向伙伴节点s发送调度请求但还没有收到的数据块的数目;当本地节点连接一个新的伙伴节点p,就将相应的ReqNum[p]设置为0;
最大请求数(MaxReq):表示本地节点可以同时向一个伙伴节点请求的数据块的最大数目,也就是已经发出调度请求但还没有收到的数据块的最大数目;
播放时间(PlayTime[n]):表示在缓冲视图中某个数组位对应的数据块n的播放时间;
到达时间(ArriveTime[n]):表示请求调度的数据块n的到达时间;
节点标识号(MMID):节点在整个网络中的唯一标识,由节点的IP地址、路由以及网络情况等生成。
为了完整的介绍本发明的技术方案,本实施例以刚加入P2P网络的节点为例,则本实施例提供的流媒体调度方法包括:
步骤401,初始化操作,将伙伴节点的请求数目初始化为0;在PartnerSet中伙伴节点的BufferMap中寻找当前直播节目的BufferMap的最小上界值和最大下界值;
步骤402,设定BufferMap的标准缓冲值,若BufferMap以s为单位,BufferMap的大小决定了节点所缓冲内容的时间长度。本实施例BufferMap的标准缓冲值为120s,即BufferMap数组有120位,每位对应1s的数据块,跟随直播数据的不断推送,BufferMap的缓冲值循环利用,即,BufferMap的1-120位对应于数据块编号1-120,之后,BufferMap的1-120位对应于数据块编号121-240,依次循环,直到数据块编号1-65535分别与BufferMap中的一位对应。
步骤403,若BufferMap的上下界极值之差大于90,则认为伙伴节点之间数据共享较为接近,则初始数据块编号等于BufferMap的最大下界值+30;否则,执行步骤404;
步骤404,若BufferMap的上下界极值之差介于30和90之间,则认为伙伴节点之间数据共享的差距较小,则初始数据块编号等于BufferMap的最大下界值;否则,执行步骤405;
步骤405,若BufferMap的上下界极值之差小于30,则认为伙伴节点之间数据共享的差距较大,则初始数据块编号则等于BufferMap的最小上界值;
上述初始数据块编号的设置是基于直播持续播放和数据安全的需要,上述方案可以保证直播数据调度过程的顺利实现,不会出现因超前或滞后而使直播画面出现卡顿现象。
步骤406,根据数据块编号查询本地节点的PartnerSet,获取拥有初始数据块的伙伴列表;
步骤407,随机确定伙伴列表中的一个伙伴节点作为调度节点;还可以根据路由顺序最近匹配原则选定调度节点,本实施例只是一个较佳举例,并不对此进行限。
步骤408,向调度节点发送调度初始数据块的调度请求,并将调度节点的请求数目加1,完成本地节点的初始化调度过程;其中,请求数目为引用计数的另一种表述。
步骤409,从本地节点的缓冲视图的起始位置查询第一个还不存在的数据块,将该数据块的数据块编号赋值给nCurrBlock;
具体的,通过一存储单元存储BufferMap的第一位对应的数据块编号,该存储单元跟随直播数据的推送进行实时更新,通过该存储单元可以确定BufferMap对应的数据块的数据块编号,这样可以在查询数据块的状态时确定数据块编号。
步骤410,判断nCurrBlock是否小于等于本地节点的缓冲视图的最晚一个数据块的数据块编号,如果小于等于,则执行步骤411,否则执行步骤417
步骤411,根据nCurrBlock,向PartnerSet询问拥有nCurrBlock对应的数据块的Buffermap的伙伴列表,若其不为空,则执行步骤412,否则,执行步骤415;
步骤412,从伙伴列表中,寻找ReqNum最小的Partner,若唯一存在ReqNum最小的Partner,则执行步骤413;若存在多个ReqNum最小的Partner,则执行步骤414;
步骤413,向该ReqNum最小的Partner发送调度nCurrBlock对应的数据块的调度请求,将该Partner的ReqNum自增1,执行步骤416。
步骤414,当存在多个ReqNum最小的Partner,比较带有节点路由信息的伙伴节点的MMID与本地节点的MMID,选择Partner的MMID与本地节点MMID差值最小的Partner,该Partner为路由距离本地节点最近的Partner,向该Partner发送调度nCurrBlock对应的数据块的调度请求,将该Partner的ReqNum自增1,转步骤416,。
步骤415,更新本地节点的PartnerSet,以获得最新的Partner信息,向PartnerSet询问拥有nCurrBlock对应的数据块的Buffermap的伙伴列表,若其不为空,则转步骤412,否则,则转步骤416。
步骤416,将nCurrBlock字段值自增1,然后转至步骤410,
步骤417,本次调度过程结束,等待下一次的调度。
基于上述技术方案,本实施例还提供了接收当前数据块的超时处理方法,具体包括:
步骤418,本地节点从伙伴节点P处收到数据块BufferMap[n],记录ArriveTime[n];
步骤419,若数据块BufferMap[n]的ArriveTime[n]不晚于其PlayTime[n],则伙伴节点P的ReqNum自减1,然后转步骤421;否则,转步骤420;
步骤420,如果伙伴节点P的ReqNum大于等于其最大请求数MaxReq,则更新本地节点的PartnerSet,以获得最新的Partner信息;
步骤421,正常返回。
具体的,本实施例提供的流媒体数据调度方法较为全面,但是对于初始调度并不是每次数据调度必须的,只有在节点初始加入P2P网络时才执行。下面给出对应于上述技术方案的伪代码,具体如下所示,其中,P(I)表示本地节点I的伙伴节点集合。
算法1:对应于上述步骤401-步骤405,用于本地节点I确定合适的初始数据块的请求位置,即调度缓冲视图的哪一位置对应的数据块。
“If PartnetSet(I)is not null then
For each node B∈PartnetSet(I)
Find BufferMap_Seq_Upper[min],BufferMap_Seq_Lower[max]
If BufferMap_Seq_Upper[min]-BufferMap_Seq_Lower[max]>90
then BufferMap_Seq[begin]=BufferMap_Seq_Lower[max]+30
Else if BufferMap_Seq_Upper[min]-BufferMap_Seq_Lower[max]<90
AND BufferMap_Seq_Upper[min]-BufferMap_Seq_Lower[max]>30
then BufferMap_Seq[begin]=BufferMap_Seq_Lower[max]
Else if BufferMap_Seq_Upper[min]-BufferMap_Seq_Lower[max]<30
then BufferMap_Seq[begin]=BufferMap_Seq_Upper[min]
End if
End if”
算法2:对应于上述步骤409-步骤417,用于实现本地节点I希望获得数据块n时,确定哪一个伙伴节点作为调度节点,并从中获取数据块n。
“If PartnetSet(I)is not null then
For ea ch node B∈PartnetSet(I)
If B_BufferMap_Seq[n]=1 then
Insert B into W(n)
End if
If SIZE[W(n)]>1 then
For each node A∈W(n)
Find Ap=min[ReqNum[A]
If there is only one min[ReqNum[A]]then
Send request SEQ(n)toAp
ReqNum[Ap]++
Else
For each node A∈W(n)
Find Aq=min[Ap(MMID)-I(MMID)]
Send request SEQ(n)to Aq
ReqNum[Aq]++
End if
Else if SIZE[W(n)]=1 then
For node A∈W(n)
Send request DATA_SEQ(n)to A
ReqNum[Ap]++
Else if SIZE[W(n)]=0 then
Call Partner Refresh
End if
End if”
算法3:用于本地节点实现对数据块获取以及超时时的处理。
数据块未到时:
“For each data segment n in BufferMap
If PlayTime[n]-CurrentTime<=τthen
Call算法2
End if”
本地节点I处理收到的数据块以及超时处理:
“While incoming data segment BufferMap[n]
If ArriveTime[n]<=PlayTime[n]then
Find Send par tner Ap in W(n)
ReqNum[Ap]--
Else if ArriveTime[n]>PlayTime[n]then
Find Send partner Ap in W(n)
If ReqNum[Ap]>MaxReq then
Call Partner Refresh
End if
End while”
本实施例提供的技术方案,基于BufferMap的最小上界值和最大下界值和标准缓存值,设置合理的初始数据块编号,实现对刚加入P2P网络的本地节点的初始化;基于请求数目,选择服务能力较佳的伙伴节点,完成对所需数据块的调度,充分考虑伙伴节点的服务能力和网络状态;同时,给出了处理当前数据块的延时情况的方法,避免当前数据块无法在播放时间之前到达的风险,确保本地节点以较高的可靠性获取直播所需的数据块,保证了直播画面的流畅。
基于本发明实施例的上述技术方案,本实施例从调度节点一侧提供一种数据块安全保留方法,具体的,为了防止在向调度节点请求某一数据块时该数据块已经移出滑动窗口,因此,除了在节点的缓存中保存滑动窗口中的数据外,还将保留滑动窗口外的若干个数据块作为安全数据块,以防止出现上述问题,在本实施例中,保留的安全数据块的个数为15,但并不限于此。该方法与本发明提供的上述技术方案相结合,能够进一步保证数据块被本地节点成功调度,使流媒体正常播放,保证用户的观看质量。
图4为本发明一实施例提供的流媒体数据调度装置的结构示意图,该装置可以设置于本地节点设备中,如图4所示,本实施例提供的流媒体数据调度装置包括:获取模块41、第一确定模块42和发送模块43。其中,获取模块41用于查询本地节点的缓冲视图,获取需要调度的当前数据块的数据块编号,并根据获取的数据块编号,从本地节点的伙伴节点集合中获取拥有当前数据块的伙伴列表,其中,缓冲视图存储有本地节点的数据块的存在状态和数据块对应的数据块编号;第一确定模块42用于根据每个伙伴节点的引用计数,从获取模块41获取的伙伴列表中,确定调度节点并将该结果提供给发送模块43,以便发送模块43向该调度节点发送调度请求,本地节点等待接收该调度节点发送的请求调度的当前数据块。
具体的,第一确定模块42包括第一判断单元和第一确定单元,其中第一判断单元用于判断伙伴列表中引用计数最小的伙伴节点的个数,并将判断结果输出给第一确定单元,第一确定单元根据第一判断单元的输出的结果确定调度节点,当引用计数最小的伙伴节点为一个时,确定该伙伴节点为调度节点;当引用计数最小的伙伴节点为多个时,确定引用计数最小的伙伴节点中距离本地节点路由顺序最近的伙伴节点为调度节点,第一确定单元将确定结果提供给发送模块43。
本实施例提供的流媒体数据调度装置,通过获取模块获取可提供服务的伙伴节点,基于引用计数,通过第一确定模块进一步从可提供服务的伙伴节点中确定出服务能力较佳的调度节点,最后由发送模块发送调度请求,完成当前数据块的调度,因此,本实施例的技术方案具有以下技术效果:通过引入引用计数的概念,同时考虑了网络状态和伙伴节点的服务能力,保证所选中的调度节点是服务能力最佳的,在保证控制开销和网络逻辑拓扑的前提下,确保P2P流媒体的服务质量;通过选择引用计数最小的伙伴节点,充分利用了各个节点的空闲带宽,平衡了节点的服务能力,最大限度的维护了节点之间的负载均衡。
图5为本发明又一实施例提供的流媒体数据调度装置的结构示意图,如图5所示,在上述实施例的基础上,本实施例提供的调度装置还包括:第一计数模块50、第二确定模块51、记录模块52、判断模块53、第二计数模块56、计算模块54和判断触发模块55。
其中,第一计数模块50与发送模块43连接,当发送模块43向调度节点发送调度请求后,根据发送模块43的控制指令将调度节点的引用计数加1;第二确定模块51与获取模块41连接,用于对刚加入P2P网络的本地节点进行初始化,在获取伙伴节点集合时,根据伙伴节点集合中伙伴节点的缓冲视图,确定本地节点的缓冲视图的初始数据块编号,以便于完成对本地节点的初始调度,其中,初始数据块编号为本地节点请求调度的第一个数据块的数据块编号。
记录模块52用于记录当前数据块到达时的到达时间;判断模块53与发送模块43连接,用于判断记录模块52记录的到达时间是否在当前数据块的播放时间之前,并将判断结果发送给第二计数模块56;如果判断结果为是,则第二计数模块56将调度节点的引用计数减1,且第二计数模块56与第一确定模块42连接,在第一确定模块42确定调度节点时,将本地节点的伙伴节点的引用计数提供给第一确定模块42,本实施例仅是提供了一种获取伙伴节点引用计数的方式,但并不限于此。
计算模块54由发送模块43发送调度请求时启动,计算当前数据块的播放时间和一预设时间门限的差,得出当前数据块的预定到达时间,并将该值提供给判断触发模块55。
判断触发模块55判断当前时间到达预定到达时间时,当前数据块是否到达,如果没有到达,则触发本地节点执行重新确定另一个调度节点的操作,即确定另一伙伴节点为调度节点,并向该新确定的调度节点重新发送调度请求。其中,预设时间门限是通过对当前数据块之前接收到的数据块的实际到达时间和播放时间之差取绝对值,然后求和取平均计算得出的,距离播放时间的一个平均时间值,体现了本地节点的伙伴节点的平均服务能力。具体的上述重新选择调度节点、重新发送调度请求的方法,可以仍采用本发明提供的调度方法,因此,本实施例中判断触发模块55与获取模块41连接,以实现另一调度过程。
进一步的,第二确定模块51包括第二确定单元、第二计算单元、第二比较单元和第二判定单元。其中,第二确定单元用于确定伙伴节点集合中伙伴节点的缓冲视图的上界值和下界值,其中,上界值为缓冲视图对应的最晚数据块的数据块编号,下界值为缓冲视图对应的最早数据块的数据块编号;第二计算单元对第二确定单元确定的最小上界值与最大下界值做差,并生成一第一差值;第二比较单元将第二计算单元提供的第一差值与第一阈值和第二阈值进行比较,并将比较结果提供给第二判定单元;第二判定单元根据该比骄结果确定初始数据块编号,具体为:当第一差值大于等于第一阈值时,将最大下界值加一第一数值,作为本地节点的初始数据块编号;当第一差值大于等于第二阈值小于第一阈值时,将最大下界值作为本地节点的初始数据块编号;当第一差值小于第二阈值时,将最小上界值作为本地节点的初始数据块编号。
本实施例提供的流媒体数据调度装置可用于执行本发明实施例提供的流媒体数据调度方法,故在此不再赘述流媒体数据调度装置的实现过程。本实施例提供的流媒体数据调度装置,在上述实施例的基础上,通过增加第二确定模块,基于缓冲视图的最小上界值和最大下界值,设置合理的初始据块编号,实现对刚加入P2P网络的本地节点的初始化;通过其他模块对当前数据块未能按时到达本地节点的风险情况进行处理,避免当前数据块无法在播放时间之前到达的风险,确保本地节点以较高的可靠性获取直播所需的数据块,保证了直播画面的流畅。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。