发明内容
有鉴于此,本发明提供一种视频下载方法,以解决大量客户端点播视频流时,现有技术中编码器和中间网络压力过大的问题;
与上述方法相对应,本发明还提高一种视频服务器以及监控中心系统。
为此,本发明采用如下技术方案:
一种视频下载的方法,包括:记录已获取视频流的若干客户端的地址;当接收到客户端a点播所述视频流的请求时,从所述已记录地址的客户端中至少任选两个客户端地址下发给客户端a;所述至少两个客户端地址中一个为生效地址,其余客户端地址为备份地址;客户端a利用获得的客户端地址,从所述客户端地址为生效地址的客户端下载视频流;
该方法还包括:
当生效地址失效后,设置其余一个备份地址为生效地址;
客户端a利用生效地址继续下载视频流。
所述每一客户端获取视频流的方式是:直接从编码器下载视频流;或者,利用另外一个已获得视频流的客户端m地址,从客户端m下载视频流。
当客户端i请求退出下载视频流时,或者,当客户端i发出的下载视频流请求的时间超过预置的老化时间时,删除客户端i地址记录。
还包括:将多个客户端地址记录进行分组,限制每组所包含客户端地址的数量在预置的阀值范围内。
还包括:按照客户端属性,将客户端地址记录进行分类。
所述客户端属性是指客户端的归属地,或者客户端的访问权限。
一种视频服务器,包括用于响应编码器注册请求并记录编码器地址的注册单元,以及用于接收客户端发送的从所述编码器下载视频流的请求的客户端接口单元,还包括:按照所述注册单元获取的编码器地址为所述编码器建立的编码器链表,以及:链表维护单元,在所述客户端接口单元接收到各客户端的请求后,用于将若干个客户端的地址添加到所述编码器链表中;客户端响应单元,在所述客户端接口单元接收到客户端a的请求后,用于从所述编码器链表中至少任选两个客户端地址下发给客户端a;所述至少两个客户端地址中一个为生效地址,其余客户端地址为备份地址。
所述客户端接口单元,进一步用于接收客户端发送的退出从所述编码器下载视频流的请求;所述链表维护单元,在所述客户端接口单元接收到第j客户端退出请求后,从所述编码器链表中删除第j客户端地址。
还包括:老化定时单元:预置有下载请求的老化时间;所述链表维护单元,在所述客户端接口单元接收到第j客户端的请求超过所述老化时间时,从所述编码器链表中删除第j客户端地址。
一种监控中心系统,包括至少三个客户端,每个客户端向视频服务器发送下载编码器的视频流的请求,客户端a,用于从所述视频服务器获取至少两个已获取视频流的客户端地址,所述至少两个客户端地址中一个为生效地址,其余客户端地址为备份地址;并利用所述客户端地址为生效地址的客户端地址下载视频流;还用于当所述生效地址无效后,从所述至少两个客户端地址中的备份地址继续下载视频流。
一种客户端,包括:视频接收单元,用于从视频服务器发来的至少两个客户端地址中为生效地址的客户端地址接收视频流;还用于当所述生效地址无效后,从所述至少两个客户端地址中的备份地址继续下载视频流;存储单元,用于保存所述视频流;接口单元,用于在接收到其余客户端下载视频流请求后,将保存的视频流发送给请求的客户端。
对于上述技术方案的技术效果分析如下:
本发明不同于现有技术中所有客户端都通过网络从编码器下载视频流,而是从客户端中指定一个作为视频源,后续客户端可从该视频源的客户端下载,从而避免给编码器和网络带来过大压力。
优选地,动态调整视频源,也即采用链式下载方式,选择第N-1客户端或者多个客户端作为第N客户端的下载视频源,不会因为某一个作为视频源的客户端故障而无法下载,而且,本发明按照客户端退出下载情况,对所记录的客户端地址进行动态维护,保证视频下载的可靠性。
具体实施方式
本发明的核心思路在于,利用已经获取视频流的客户端作为视频源,向后续请求下载视频流的客户端提供视频流,其中,视频服务器会记录下已经获取到视频流的若干客户端的地址,这样,已经下载视频流的客户端就成为潜在的视频源,当有后续客户端需要点播的时候,视频服务器可以根据一定的策略从这些潜在的视频源中选取一个或一些地址下发给有点播请求的客户端,这里选择下载源的策略可以根据当时网络资源的负载情况,或者根据网络布局,采用就近原则,或者,也可以根据点播的次序,后点播的客户端依次以前一点播者为下载源,这里可以根据情况的不同,灵活设定。这样,后续客户端不需要再通过网络从编码器下载,减轻了网络和编码器的压力。
概括而言,本发明提供的方法包括以下步骤:
①记录已获取视频流的若干客户端的地址;
②当接受到客户端a下载所述视频流的请求时,从所述已记录地址的客户端中至少任选一个地址下发给客户端a;
③客户端a利用获得的客户端地址,从所述客户端下载视频流。
其中,记录若干地址,包括记录一个客户端地址的情况,也包括记录一部分客户端地址的情况,还包括记录每一个客户端地址的情况。
被记录地址的客户端获取视频流的方式有两种:一种是直接从编码器下载;另一种同客户端a一致,也即从另外已获取视频流的客户端下载。
下面结合附图,对本发明各实施例作详细介绍。
首先,介绍本发明方法实施例一:
在实施例一中,首次向某编码器请求下载视频流的第1客户端作为视频源,为后续客户端提供视频流。
实施例一包括以下步骤:
1、某编码器,记为“第k编码器”,向视频服务器请求注册;
2、视频服务器响应第k编码器的注册请求:记录第k编码器的IP地址;
3、某客户端,记为“第1客户端”,向视频服务器发送消息,请求下载第k编码器的视频流;
4、视频服务器响应第1客户端下载请求:将第k编码器的IP地址下发给第1客户端;同时,记录第1客户端的IP地址;
5、第1客户端利用视频服务器下发的第k编码器的IP地址,与第k编码器通过网络建立单播连接,从第k编码器下载视频流;
6、第1客户端成功下载到视频流后,向视频服务器发送下载成功的通知;如果视频服务器没有收到下载成功的通知,则认为第1客户端没有成功下载视频流,会删除第1客户端地址记录;
或者,视频服务器可先不记录第1客户端地址,在收到第1客户端的下载成功通知后,再记录第1客户端地址。
7、除第1客户端的另外的客户端,统一记为“第N客户端”,向视频服务器发送消息,请求下载第k编码器的视频流;
8、视频服务器响应第N客户端下载请求:将之前记录的第1客户端的IP地址下发给第N客户端;第N客户端利用第1客户端的IP地址,与第1客户端建立连接,从第1客户端下载视频流。
实际上,本实施例是将第k编码器的传输压力转移到第1客户端上,从而减少了第N客户端通过网络与第k客户端的数据传输,减轻了第k编码器压力的同时,缓解了中间传输网络的压力。
下面介绍本发明方法实施例二:
实施例二采用“链式”下载:后续请求下载的第N客户端,与它前一个第N-1客户端建立连接,从第N-1客户端下载视频流。实际上,实施例一也可以看作一种特殊的链式下载,只不过仅有一个节点而已。
本实施例的大体流程与实施例一类似,不同之处在于,视频服务器需要对所有请求下载第k编码器的客户端地址进行维护。也就是为每个编码器维护一个链表,例如链表k对应第k编码器,由该第k编码器的IP地址为标识(索引),由请求下载第k编码器的客户端地址组成。
参见图2,为本实施例编码器链表示意图。
视频源指针所指的地址是当前生效的作为视频源的客户端地址,它随着链表的更新而移动,一般指到链表的最后一项。
当视频服务器接收到第1客户端下载第k编码器视频的请求后,将第k编码器的地址下发给第1客户端,然后记录第1客户端地址,生成由“第k编码器地址+第1客户端地址”构成的第k链表,视频源指针指到第1客户端地址。
当第2客户端也向视频服务器请求下载第k客户端视频流时,视频服务器查找第k链表,将链表中视频源指针所指的第1客户端地址下发给第2客户端,同时,将第2客户端地址添加到第k链表中,视频源指针指到第2客户端地址。
当第3客户端也向视频服务器请求下载第k客户端视频流时,视频服务器查找链表,将视频源指针所指的第2客户端地址下发给第3客户端。同时,将第3客户端地址添加到第k链表中,视频源指针指到第3客户端地址。
后续仍有客户端请求下载第k客户端视频流时,依次类推。
直到构成图2所示的由“第k编码器地址、第1客户端地址、第2客户端地址、第3客户端地址...、第N-1客户端地址”构成的第k链表。
当第N客户端向视频服务器请求下载第k编码器视频流时,视频服务器将第N-1客户端地址下发给第N客户端,以便第N客户端利用第N-1客户端地址与之建立连接,从其下载视频流。
参见图3,为实施例二的流程图。包括:
步骤301:第k编码器向视频服务器请求注册;
步骤302:视频服务器记录第k编码器的IP地址;
步骤303:第1客户端向视频服务器请求下载第k编码器的视频流;
步骤304:视频服务器将第k编码器的IP地址下发给第1客户端;同时,建立由第k编码器地址为索引、包含第1客户端地址的第k链表,第k链表的视频源指针指到第1客户端地址;
步骤305:第1客户端利用视频服务器下发的第k编码器的IP地址,与第k编码器通过网络建立单播连接,从第k编码器下载视频流;
与实施例一类似,此处,最好由第1客户端向视频服务器反馈已经成功下载的通知,这样,能够保证视频服务器所记录的地址对应的客户端已经成功下载到视频流,安全机制更高。
步骤306:视频服务器将请求并成功下载第k编码器视频流的客户端地址都添加到第k链表中,视频源指针指到到链表的最后一项;
步骤307:第N客户端向视频服务器请求下载第k编码器的视频流;
步骤308:视频服务器查找第k链表,将视频源指针所指的第N-1客户端地址下发给第N客户端;同时,将第N客户端地址添加到第k链表,视频源指针指到第N客户端地址;
步骤309:第N客户端利用第N-1客户端地址,与第N-1客户端建立连接,从第N-1客户端下载视频流。
下面介绍本发明方法实施例三:
为了进一步提高视频下载的可靠性,视频服务器可以在向第N客户端下发地址时,在可选的下载源中,选择多个同时下发,例如,同时将“第N-2客户端地址”以及“第N-1客户端地址”下发给第N客户端,然后,第N客户端可以从多个地址中选择一个,进行视频下载。
优选地,视频服务器在下发多个地址时,将其中之一标注为生效地址,其余为失效地址,当生效地址经过某种情况(例如超过饱和时间)失效后,另外一个失效地址转变为生效地址,继而保证下载的可靠性,从而可以减小链表上游对下游的影响。
针对多个备选的下载地址,可以随机选取,也可以所述备选的下载地址设置优先权,依照优先权大小来选取。
在上述多个实施例中,视频服务器还可以在下发地址的时候,始终下发编码器的地址,点播视频源的客户端可将其列入备选的失效地址,当出现所选的客户端下载源不可用时,还可以去该编码器处点播视频流,这样,和现有技术是一样的,在此就不再赘述。
下面介绍本发明方法实施例四:
上述三个实施例任意一个的实施,即可解决本发明所要解决的问题,即缓解编码器以及中间网络的传输压力。但是,为了使本发明提供的方法更加完善,本实施例进一步考虑了客户端退出下载的情形。
有两种情况会导致某客户端退出下载某编码器的视频流:一种是,该客户端上一次的下载请求超过预置的老化时间,例如,系统预置的老化时间是2s,但是从该客户端上一次发送下载请求起开始计时的时间已达到2s时,仍没有新的下载请求,则认为超过老化时间;另外一种是,该客户端主动发出退出请求,例如,该客户端由于从下载第k编码器视频流转为下载第g编码器视频流,此时,它会向视频服务器发送退出下载第k编码器视频的请求。
当某客户端退出下载时,视频服务器会删除该客户端的地址记录。例如,当第j客户端退出下载第k编码器视频时,视频服务器会删除第k编码器对应的第j客户端的地址记录。
参见图4,当第j客户端退出下载时,视频服务器会重新维护链表,删除第j-1客户端与第j客户端的连接、以及第j客户端与第j+1客户端的连接,并将第j-1客户端地址与第j+1客户端地址连接到一起,后续第j+1客户端会利用视频服务器下发的第j-1客户端地址,从第j-1客户端下载视频流。
下面介绍本发明方法实施例五:
本实施例是在前面四个实例任意一个的基础上,对一些细节问题的进一步优化。包括两点:
(1)将记录的客户端地址数量限制在预置的阀值范围内
当多个客户端地址形成一个链表时,可以对每个链表所包含的地址数量进行限制。例如,如果10个以上客户端地址作为一个链表,当前面的客户端断开时,会对后面点播的客户端造成较大的影响,因此,可以将链表的长度设定在预置的阀值范围内,例如阀值为5,多于5个客户端则需要新建一个链表。
(2)按照客户端属性,对客户端地址记录进行分类
客户端属性,可包括多种,例如:客户端归属地以及客户端访问权限等。以客户端归属地为例:客户端只存在于北京和杭州两个地方,而且比较固定,则可以分别为北京和杭州建立两个链表:北京的客户端添加到北京链表中,杭州的客户端添加到杭州链表中。这样,就可以避免一些跨区域遇到的带宽瓶颈问题。
下面介绍本发明实施例六:
上述几个实施例中,视频服务器是将已经获取到视频流的客户端地址下发给新的请求客户端,实际上,还可以将新的请求客户端地址,下发给已经获取视频流的客户端,由已经获取视频流的客户端主动与新的请求客户端建立连接,下发视频流。
具体而言:记录已获取视频流的若干客户端的地址;当接收到客户端a的点播所述视频流的请求时,记录客户端a的地址,从已记录地址的客户端中任选一个客户端,将所述客户端a的地址下发给所选的客户端;所选的客户端利用所述客户端a的地址,建立连接,下发所述视频流。
对于实施例四和实施例五中提到的删除客户端地址、以及对客户端地址记录进行分类和限制的措施,都适用于本实施例。
与上述方法相对应,本发明还提供一种视频服务器。
参见图5,为视频服务器内部结构示意图。
该视频服务器除了包含现有的用于响应编码器注册请求并记录编码器地址的注册单元501、以及用于接收客户端发送的从编码器下载视频流的请求的客户端接口单元502之外,还包括按照注册单元501获取的编码器地址为编码器建立的编码器链表503,
以及:
链表维护单元504,在客户端接口单元502接收到客户端的请求后,用于将若干个客户端地址添加到编码器链表503中;
客户端响应单元505,在客户端接口单元502接收到客户端a的请求后,用于从编码器链表503中获取至少一个客户端地址,并下发给客户端a。
客户端响应单元505向客户端a下发至少两个客户端地址时,负责将其中一个地址设置为生效地址,其余设置为备份地址。
优选地:
客户端接口单元502,进一步用于接收客户端发送的退出从所述编码器下载视频流的请求;链表维护单元504,在客户端接口单元502接收到第j客户端退出请求后,从所述编码器链表中删除第j客户端地址。
在图5所示基础上,视频服务器还可进一步包括:老化定时单元,预置有下载请求的老化时间;链表维护单元504,在客户端接口单元502接收到第j客户端的请求超过所述老化时间时,从编码器链表503中删除第j客户端地址。
与上述方法和视频服务器相对应,本发明还提供一种监控中心系统。可参见图1所示监控中心。
本发明所提供的监控中心系统,包括至少由两个客户端组成的客户端群,每个客户端向视频服务器发送下载编码器的视频流的请求,其中:
客户端a,用于从所述视频服务器获取至少一个已获取视频流的客户端地址,并利用该客户端地址下载视频流。
此外,本发明还包括一种客户端。现有技术中的客户端,是从编码器下载视频流,与别的客户端之间没有交互,而本发明提供的客户端,不但可以从编码器下载视频流,而且还可以从别的客户端下载视频流,更为重要的是可以与别的客户端进行交互,作为别的客户端的视频源向其提供视频流。
具体而言,本发明提供的客户端包括视频接收单元、存储单元和接口单元。其中,视频接收单元用于接收视频流,包括从编码器接收视频流或者从别的客户端接收视频流的两种情况;存储单元用于保存视频流;接口单元,用于在接收到其余客户端下载视频流请求后,将保存的视频流发送给请求的客户端。
对于视频服务器、监控中心和客户端的实现细节,可参见方法实施例的具体描述,在此不再赘述。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。