分布式多传输信道网络直播视频并行分发方法及系统
技术领域
本发明涉及计算机网络视频分发技术,尤其涉及分布式多传输信道网络直播视频并行分发方法及系统。
背景技术
随着互联网的用户不断增多,用户对音视频直播画质/音质的要求不断提升,直播内容的码流不断提升,同时在线人数也不断增加,带宽和并发在线人数的要求渐渐成为制约这项业务的瓶颈。以1Mbps的码流计算,1G的带宽仅能支撑1000个用户并发,而要保证1百万用户的同时在线,就需要1000G的带宽,对于单一的直播节目来说,这个费用是非常高昂的。另一方面,1百万的并发流式访问,对普通的服务器的性能来说也是一个不可能完成的任务。所以当前通常采用服务器分层加客户端p2p的技术来分担并发访问的人数同时将服务器的一部访问转移到客户端,从而减轻访问压力和降低带宽的消耗。例如专利CN201510150133.1就采用了这种CDN+P2P的架构,播放器(客户端)之间作为P2P分组,而服务器之间采用源服务器+CDN分发服务器这样的分层组网。源服务器将直播内容复制若干份,分发到边缘的CDN服务器,每个CDN服务器负责一部分的用户访问,同时通过部署P2P的支撑服务器(tracker,NAT穿透),将客户端组成不同的网络,客户端之间可以互相访问,也可以直接请求CDN服务器。
基于这种架构,进一步的可以将CDN服务器和P2P支撑服务器按照运营商网络/或者是地域划分为不同的自治域(AS),形成若干p2p子网,如专利CN201510006008.3中所提及的组网方式。AS内部是域内连接,AS之间还有少量数据传输,属于域间连接。
在云计算虚拟化领域,通过虚拟化的技术将分布式的闲散的计算资源,存储资源组织起来,通过网络路由交换,再封装成一个整体并虚拟成一个单一的虚拟机给用户使用,也是当前的一个热点,例如专利CN201410468455.6,就提供了一种虚拟化的存储解决方案。通过在服务器上安装虚拟器的控制单元,控制本地的文件系统,并接受来自网络的集中调度,若干服务器的存储被虚拟化成一个大的存储,对外提供统一的访问接口。即外部调用存储访问的接口,或者是计算的接口,通过集中调度,将存储访问或者是计算需求分配给某一个节点,完成任务后再返回结果给接口。
以上的虚拟化方案针对的是存储系统,也有方案是针对带宽+存储,例如论文“Anew distributed storage scheme for cluster video server:Journal of SystemsArchitecture 51(2005)79–94”所提出的方案,通过切片方式,将视频分布式的存储到不同的节点,通过一个虚拟的服务器响应来自客户端的控制消息(如rtsp封装),然后再由具体的存储节点通过RTP协议将数据传输给客户端。首先当有客户端请求时,虚拟服务器根据请求的视频链接,得到按照实际存储节点的情况,得到一个播放路径,然后按照播放路径,依次通知对应的存储节点将数据以rtp协议发送给客户端,与此同时,继续保持和客户端的rtsp控制通信。通过这种方式,达到了将大文件化整为零,且分时复用不同节点带宽的作用。
当前有一种新型的解决方案是,依托于布置在互联网最后一英里的特殊设备,具体的如某种可以利用上下行富余带宽的网络接入路由器,或者是装有虚拟化程序并且能上网的电子设备等,其特征是对计算能力和存储能力要求不高,但是在运营商的带宽利用上,处于用户侧个人电脑的上一层,能够长时间稳定接入互联网,故而能够更好的利用运营商的上/下行的带宽。将这些设备通过虚拟化的方式集中起来,提供各种可以定制化的服务。在本专利中,这些设备都用RD表示(real device),他们一起组成一个VM(virtualmachine).RD在本专利中被看成是一个提供网络服务的容器,即它可以安装任何满足要求的网络服务程序(RD APP),另一方面它又是一个网络带宽的输出单元,就是说RD可以向互联网提供带宽资源。在这些RD上都安装有一个agent代理程序,其作用是监控RD的状态,主要是上下行带宽状态,获取RD的运行负载,向RD发送指令。在agent的上边,是虚拟化的API,是连接RD和虚拟化调度单元的桥梁。装有相同服务程序的RD会被组织成一个大的虚拟服务器,提供上文所述的网络服务。对于通过网络协议(rtmp/http/rtsp/hls/p2p协议)访问VM的客户端来说,他感受到的就是一个真实的服务器。对于使用上层UI界面的调用者来说,他管理的也就是一个个的真实服务器。
在具体应用中,如果想要利用VM来提供音视频直播加速,可以将这些虚拟服务器作为一个虚拟化应用层,并加入到传统的CDN-P2P网络中,替代了原有架构中CDN层和播放器的数据传送功能。这里VM还可以和云端的辅助系统进行通信,获取来自源站的信息,如视频直播内容源,然后VM就成为一个虚拟的CDN直播分发服务器,向播放器提供比如rtmp,http,hls,rtsp,dash服务等,也包括p2p的传输服务等。在实现上,按照不同的运营商区域,配置若干虚拟服务器,作为边缘的CDN节点,其上层是原有的真实CDN服务器层,这里只需要一条链路就可以把视频内容下发到虚拟服务器上,再由虚拟服务器转发给客户端。在实际使用中,为保证系统的健壮性,可以再增加若干条链路,保证系统可以稳定工作。即便如此,这种架构也将原有对CDN服务器的依赖,转变为对虚拟服务器的使用,大大降低了CDN服务器的带宽消耗。由于RD设备通常是可以保证24小时长期联网的,在加上通过在AS级别对客户端进行全局调度,由AS调度逻辑判断负载均衡,RD设备的可达性,自动选取最优的RD设备向客户端提供服务,还可以在VM的整体带宽不足的情况,自动实现VM的扩容,网络服务的可用性整体上看不低于传统架构中的CDN服务器。
此外,这种虚拟服务器除了作为CDN的音视频直播加速外,还可以作为一种通用的解决方案,提供任何带宽消耗型的网络服务,例如在VM上安装一个应用,实现视频拆包/打包/mux/demux/解码/编码等,它又可以成为一个源视频服务器,接收来自客户端编码器的推送流,将其转码打包为其它的格式发送给其它CDN节点。还比如通过更换RD上的APP,VM还可以提供vpn,proxy服务等等。由于选用不同的RD APP程序就可以提供不同的功能,客户端事实上只依赖于RD APP的选用,切换APP远比更改服务器端的架构要容易。
目前在互联网上有大量的终端设备具有一个共同的特点,就是具备一定的计算能力,可以运行第三方程序,其上行带宽利用率很低。比如智能路由器,移动终端,甚至接入互联网的家用PC。通过虚拟化技术,在这些设备上安装第三方代理程序,通过全局的虚拟化调度接口控制代理程序,将这些设备上闲置的上行带宽聚合起来,统一管理,从而实现向其他互联网用户分发内容的目标。但是如果将这些带宽用于音视频直播,情况就会变得复杂。
这是因为首先音视频直播要求有持续稳定的带宽,如果可用带宽波动大,比如某一时刻,RD设备的所有者上传一个大文件到网络上,就有可能导致该设备可用上行带宽减少,那么就会体现为使用该设备上行带宽收看直播的用户观看体验下降,延迟,缓冲次数多,卡顿等等。除此之外,相对于高质量的直播码流,这些设备所能提供的上行带宽是有限的,甚至有时直播码流比这些设备的可用上行带宽上限还要高,这时,作为一个单个的RD设备,已经无法起到带宽放大的作用。
发明内容
为了解决上述技术问题,本发明提出了一种分布式多传输信道网络直播视频并行分发方法,对网络视频直播进行拆分,传输,重组,本发明的方法可以解决用户日益提高的视频质量要求和现有网络带宽虚拟化解决方案中上行节点带宽不足或是不稳定的矛盾。这种拆分的好处是通过降低对RD设备带宽分配的粒度(变为原始直播流的若干分之一),能更好的调度RD设备,抵抗突发带宽波动。
本发明是这样实现的:分布式多传输信道网络直播视频并行分发方法,包括:
S1、将视频直播流切分成多个子片;其中,所述子片包括普通子片和关键帧子片;
S2、以所述子片为单位将视频直播流推送到CDN网络的边缘节点,调度虚拟机内的不同的物理设备RD传输不同的切片分组;
其中,所述虚拟机内设置有若干个物理设备RD,所述物理设备RD用于将上下行富余的带宽集合起来;所述切片分组为对所述子片进行分组得到;每个切片分组形成一个子流;
在同一个虚拟机内部按照预先配置的子流数目选取RD分组,所述物理设备RD选取和分发与所述RD分组对应的子流;
S3、客户端发出直播url请求,获取用于描述直播url的SDP文件;其中,所述SDP文件包括每个子流对应的RD节点列表;
S4、客户端根据所述子流对应的RD节点列表选取一个或多个物理设备RD分别进行子流请求并获取所述子流;
S5、客户端拆除获取的所述子流的内部协议头,对所述子流进行拼装。
进一步地,步骤S1中还包括:将视频直播流中的关键帧子片单独分组,将剩余数据按时间等分的方式或按码流等分的方式等分为若干个普通子片,并进行编号;对所述关键帧子片进行单独编号;为每个子片增加一个内部协议头作为索引头;其中,所述关键帧片段包括直播流的元数据分片,所述元数据分片不需要加内部协议头。
进一步地,步骤S4包括:所述客户端通过P2P方式与其他客户端建立P2P连接,向其他客户端请求缺少的子流。
进一步地,所述单个子流对应的码率至少小于所述物理设备RD所能提供的上行带宽的2/5。
进一步地,所述SDP文件还包括子流的分割数目、每条子流的子频道编号、分组编号、分组类型和视频直播流的元数据。
本发明还提供了一种分布式多传输信道网络直播视频并行分发系统,包括:
切分模块,用于将视频直播流切分成多个子片;其中,所述子片包括普通子片和关键帧子片;
分发模块,用于以所述子片为单位将视频直播流推送到CDN网络的边缘节点,调度虚拟机内的不同的物理设备RD传输不同的切片分组;
其中,所述虚拟机内设置有若干个物理设备RD,所述物理设备RD用于将上下行富余的带宽集合起来;所述切片分组为对所述子片进行分组得到;每个切片分组形成一个子流;
在同一个虚拟机内部按照预先配置的子流数目选取RD分组,所述物理设备RD选取和分发与所述RD分组对应的子流;
请求模块,用于客户端发出直播url请求,获取用于描述直播url的SDP文件;其中,所述SDP文件包括每个子流对应的RD节点列表;
获取模块,用于客户端根据所述子流对应的RD节点列表选取一个或多个物理设备RD分别进行子流请求并获取所述子流;
拼装模块,用于客户端拆除获取的所述子流的内部协议头,对所述子流进行拼装。
进一步地,所述切分模块包括分组单元,所述分组单元用于将视频直播流中的关键帧子片单独分组,将剩余数据按时间等分的方式或按码流等分的方式等分为若干个普通子片,并进行编号;对所述关键帧子片进行单独编号;为每个子片增加一个内部协议头作为索引头;其中,所述关键帧片段包括直播流的元数据分片,所述元数据分片不需要加内部协议头。
进一步地,所述获取模块包括:所述客户端通过P2P方式与其他客户端建立P2P连接,向其他客户端请求缺少的子流。
进一步地,所述单个子流对应的码率至少小于所述物理设备RD所能提供的上行带宽的2/5。
进一步地,所述SDP文件还包括子流的分割数目、每条子流的子频道编号、分组编号、分组类型和视频直播流的元数据。
本发明通过对一个直播流进行比较精准的拆分,将实时直播流变成了若干个子流,然后再通过CDN和虚拟化的传输通路进行分别传输,最后在播放器端进行重组。通过将一个原始的直播流进行更细粒度的划分,使得每个子流所需要的带宽变为原值的若干分之一,在本发明所描述的虚拟化分发网络中能更好的调度和管理。本发明的方法可以解决用户日益提高的视频质量要求和现有网络带宽虚拟化解决方案中上行节点带宽不足或是不稳定的矛盾。通过降低对RD设备带宽分配的粒度,能更好的调度物理设备RD,抵抗突发带宽波动,使客户端播放视频时更加流畅,增强用户体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本发明实施例提供的分布式多传输信道网络直播视频并行分发方法的流程图;
图2是本发明实施例提供的分布式多传输信道网络直播视频并行分发方法中对视频流切分的示意图;
图3是本发明实施例提供的分布式多传输信道网络直播视频并行分发系统的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一:
请参见图1,本发明实施例提供了一种分布式多传输信道网络直播视频并行分发方法,包括:
S1、将视频直播流切分成多个子片;其中,所述子片包括普通子片和关键帧子片;
S2、以所述子片为单位将视频直播流推送到CDN网络的边缘节点,调度虚拟机内的不同的物理设备RD传输不同的切片分组;
其中,所述虚拟机内设置有若干个物理设备RD,所述物理设备RD用于将上下行富余的带宽集合起来;所述切片分组为对所述子片进行分组得到;每个切片分组形成一个子流;
在同一个虚拟机内部按照预先配置的子流数目选取RD分组,所述物理设备RD选取和分发与所述RD分组对应的子流;
S3、客户端发出直播url请求,获取用于描述直播url的SDP文件;其中,所述SDP文件包括每个子流对应的RD节点列表;
S4、客户端根据所述子流对应的RD节点列表选取一个或多个物理设备RD分别进行子流请求并获取所述子流;
S5、客户端拆除获取的所述子流的内部协议头,对所述子流进行拼装。
本发明提出的方法,具体的是应用于背景技术中所述的针对带宽虚拟化的直播场景中。通过将视频的直播流按照需要拆分成若干子流,然后再通过虚拟化API的管理,将某个虚拟机所管理的所有终端节点拆分成若干子集合,每个子集合负责分发一条子流。对于视频内容消费端,首先通过第一次请求,得到一个直播流的描述信息SDP(sessiondescription protocol)文件,里边记录了整个直播流的拆分情况,各个子流的描述情况,以便于消费端去获取各条子流并拼接成一个完整的直播流播放。本发明主要描述直播流的拆分,分发,以及客户端对子流的获取和拼接方法。
首先是拆分方法:
拆分直播流的目的是为了将直播流尽可能的等分成若干子流,然后起到降低单个子流码率,使其远小于终端RD设备所能提供的上行带宽(如至少小于终端RD设备所能提供的上行带宽的2/5),从而达到抵抗突发的RD设备可用带宽变少的作用。这个子流码率的上限选取,由两个因素决定,第一个是RD设备的平均可用上行带宽AvgB,子流码率至少要是AvgB的1/2,这样,RD接受一路子流后,至少可以向外输出两路子流,起到了带宽放大的作用;另一个因素是需要抵抗RD设备的突发上行流量的影响,需要再预留一部分余量,在这里,这个余量带宽是由RD设备使用行为分析所得到,不同的RD设备,这个余量值并不一致。通过化整为零,达到仅利用低端低上行带宽设备就可以对高清直播加速的效果。具体的,按照内部传输协议和编码方式的不同,可以采用按时间等分,或者是按分片大小等分的办法,还有考虑关键帧的分割算法。
按时间等分,就是以1秒为单位,将每秒钟的原始直播流均分为N个子片。假如N=3,则要求分成3个子流,那么每当积累的数据超过1/3秒,就切一个子片。
按分片大小等分,那么就是按码流平均,假设码流是M,需要均分为N片,则每当收集的流数据超过M/N,则生成一个切片。比如码流是1000kbps,那么当积累的数据超过333kb后就切一个子片。
考虑关键帧的分割算法,由于视频关键帧通常远大于其他的帧,可以将关键帧单独分到一组,然后剩余的数据按照按时间戳或者分片大小的方案再等分,否则单纯按照时间或者大小等分,会造成含关键帧的子片大小远大于其他子片,达不到均分的目的。即只要收到关键帧,就只为关键帧生成一个切片,也就是关键帧子片,其他的数据再按照时间或者是大小来进行等分。具体的,如果需要N(N>=3)等分,那么就是关键帧在一组,然后剩下的数据做N-1等分。但是由于关键帧的特殊性,其编号规则不能和普通帧一样,需要单独编号。这是因为,如果切关键帧时,普通帧的大小还不够成为一个新的子片,那么在复原时,关键帧就需要插入到这个后生成的普通子片中,而此时如果不独立编号,那么关键帧的编号就会比普通子片的要小,不利于后边播放器复原直播流。
从收到直播流开始,对所有子片从1开始编号,每切一个子片,编号加1。如果是针对关键帧单独分组,则采用独立编号,也是从1开始,每切一个关键帧,编号加1。特别的,直播流的元数据,如音视频的解码参数,直播流自带的描述信息,单独切成一个分片(子片)。对每个子片加一个内部协议头,协议头提供的信息包括但不限于:切片编号,起始时间戳,所属的直播流标识,切分方案,是否是关键帧分组还是普通分组等。特别的,元数据分片不需要加内部协议头,它通过不同于其他子片的方式分发。图2是一个切分的示意图。其中A表示音频帧,V表示视频帧,hdr表示新增加的切出的子片的头部。
分发方法:
首先以切片为单位将直播流推送到CDN网络的边缘节点,一个切片对应一个子片,然后通过虚拟化API调度不同RD节点去传输不同的切片分组,由于切片基本是等分的,所以分组可以由取模的方法决定。即分组编号=切片编号mod子流数目,例如子流的数目是3,那么分组编号就是切片编号对3取模得到。对于纯关键帧分组,则就是独立编号,作为一个特殊分组,不和普通分组混淆。推送的方法,和普通的完整的直播流的推送方法一样,而选择RD分组的方法,则是在同一个VM虚拟机内部再按照运维配置的子流数目N值,决定如何选取RD的分组。一旦划分完毕,RD分组只会去选取和分发自己这个分组所对应的子流。
将每个单位时间内(1s)的视频流切分为若干个切片,每个切片有一个协议编号,而且这个编号是连续增长的(普通帧所在的切片)。
所以一个直播流切完了以后会是“1,2,3,4,5,6……”这样的编号序列,且会一直增长。而且如果每s切三片的话,编号“1,2,3”是第1s的数据,编号“4,5,6”是第2s的数据,以此类推。
即按照取模的办法,从上述序列中选取一批编号的切片,作为一个子流,并用不同的信道分发。
如:
子流1的子片编号:1,4,7,10….
子流2的子片编号:2,5,8,11….
子流3的子片编号:3,6,9,12….
这里用子流来表述,是因为每个子流是由不同协议编号的切片所组成,且会一直增长。
另外如上所述,每个子流有一个独立的编号,包含了一组编号一直增长的切片,这些切片的共同特征是他们的编号取某个模时,值相等。
并且这个子流编号对应了不同的传输信道,并在SDP里进行区分。即SDP只会给出子流的获取路径。
客户端请求及响应,以及拼接方法:
首先客户端拿到的是一个完整的直播url,这个地址是一个虚拟地址,标识这个直播流,客户端向服务器发出直播url请求,得到的是一个对于直播url进行描述的SDP文件。这个文件里会给出的数据包括子流的分割数目,每条子流的子频道编号,分组编号,分组类型,每条子流所对应的RD节点列表,也可能会包括直播流的元数据或者是元数据所对应的RD节点列表等。如果这里把元数据也通过某一组RD节点下发,这样在进行虚拟化API调度时,会独立给出一个RD分组来分发元数据。客户端在获得SDP文件后,首先会去获取元数据,接着会按照所有子流所对应的RD节点列表,从中选择一个或多个RD设备分别进行子流的请求。客户端还可以通过P2P的方式与其它客户端建立P2P连接,直接按编号请求缺少的子流切片数据。另一方面,客户端内部维护一个播放窗口,将获取到子流拆除内部协议头部,进行拼装。
如果子流的切分方法是不考虑关键帧分组的,则直接按子切片编号顺序排列,依次填到播放窗口的对应位置。如果有缺失造成不连续,就再次请求,和传统的P2P-CDN直播方式类似,将窗口分区,紧急需要立即使用的数据从RD节点获取,非紧急数据从其他客户端获取。对于数据缺失或者异常情况的处理也和传统方法相同,如重传,忽略,窗口直接略过缺失数据,从下一个关键帧开始播放等等。
如果子流的切分方法是包含关键帧分组的,那么需要进行多次排序,规则如下:
按照编号顺序对普通子流切片统一排序,这里是指所有的普通子流切片,不管它是哪个分组;
按照编号顺序对关键帧分组排序;
在普通切片和关键帧切片都连续的情况下,按照每一帧的时间戳先后决定装填到播放器播放缓冲区的顺序。这时的模型类似于将两个有序链表归并为一个有序链表问题。
在按序装填后,播放器正常播放。对于异常情况,数据缺失的处理和上文相同。
如图3所示,本发明还提供了一种分布式多传输信道网络直播视频并行分发系统,包括:
切分模块,用于将视频直播流切分成多个子片;其中,所述子片包括普通子片和关键帧子片;
分发模块,用于以所述子片为单位将视频直播流推送到CDN网络的边缘节点,调度虚拟机内的不同的物理设备RD传输不同的切片分组;
其中,所述虚拟机内设置有若干个物理设备RD,所述物理设备RD用于将上下行富余的带宽集合起来;所述切片分组为对所述子片进行分组得到;每个切片分组形成一个子流;
在同一个虚拟机内部按照预先配置的子流数目选取RD分组,所述物理设备RD选取和分发与所述RD分组对应的子流;
请求模块,用于客户端发出直播url请求,获取用于描述直播url的SDP文件;其中,所述SDP文件包括每个子流对应的RD节点列表;
获取模块,用于客户端根据所述子流对应的RD节点列表选取一个或多个物理设备RD分别进行子流请求并获取所述子流;
拼装模块,用于客户端拆除获取的所述子流的内部协议头,对所述子流进行拼装。
本发明通过对一个直播流进行比较精准的拆分,将实时直播流变成了若干个子流,然后再通过CDN和虚拟化的传输通路进行分别传输,最后在播放器端进行重组。通过将一个原始的直播流进行更细粒度的划分,使得每个子流所需要的带宽变为原值的若干分之一,在本发明所描述的虚拟化分发网络中能更好的调度和管理。本发明的方法可以解决用户日益提高的视频质量要求和现有网络带宽虚拟化解决方案中上行节点带宽不足或是不稳定的矛盾。通过降低对RD设备带宽分配的粒度,能更好的调度物理设备RD,抵抗突发带宽波动,使客户端播放视频时更加流畅,增强用户体验。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。