一种直播缓存系统及方法与流程

文档序号:16435202发布日期:2018-12-28 20:26阅读:501来源:国知局
本发明涉及互联网领域,具体涉及一种直播缓存系统及方法。
背景技术
:伴随着互联网带宽和速度的提升,目前互联网从原本集中在网页流量和即时通讯的文本传输,迅速变成了集中在高速下载,高码率视频边下边播的视频业务上,尤其近年开始转向直播业务。而对于中小运营商来说,大部分网络视频资源并不存放在本地网络中,而是需要购买联通电信的出口才能够获取,而在上网高峰期之间,有可能会导致出口拥堵,进而影响用户的上网体验,对此,各个中小运营商对点播视频,采用了缓存技术来解决出口拥堵,提前将热度较高的点播数据下载到运营商本地网络,然后通过引导或劫持的方式将本地的视频请求重定向到缓存服务器上,避免的出口的拥塞。但是目前还没有针对直播业务的缓存,因为直播数据及时有效,很快就会过期,无法保存为文件。目前多个视频网站,使用flv视频流为用户提供服务,flv文件分为flv视频头信息和视频数据,其中视频数据为视频帧和音频帧,而视频帧中包括多个关键帧,关键帧是帧间压缩编码的最重要帧,播放视频流的第一帧,如果视频流第一帧不是关键帧,可能会出现花屏等现象。flv是flashvideo的简称,flv流媒体格式是随着flashmx的推出发展而来的视频格式。技术实现要素:本发明对于目前缓存市场上缺少的直播缓存业务,提出了一种直播缓存系统及方法。为了实现上述目的,本发明提出了一种直播缓存系统,运行在直播缓存服务器上,当多个客户端向直播缓存系统请求flv直播视频流时,所述系统从视频节目源站获取直播视频流并为多个客户端提供直播缓存服务。作为上述系统的一种改进,所述直播缓存系统包括:,视频节目记录模块、请求处理模块,视频代理请求模块、视频接收和解析模块及视频直播发送模块;所述视频节目记录模块,用于创建一个视频节目列表,该列表记录所有客户端请求的视频节目,在每个视频节目上创建和维护一个用户列表,用户列表记录请求该视频节目的客户端;每个视频节目上还包括一个缓存区;所述请求处理模块,用于接收客户端的flv直播视频节目请求,并在视频节目列表中查询该视频节目是否存在,如果存在,将该客户端加入该视频节目的用户列表,向直播流发送模块发送直播流发送指令;否则,将该视频节目加入视频节目列表,并将该客户端加入该视频节目的用户列表,向视频请求模块发送视频代理请求指令,之后向直播流发送模块发送直播流发送指令;所述视频代理请求模块,用于在接收到视频代理请求指令后,向视频节目源站发送代理请求;所述视频接收和解析模块,用于接收和解析视频节目源站发送的视频流,获取该视频数据的flv视频头,获得视频数据每个关键帧的位置并定位最近的关键帧,将flv视频头和关键帧开始的视频数据组合形成直播流,放入该视频节目的缓存区;所述直播流发送模块,用于在接收到直播流发送指令后,将请求的视频节目的缓存区的直播流发送至请求该视频节目的客户端的用户,直到该直播视频被关闭或者用户主动关闭直播视频节目.作为上述系统的一种改进,所述视频节目记录模块,还用于维护视频节目列表,当一个视频节目列表的节目的用户列表为空时,将该节目的缓存区清空,并删除该节目。基于上述直播缓存系统,本发明还提出了一种直播缓存方法,所述方法包括:步骤1)所述视频节目记录模块创建一个视频节目列表,记录所有客户端请求的视频节目,在每个视频节目上创建一个用户列表,记录请求该视频节目的客户端;为每个视频节目上创建一个缓存区;步骤2)客户端向所述系统发送flv视频节目请求,所述请求处理模块解析客户端用户的url,获得节目信息,并在视频节目列表中查询该节目是否存在,如果存在,转入步骤6);否则,进入步骤3);步骤3)将该视频节目加入视频节目列表,并将该客户端的用户加入该视频节目的用户列表,向视频请求模块发送视频代理请求指令;步骤4)所述视频代理请求模块接收到视频代理请求指令后,向视频节目源站发送代理请求;视频节目源站接收到该请求后,向所述系统发送视频流;步骤5)所述视频接收和解析模块接收视频节目源站发送的视频流,获取该视频数据的flv视频头,获得视频数据每个关键帧的位置并定位最近的关键帧,将flv视频头和关键帧开始的视频数据组合形成直播流,放入该视频节目的缓存区;步骤6)所述直播流发送模块在接收到直播流发送指令后,将请求的视频节目的缓存区的直播流发送至请求该视频节目的客户端的用户,直到该直播视频被关闭或者用户主动关闭直播视频节目。作为上述方法的一种改进,所述方法还包括:步骤7)所述视频节目记录模块对视频节目列表进行维护:当一个视频节目列表的节目的用户列表为空时,将该节目的缓存区清空,并删除该节目。本发明的优势在于:1、本发明的系统能够解析直播flv数据内容,找出视频关键帧,当有用户请求时,将最近的关键帧和其他视频帧音频帧组成视频流,发送给用户;2、通过本发明的系统,如果多个用户观看同一个节目,只会下载一份直播流,而对每个用户,吐出最近的直播流数据;3、通过本发明的系统,对于多份用户直播请求,如果是同一个频道,只会出网一份流量,而吐出多份流量,减少了运营商的出口带宽压力;在避免出口拥塞的基础上,减少用户观看视频的卡顿,增加了用户体验;4、通过本发明的系统,直播流量优化上线后,为运营商出口带宽减少了5g流量,避免了运营商的出口瓶颈,也减少了购买出口带宽的花费;并提高了用户观看直播的体验。附图说明图1为本发明的的直播缓存系统的示意图;图2为本发明的实施例2的直播缓存方法的示意图;图3为本发明的用户访问直播缓存服务器的流程图;图4为本发明的用户访问直播缓存服务器接收视频源站发送的视频流的流程图;图5为本发明的直播缓存服务器从缓存区读取视频发送给用户的流程图;图6为本发明的直播缓存服务器对视频列表进行管理的流程图。具体实施方式下面结合附图和具体实施例对本发明进行详细的说明。实施例1本发明的实施例1提出了一种直播缓存系统,运行在直播缓存服务器上,当多个客户端向直播缓存系统请求flv直播视频流时,直播缓存系统为多个客户端提供缓存服务。所述直播缓存系统包括:视频节目记录模块,请求处理模块,视频代理请求模块,视频接收和解析模块及视频直播发送模块;所述视频节目记录模块,用于创建一个视频节目列表,该列表记录所有客户端请求的视频节目,在每个视频节目上创建一个用户列表,用户列表记录请求该视频节目的客户端;每个视频节目上还包括一个缓存区,用于记录从视频节目源站获取的该视频数据的flv视频头和最近的关键帧;当一个视频节目列表的节目的用户列表为空时,将该节目的缓存区清空,删除该频道。所述请求处理模块,用于接收客户端的flv直播视频节目请求,并在视频节目记录模块中查询该视频节目是否存在,如果存在,将该客户端加入该视频节目的用户列表,向直播流发送模块发送直播流发送指令;否则,将该视频节目加入视频节目列表,并将该客户端加入该视频节目的用户列表,向视频请求模块发送视频代理请求指令,之后向直播流发送模块发送直播流发送指令;所述视频代理请求模块,用于在接收到视频代理请求指令后,向视频节目源站发送代理请求;所述视频接收和解析模块,用于接收视频节目源站发送的视频流,获取该视频数据的flv视频头,获得视频数据每个关键帧的位置并定位最近的关键帧,将flv视频头和关键帧开始的视频数据组合形成直播流,放入该视频节目的缓存区;所述直播流发送模块,用于在接收到直播流发送指令后,将请求的视频节目的缓存区的直播流发送至请求该视频节目的客户端的用户,直到该直播视频被关闭或者用户主动关闭直播视频节目。具体的,如图1所示,当两个客户端a和客户端b向直播缓存服务器请求同一个视频直播时1、客户端a请求flv直播视频流2、直播缓存服务器发现没有这个视频数据3、直播缓存服务器去源站代理请求flv直播4、源站返回直播流5、直播缓存服务器将直播数据写入内存缓存6、直播缓存服务器向客户端a吐出直播流7、直播缓存服务器持续解析视频流,获得每个关键帧的位置8、客户端b请求同一个直播视频的flv流9、直播缓存服务器检查该直播视频10、直播缓存服务器获取该视频数据的flv视频头11、直播缓存服务器定位该视频流最近的关键帧12、直播缓存服务器将flv视频头和关键帧开始的视频数据组合13、直播缓存服务器形成直播流14、直播缓存服务器将直播流数据吐给客户端b。实施例2如图2所示,本发明的实施例2提出了一种直播缓存方法,所述方法包括:步骤1)所述视频节目记录模块创建一个视频节目列表,该列表记录所有客户端请求的视频节目,在每个视频节目上创建一个用户列表,用户列表记录请求该视频节目的客户端;在每个视频节目上创建一个缓存区,记录从视频节目源站获取的该视频数据的flv视频头和最近的关键帧;步骤2)客户端向所述系统发送flv视频节目请求,所述请求处理模块解析客户端用户的url,获得节目信息,并在视频节目列表中查询该节目是否存在,如果存在,转入步骤6);否则,进入步骤3);步骤3)将该视频节目加入视频节目列表,并将该客户端的用户加入该视频节目的用户列表,向视频请求模块发送视频代理请求指令;如图3所示,用户访问直播缓存服务器,解析用户url,获得节目信息,检查是否存在该节目,如果存在,则在这个节目信息中加入该用户;如果不存在,则新建该节目,加入节目队列。步骤4)所述视频代理请求模块接收到视频代理请求指令后,向视频节目源站发送代理请求;视频节目源站接收到该请求后,向所述系统发送视频流;步骤5)所述视频接收和解析模块接收视频节目源站发送的视频流,获取该视频数据的flv视频头,获得视频数据每个关键帧的位置并定位最近的关键帧,将flv视频头和关键帧开始的视频数据组合形成直播流,放入该视频节目的缓存区;如图4所示,直播缓存服务器连接直播视频源站,持续接收和解析数据,将flv视频头和数据帧放入结构,并为所有该节目的用户,设置写事件。步骤6)所述直播流发送模块在接收到直播流发送指令后,将请求的视频节目的缓存区的直播流发送至请求该视频节目的客户端的用户,直到该直播视频被关闭或者用户主动关闭直播视频节目。如图5所示,用户触发写事件,读取flv视频头和最近的关键帧开始的视频数据,形成直播流,写入发送缓冲区,吐给用户。如图6所示,如果一个节目下的所有用户都停止观看,那么为了减少互联网出口带宽,需要立即停止出网回源。直播缓存服务器定期检查直播节目,关闭无人观看的节目,停止出网回源。采用堆结构+双向链表建立每个直播节目的信息和数据内容:staticstructlist_headmem_table[mem_table_size];//urlhash为key,挂载数据内存链staticstructlist_headmem_list;//双向链表,遍历检查任务状态,如用户访问为0,一定时间后删除任务等操作。urlhash是对直播视频流的下载地址进行sha1算法,获得40位hash,作为该节目的唯一key。最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1