技术领域
本发明属于计算机领域,尤其涉及一种流媒体传输方法。
背景技术
流媒体是一种通过流式传输,在网络上传输音频或视频等多媒体信息的技术方案,其使得用户不必下载整个媒体文件就可以欣赏音频或视频,当客户端通过流媒体技术播放音频或视频时,只需要获取相应的一部分媒体数据,剩余的数据可以在后台继续等待下载,实现了多媒体信息的持续实时传输。
现有技术中,常常使用流媒体来进行实时视频直播,如果有大量的用户客户端同时打开一个流媒体,则流媒体服务器需要同时向这些客户端传输流媒体,这给流媒体服务器带来了极大的压力。现有技术中可以采用组播技术来解决这个问题,但是组播技术基于特定的组播协议,这些组播协议都需要网络路由器的支持,而网络上的路由器并不是都具有组播的能力。
发明内容
为了解决现有技术中的上述问题,本发明提供了一种流媒体传输方法。
本发明采用的技术方案具体如下:
一种流媒体传输方法,包括以下步骤:
步骤1:流媒体服务器接收各个客户端的流媒体请求,建立与各个客户端的连接,并记录当前连接的数量;
步骤2:如果当前连接的数量达到预定阈值以上,则所述流媒体服务器根据当前连接客户端的网络地址对当前连接客户端进行聚类;
步骤3:对于聚类结果中的任意一个类,设该类中有n个客户端,流媒体服务器向所述n个客户端发送请求,请求每个客户端测量与另外n-1个客户端之间的网络传输时间;
设n个客户端为C1,C2,……,Cn,则记客户端Ci测量的Ci到Cj的网络传输时间为T(i,j);1≤i≤n,1≤j≤n,且i≠j;
步骤4:每个客户端将其测量得到的网络传输时间发送给所述流媒体服务器,所述流媒体服务器计算客户端Ci和Cj之间的平均网络传输时间W(i,j),即
W(i,j)=(T(i,j)+T(j,i))/2;
所述流媒体服务器构建权重图,所述n个客户端构成了图中的n个顶点,任意一对顶点Ci和Cj之间具有一条权重为W(i,j)的边;
步骤5:所述流媒体服务器整理所述权重图,去掉所有权重大于权重阈值的边,然后再去掉图中的所有孤立点,得到包括m个顶点的无向连通图;
步骤6:对于所述权重图中剩下的m个顶点所对应的m个客户端,所述流媒体服务器分别测量到这m个客户端的网络传输时间;
步骤7:所述流媒体服务器选择步骤6中测量的m个网络传输时间的最小值,并确定该最小值所对应的客户端D1;
步骤8:所述流媒体服务器在该权重图中计算以D1为起点,且遍历所有顶点的最短路径;
步骤9:所述流媒体服务器将所述最短路径的相关信息发送给所述m个客户端,然后开始向客户端D1传输流媒体数据;
步骤10:当某个客户端接收到所述流媒体数据后,判断自己在该最短路径上是否具有后继客户端,如果有后继客户端,再判断所述后继客户端是否已经接收到了所述流媒体数据,如果没有接收到,则将所述流媒体数据转发给所述后继客户端。
进一步地,所述流媒体服务器面向互联网提供流媒体服务,所述流媒体服务包括视频直播或者音乐电台。
进一步地,所述网络地址是客户端的IP地址。
进一步地,同一类客户端的数量具有预定的上限值。
进一步地,如果某一类客户端的数量超过该上限值,则将该类客户端拆分为多个类,以保证每一类客户端数量不超过上限值。
进一步地,使用ping来测量客户端之间或者服务器与客户端之间的网络传输时间。
进一步地,基于传输数据测试的平均值确定客户端之间或者服务器与客户端之间的网络传输时间。
进一步地,所述流媒体服务器在与每个客户端建立连接时测量并记录与该客户端的网络传输时间。
进一步地,所述最短路径的相关信息包括所述m个客户端的网络地址,以及组成该最短路径的客户端序列。
进一步地,客户端基于所述客户端序列确定自己在该最短路径上的位置,以及自己的后继客户端。
本发明的有益效果是:降低流媒体服务器的负载,提高流媒体的传输效率。
附图说明
此处所说明的附图是用来提供对本发明的进一步理解,构成本申请的一部分,但并不构成对本发明的不当限定,在附图中:
图1是流媒体传输的系统结构图。
具体实施方式
下面将结合附图以及具体实施例来详细说明本发明,其中的示意性实施例以及说明仅用来解释本发明,但并不作为对本发明的限定。
参见附图1,其示出了本发明流媒体传输的系统结构。该系统包括一个流媒体服务器和多个客户端,所述流媒体服务器和客户端都连接到互联网,通过互联网相互通信并传输流媒体数据。
所述流媒体服务器面向互联网提供流媒体服务,例如视频直播或者音乐电台等。所述客户端可以远程连接到所述流媒体服务器,通过该连接接收流媒体数据,同时也可以播放该流媒体数据。
基于上述系统结构,下面详细说明本发明的方法步骤。
步骤1:流媒体服务器接收各个客户端的流媒体请求,建立与所述客户端的连接,并记录当前连接的数量。
在流媒体服务器开始提供流媒体服务之后,连接的客户端数量从零开始增长,在这个过程中,会不断有客户端连接流媒体服务器,也会有客户端在连接之后又断开连接,因此实际连接的客户端数量是在不断变化的过程中。流媒体服务器可以基于当前的连接状况,确认并记录当前连接的数量。
在连接数量小于预定阈值时,流媒体服务器可以直接向每个客户端传输流媒体数据,而无需执行本发明的方法。例如,如果只有2个客户端连接,此时流媒体服务器可以直接向这两个客户端传输数据,不会有任何负载压力,因此无需进行任何特殊方法的处理。所述预定阈值可以根据流媒体服务器的具体情况设置,服务器的处理能力越强,带宽越高,则预定阈值可以设置的越高。当连接数量达到阈值以上时,则执行后续步骤。
步骤2:如果当前连接的数量达到所述预定阈值以上,则所述流媒体服务器根据当前连接客户端的网络地址对当前连接客户端进行聚类。
具体的,所述网络地址可以是客户端的IP地址,通常而言,基于IP地址可以估计客户端所在的区域,因此可以根据IP地址对客户端进行聚类,使得IP地址相近的客户端聚为同一类,每一类代表了实际位置相近的一批客户端。
为了方便后续处理,保证数据传输的可靠性,需要给同一类客户端的数量设置一个上限值,即每一类的客户端数量不得超过该上限值。在实际聚类过程中,如果某一类客户端的数量超过该上限值,可以将该类客户端拆分到多个类里,以保证每一类客户端数量不超过上限值。
为了方便说明,下面只针对聚类结果中的一个类进行说明,对于其他类可以执行相同的步骤。
步骤3:对于聚类结果中的任意一个类,设该类中有n个客户端(n最大不超过上限值),流媒体服务器向所述n个客户端发送请求,请求每个客户端测量与另外n-1个客户端之间的网络传输时间。
所述网络传输时间指的是数据从一个客户端传输到另一个客户端的时间,具体的,一个客户端如果需要测量与另一个客户端之间的网络传输时间,其可以简单的使用ping来测量信息的往返时间,将该时间除以2就是网络传输时间。如果需要更加准确一点,客户端也可以通过多次传输数据测试,取平均值作为网络传输时间。
假设n个客户端为C1,C2,……,Cn,则记客户端Ci测量的Ci到Cj的网络传输时间为T(i,j);1≤i≤n,1≤j≤n,且i≠j。
步骤4:每个客户端将其测量得到的网络传输时间发送给所述流媒体服务器,所述流媒体服务器计算客户端Ci和Cj之间的平均网络传输时间W(i,j),即
W(i,j)=(T(i,j)+T(j,i))/2
也就是说,将客户端Ci和Cj分别测量的两者之间的网络传输时间的平均值,作为估计得到的平均网络传输时间,即W(i,j)=W(j,i)。
至此,流媒体服务器实际上得到一张权重图,所述n个客户端构成了图中的n个顶点,任意一对顶点Ci和Cj之间具有一条权重为W(i,j)的边。
步骤5:所述流媒体服务器整理所述权重图,具体的,将所述权重图中,权重大于阈值的边都去掉,然后再去掉图中的所有孤立点。
如果某条边的权重过大,这意味着其对应的两个客户端之间的网络传输时间过长,不必考虑通过这两个客户端之间传输流媒体数据,因此可以去掉这条边。所述阈值是预先设置的,其表明两个客户端之间可接受的最大网络传输时间。
在去掉每个权重大于阈值的边后,所述权重图中可能出现孤立点,这意味该孤立点对应的客户端很可能并不是真正的与该类中其他客户端位置相近,因此可以从图中去掉孤立点。
最后,整理得到的权重图是一个无向连通图,且图中每条边的权重小于所述阈值,图中顶点的数量m满足m≤n。
步骤6:对于所述权重图中剩下的m个顶点所对应的m个客户端,所述流媒体服务器分别测量到这m个客户端的网络传输时间。
具体的测量方法可以与步骤3类似,该网络传输时间代表了流媒体服务器到客户端数据传输的快慢。
当然,流媒体服务器也可以在与每个客户端建立连接时就测量并记录与该客户端的网络传输时间,则此时只要从记录的数据中提取出来即可。
步骤7:所述流媒体服务器选择步骤6中测量的m个网络传输时间的最小值,并确定该最小值所对应的客户端。
为方便说明,记该最小值所对应的客户端为D1,该类中另外m-1个客户端为D2,D3,……,Dm。此时的权重图的顶点就是D1至Dm,并且客户端D1是其中与流媒体服务器传输数据最快的。
步骤8:所述流媒体服务器在该权重图中计算以D1为起点,且遍历所有顶点的最短路径。
具体的,本领域技术人员都了解,权重图中路径的长度指的是该路径中所有边的权重之和。步骤8中找到的最短路径是有向的,其以D1为起点,依次连接到各个顶点,保证每个顶点都在该路径上,从所有这样的路径中找到路径长度最小的作为最短路径。具体的最短路径计算方法可以采用现有技术中任意一种方法,例如深度优先搜索或者动态规划方法,
需要说明的是,有可能某个顶点在该最短路径中出现不只一次,但这不妨碍后续的处理。
步骤9:所述流媒体服务器将所述最短路径的相关信息发送给所述m个客户端,然后开始向客户端D1传输流媒体数据。
具体的,所述最短路径的相关信息包括所述m个客户端的网络地址,以及组成该最短路径的客户端序列。基于所述客户端序列,每个客户端可以知道自己在该最短路径上的位置,以及该最短路径上紧邻自己之后的客户端(即后继客户端)。如前所述,某个客户端在该最短路径中可能出现不只一次,则该客户端就有多个后继客户端。
步骤10:当某个客户端接收到所述流媒体数据后,判断自己是否具有后继客户端,如果有后继客户端,再判断所述后继客户端是否已经接收到了所述流媒体数据,如果没有接收到,则将所述流媒体数据转发给所述后继客户端。
这样,对于同一类中的客户端,流媒体服务器只需要将流媒体数据发送给其中的一个客户端(即最短路径的起点),然后该类中的客户端将会沿着最短路径向后继客户端转发所述流媒体数据。由于某些客户端在该最短路径中可能出现不只一次,因此需要判断后继客户端是否已经接收到了所述流媒体数据,实际上,当前客户端只需要分析该最短路径的客户端序列,如果后续客户端在该客户端序列中出现在当前客户端之前,则可以认为该后续客户端已经接收到了所述流媒体数据。
通过上述方法,流媒体服务器将客户端分为多个类,并向每个类中的一个客户端传输流媒体数据。对于未能分配到一个类的客户端(例如上述步骤5中去掉的孤立点),流媒体服务器仍然按照点对点的单播方式传输数据。在实际应用过程中,随着客户端的数量增加,孤立点的可能性会逐步降低,在大量客户端请求数据的情况下,绝大部分客户端都会被分配到一个类,因此大大降低了流媒体服务器的负载,提高了数据传输效率。
使用最短路径传输的一个可能问题是如果其中一个客户端离线,会导致该路径数据传输的断裂,因此流媒体服务器需要监测各个客户端的连接状态,例如使用心跳连接监测。当某个客户端断开连接时,及时调整该类中的传输路径,例如重新计算最短路径。在实际应用中,连接的客户端是动态变化的,流媒体服务器可以在预定时间或者在客户端变化了预定数量后,重新执行一遍本发明的方法。
以上所述仅是本发明的较佳实施方式,故凡依本发明专利申请范围所述的构造、特征及原理所做的等效变化或修饰,均包括于本发明专利申请范围内。