本发明涉及流媒体,具体涉及一种用于HLS直播资源的录制存储方法。
背景技术
HLS(HTTP Live Streaming,超文本直播流)协议是苹果公司实现的基于HTTP(HyperText Transfer Protocol,超文本传输协议)的流媒体传输协议,主要用于PC和Apple终端的音视频服务,包括一个m3u8的索引文件,ts媒体切片文件和ke加密串文件。
常用的流媒体协议主要有HTTP渐进下载和基于RTSP/RTP的实时流媒体协议,这两种协议完全不同。目前,比较方便又好用的是HTTP渐进下载,苹果公司的HLS协议是这方面的代表。HLS协议最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流,目前在桌面也有很多应用,HTML5直接支持HLS协议。
现有的HLS直播资源录制存储方法如图4所示,推流摄像头推流到直播服务器,直播服务器开启直播,并通知录制服务器录制;录制服务器收到录制通知后,向直播服务器拉流开始录制;调度中心实时从直播服务器和录制服务器获取流地址,客户端向调度中心查询流地址,并从直播服务器或录制服务器获取切片文件进行播放。
上述方案具有以下缺点:
1)独占录制服务器,占用了设备资源;
2)需要进行软件代码维护,占用了人力资源;
3)直播服务器与录制服务器之间的交互,增加了系统的复杂度;
4)占用了1路的Rtmp拉流,消耗了直播服务器的直播资源,并且如果拉流不及时,可能会影响录像质量;
5)调度中心需要与直播服务器、录制服务器同时通信协商,增加了方案的软件复杂性;
6)由于客户端的播放器特性,部分播放器不支持m3u8文件和ts文件不在同一文件夹的情况,如果出现该种情况则无法播放;
7)在客户端请求播放录像文件时,需要调取大量的ts文件,带来了较大的读取和调取压力。
技术实现要素:
(一)解决的技术问题
针对现有技术所存在的上述缺点,本发明提供了一种用于HLS直播资源的录制存储方法,能够有效克服现有技术所存在的系统较为复杂、m3u8文件和ts文件不在同一文件夹时无法播放、读取和调取ts文件压力较大的缺陷。
(二)技术方案
为实现以上目的,本发明通过以下技术方案予以实现:
一种用于HLS直播资源的录制存储方法,包括以下步骤:
S1、推流摄像机向直播服务器推流,直播服务器接收到视频流后正常保存直播流文件;
S2、直播服务器在内部设置用于保存录像流文件的存储文件夹,并在保存直播流文件的同时,将直播流文件复制到相应存储文件夹中;
S3、将每个存储文件夹中所有录像流文件合并为媒体片段,并记录每个录像流文件在媒体片段中的位置;
S4、直播服务器分别生成直播流文件、媒体片段对应的直播地址、录像地址,并发送给调度中心;
S5、客户端从调度中心获取请求地址,并从直播服务器获取对应的直播流文件或媒体片段进行播放。
优选地,S2中直播服务器在内部设置用于保存录像流文件的存储文件夹,并在保存直播流文件的同时,将直播流文件复制到相应存储文件夹中,包括:
直播服务器设定时间间隔,每经过一个时间间隔设置一个用于保存录像流文件的存储文件夹,并将接下来一个时间间隔内保存的所有直播流文件复制到该存储文件夹中。
优选地,S3中将每个存储文件夹中所有录像流文件合并为媒体片段,并记录每个录像流文件在媒体片段中的位置,包括:
将存储文件夹中所有录像流文件按照时间顺序合并为一个完整的媒体片段,并在合并过程中记录每个录像流文件在媒体片段中的开始位置、结束位置。
优选地,S4中直播服务器分别生成直播流文件、媒体片段对应的直播地址、录像地址,并发送给调度中心,包括:
直播服务器生成关于直播流文件的直播流m3u8文件,以及关于媒体片段的录像流m3u8文件,并将直播流m3u8文件、录像流m3u8文件发送给调度中心,同时将录像流m3u8文件存储至对应存储文件夹中,录像流m3u8文件中媒体片段的类型标签采用自定义URL的方式记录。
优选地,所述录像流m3u8文件中媒体片段的类型标签URL包括:协议、存储的主机地址和端口号、资源路径、参数,其中参数包括存储文件夹路径、媒体片段开始位置、媒体片段结束位置三个参数,所述存储文件夹路径采用URL编码处理。
优选地,所述录像流m3u8文件中媒体片段的类型标签URL的访问通过HTTP协议实现。
优选地,S5中客户端从调度中心获取请求地址,并从直播服务器获取对应的媒体片段进行播放,包括:
直播服务器解析请求地址中的参数列表,获取存储文件夹路径、相对于媒体片段的开始位置、相对于媒体片段的结束位置;
结合每个录像流文件在媒体片段中的开始位置、结束位置,确定请求地址包含的录像流文件,并得到第一个录像流文件的开始位置SL1,以及最后一个录像流文件的结束位置FL1;
解析请求HTTP消息头中的内容范围来获取客户端请求的开始偏移位置SL2和结束偏移位置FL2;
通过第一个录像流文件的开始位置SL1、开始偏移位置SL2计算客户端请求播放的开始位置SL,通过最后一个录像流文件的结束位置FL1、结束偏移位置FL2计算客户端请求播放的结束位置FL;
直播服务器将开始位置SL与结束位置FL之间的媒体片段发送至客户端进行播放。
优选地,所述请求播放的开始位置SL、请求播放的结束位置FL的计算公式分别为:
SL=SL1+SL2
FL=FL1-FL2
其中,开始偏移位置SL2从第一个录像流文件的开始位置SL1处向右计算,结束偏移位置FL2从最后一个录像流文件的结束位置FL1处向左计算,均不小于0。
(三)有益效果
与现有技术相比,本发明所提供的一种用于HLS直播资源的录制存储方法,具有以下有益效果:
1)减少了录制服务器,减少了设备资源,直播服务器同时生成直播流文件和录像流文件,减少了与录制服务器之间的通信,同时调度中心仅需与直播服务器通信,降低了系统的复杂性,并且在生成直播流文件的同时,直接生成录像流文件,保证录像质量;
2)直播服务器生成直播流m3u8文件、录像流m3u8文件,并将录像流m3u8文件存储至对应存储文件夹中,能够有效解决部分播放器无法在m3u8文件和ts文件位于不同文件夹下的播放问题,同时也顺利存储了直播流文件和录像流文件;
3)通过将每个存储文件夹中所有录像流文件合并为媒体片段,能够在客户端请求播放录像文件时,有效减小读取和调取ts文件的压力。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的流程示意图;
图2为本发明的另一流程示意图;
图3为本发明中直播服务器根据客户端的请求地址确定调取资源的示意图;
图4为现有技术中HLS直播资源录制存储方法的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种用于HLS直播资源的录制存储方法,如图1和图2所示,S1、推流摄像机向直播服务器推流,直播服务器接收到视频流后正常保存直播流文件。
S2、直播服务器在内部设置用于保存录像流文件的存储文件夹,并在保存直播流文件的同时,将直播流文件复制到相应存储文件夹中,具体包括:
直播服务器设定时间间隔,每经过一个时间间隔设置一个用于保存录像流文件的存储文件夹,并将接下来一个时间间隔内保存的所有直播流文件复制到该存储文件夹中。
录像流文件因为保存时间较长,如果存储在单个文件夹下,会导致文件夹下的ts文件过多,导致最终访问速度变慢,因此一般采用分小时存储文件夹的方式进行存储。在保存直播流文件的同时,将直播流文件复制到相应存储文件夹中,并在以小时为时间间隔的存储文件夹中生成对应的录像流m3u8文件。该种实现方式,既能够有效解决部分播放器无法在m3u8文件和ts文件位于不同文件夹下的播放问题,同时也顺利存储了直播流文件和录像流文件。
S3、将每个存储文件夹中所有录像流文件合并为媒体片段,并记录每个录像流文件在媒体片段中的位置,具体包括:
将存储文件夹中所有录像流文件按照时间顺序合并为一个完整的媒体片段,并在合并过程中记录每个录像流文件在媒体片段中的开始位置、结束位置。
S4、直播服务器分别生成直播流文件、媒体片段对应的直播地址、录像地址,并发送给调度中心,具体包括:
直播服务器生成关于直播流文件的直播流m3u8文件,以及关于媒体片段的录像流m3u8文件,并将直播流m3u8文件、录像流m3u8文件发送给调度中心,同时将录像流m3u8文件存储至对应存储文件夹中,录像流m3u8文件中媒体片段的类型标签采用自定义URL的方式记录。
录像流m3u8文件中媒体片段的类型标签URL包括:协议、存储的主机地址和端口号、资源路径、参数,其中参数包括存储文件夹路径、媒体片段开始位置、媒体片段结束位置三个参数,存储文件夹路径采用URL编码处理。录像流m3u8文件中媒体片段的类型标签URL的访问通过HTTP协议实现。
S5、客户端从调度中心获取请求地址,并从直播服务器获取对应的直播流文件或媒体片段进行播放,具体包括:
直播服务器解析请求地址中的参数列表,获取存储文件夹路径、相对于媒体片段的开始位置、相对于媒体片段的结束位置;
结合每个录像流文件在媒体片段中的开始位置、结束位置,确定请求地址包含的录像流文件,并得到第一个录像流文件的开始位置SL1,以及最后一个录像流文件的结束位置FL1;
解析请求HTTP消息头中的内容范围来获取客户端请求的开始偏移位置SL2和结束偏移位置FL2;
通过第一个录像流文件的开始位置SL1、开始偏移位置SL2计算客户端请求播放的开始位置SL,通过最后一个录像流文件的结束位置FL1、结束偏移位置FL2计算客户端请求播放的结束位置FL;
直播服务器将开始位置SL与结束位置FL之间的媒体片段发送至客户端进行播放。
请求播放的开始位置SL、请求播放的结束位置FL的计算公式分别为:
SL=SL1+SL2
FL=FL1-FL2
其中,开始偏移位置SL2从第一个录像流文件的开始位置SL1处向右计算,结束偏移位置FL2从最后一个录像流文件的结束位置FL1处向左计算,均不小于0。
如图3所示,本发明中直播服务器根据客户端的请求地址确定调取资源,直播服务器通过第一个录像流文件的开始位置SL1、开始偏移位置SL2计算客户端请求播放的开始位置SL;通过最后一个录像流文件的结束位置FL1、结束偏移位置FL2计算客户端请求播放的结束位置FL,并将开始位置SL与结束位置FL之间的媒体片段发送至客户端进行播放。本申请技术方案,通过将每个存储文件夹中所有录像流文件合并为媒体片段,能够在客户端请求播放录像文件时,有效减小读取和调取ts文件的压力。
本申请技术方案,减少了录制服务器,减少了设备资源;直播服务器同时生成直播流文件和录像流文件,减少了与录制服务器之间的通信,同时调度中心仅需与直播服务器通信,降低了系统的复杂性;在生成直播流文件的同时,直接生成录像流文件,保证录像质量。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不会使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。