一种基于hls协议的音视频流直播方法

文档序号:10492759阅读:426来源:国知局
一种基于hls协议的音视频流直播方法
【专利摘要】本发明公开了一种基于HLS协议的音视频流直播方法。包括下载线程和播放线程,下载线程用于管理本地缓存目录,向内容分发端请求m3u8文件和视频切片文件,播放线程用于解析缓存目录中的m3u8文件,根据m3u8文件中的EXMS值和已经播放的媒体序号,计算出需要播放的切片,并依次播放,下载线程与播放线程异步执行。本发明的方法在保证直播的低延时的同时,在网络环境差的情况下增加了直播的流畅性,其中切片命名规则和缓存目录的管理机制保证了对本地存储空间占用少,不产生垃圾文件。
【专利说明】
一种基于HLS协议的音视频流直播方法
技术领域
[0001 ]本发明涉及一种音视频流直播方法,特别涉及一种基于HLS协议的音视频流直播方法。
【背景技术】
[0002]随着移动互联网视频播放技术的应用日益兴旺,基于HLS协议的视频播放技术在移动互联网中应用越来越广泛。HLS在移动互联网的应用主要是点播和直播两种方式。一个完整的HLS流媒体系统由服务器端、内容分发端,客户端三部分组成。服务器端主要功能是制作m3u8索引文件和视频切片文件。内容分发端还可能包括分布式部署或者内容分发网络等。其主要功能是负责接收客户端的请求,并用过http协议向客户端传送索引文件、视频切片文件以及其它相关信息。客户端主要功能是负责发起视频流请求,并且根据分发端返回的m3u8文件进行下载正确的视频切片文件,然后对切片文件中的数据进行处理。基于HLS的点播流程,客户端首先向内容分发端请求点播的m3u8文件,内容分发端收到该请求后,返回这个点播的m3u8文件。该m3u8文件里面包含了全部的切片的信息,包括时长,路径等信息,客户端根据m3u8文件中列出的切片顺序,依据获取的切片文件路径信息,依次播放每个切片文件。基于HLS的直播流程,客户端首先向内容分发端请求直播的m3u8文件,内容分发端收到该请求后,返回这个直播当前的m3u8文件。该m3u8文件里面包含直播当前时间之前的若干个切片信息,一般为6个切片,每个切片1s时长。客户端根据m3u8文件中的EXMS值和已经播放的媒体序号,来决定应该从m3u8文件中的第几个切片开始请求播放,当本次的m3u8文件中的最后切片文件请求完毕后,客户端再次向内容分发端请求直播当前的m3u8文件,如此不断循环请求m3u8文件,然后请求播放切片文件,直到直播结束。
[0003]目前的HLS直播主要依靠增加缓存大小来解决网络环境差,播放卡顿现象。这种方法的缺点是当设置缓存越大直播延时越严重,缓存越小,卡顿越明显,并且占用内存空间比较大,用户体验很不好。大部分播放器在WIFI和有线环境下具有较好的播放体验,然而在移动网络环境中播放效果不够理想,卡顿、花屏、马赛克现象出现较为频繁,严重影响使用者的观看体验。

【发明内容】

[0004]本发明是为了克服上述现有技术中缺陷,提供了一种异步下载,本地播放的直播方法,在延时不太大的情况下流畅的播放,提升用户体验。
[0005]术语HLS:全称是HTTP Living Streaming,是由苹果公司提出的基于HTTP的流媒体网络传输协议。
[0006]术语EXMS: m3u8文件中的TAG项#EXT-X-MEDIA-SEQUENCE,定义当前m3u8文件中第一个切片文件的媒体序号。
[0007]—种基于HLS协议的音视频流直播方法,包括下载线程和播放线程;
[0008]所述下载线程用于管理本地缓存目录,向内容分发端请求m3u8文件和视频切片文件;
[0009]所述播放线程用于解析缓存目录中的m3u8文件,根据m3u8文件中的EXMS值和已经播放的媒体序号,计算出需要播放的切片,并依次播放;
[0010]所述下载线程与播放线程异步执行。
[0011 ]所述下载线程的操作步骤为:
[0012]S1、客户端启动下载线程,创建本地存放切片文件的缓存目录;
[0013]S2、客户端依据循环判断条件一每隔一段时间向内容分发端请求一次直播m3u8文件;
[OOM] S3、分析返回的m3u8文件,f irst_seq_no变量中存放第一次请求m3u8文件中的EXMS值,cur_seq_no变量中存放每次请求的m3u8文件中的EXMS值,cur_load_seq_no变量中存放最后下载完毕的切片的媒体序号;
[0015]S4、根据算法一计算出本次从m3u8文件中的第几个切片文件开始下载;
[0016]S5、如果循环判断条件二为真下载切片文件到缓存目录,媒体序号= cur_load_seq_no_f irst_seq_no,切片文件名以媒体序号命名,如果循环结束,那么转入步骤S9;
[0017]S6、如果判断条件三为真,那么在缓存目录中创建m3u8文件,并通知播放线程根据步骤SI中设置的存储路径获取本地m3u8文件开始播放,m3u8文件中的切片信息修改为缓存目录中对应的切片文件信息,如果判断条件三为假,执行步骤S5;
[0018]S7、更新缓存目录中的m3u8文件;
[0019]S8、根据播放线程中记录的当前播放的媒体序号,清除缓存目录中切片文件名小于当前播放的媒体序号的切片文件;
[0020]S9、线程挂起一秒,然后转到步骤S2。
[0021]所述判断条件一为:上次请求m3u8时间距离当前时间是否大于阈值和当前已下载切片中未播放切片数是否小于6,这个阈值初始化为30秒,如果向内容分发端请求m3u8文件失败,那么修改为一秒,直到请求成功后再修改为30秒。
[0022]所述算法一为:当前开始下载的切片序号= cur_load_seq_no_cur_seq_no。
[0023]所述条件二为:一个for循环,循环次数是步骤S4中计算出的需要下载的切片文件数。
[0024]所述条件三为:是否媒体序号为O的切片下载完毕。
[0025]所述播放线程的操作步骤为:
[0026]B1、等待下载线程发送可以播放的通知消息;
[0027]B2、读取缓存目录中的m3u8文件中的信息;
[0028]B3、检测视频切片的格式、编码信息,创建对应的解复用,解码器播放模块;
[0029]B4、如果判断条件一为真,那么转步骤B5,如果判断条件一为假,那么转步骤B8;
[0030]B5、如果判断条件二为真,那么转步骤B6,如果判断条件二为假,那么转步骤B7;
[0031]B6、读取缓存目录中的m3u8文件内容,查看更新的切片信息;
[0032]B7、记录当前播放的媒体序号,读取当前要播放的切片数据,解码播放;
[0033]B8、注销下载线程,删除缓存目录中的全部文件。
[0034]所述判断条件一为:判断直播是否停止,或用户要退出播放。
[0035]所述判断条件二为:上次请求m3u8时间距离当前时间是否大于阈值,这个阈值初始化为30秒。
[0036]与现有技术相比,本发明具有如下有益效果:本发明下载网络切片文件与播放本地缓存目录中切片文件异步执行,减少直播延时和卡顿现象。下载后切片文件名和媒体序号相对应,便于删除播放过的切片文件。下载完第一个切片后立即在缓存目录中创建m3u8文件,保证低延时。能记录当前播放切片序号。删除已经播放过的切片文件,保证不占用太多本地存储空间。当客户端退出时删除缓存目录中的全部文件,不产生垃圾文件。本发明的解决方案在保证直播的低延时的同时,在网络环境差的情况下增加了直播的流畅性,其中切片命名规则和缓存目录的管理机制保证了对本地存储空间占用少,不产生垃圾文件。
【附图说明】
[0037]图1是本发明下载线程的工作流程图。
[0038]图2是本发明播放线程的工作流程图。
【具体实施方式】
[0039]下面结合附图,对本发明的【具体实施方式】进行详细描述,但应当理解本发明的保护范围并不受【具体实施方式】的限制。
[0040]—种基于HLS协议的音视频流直播方法,包括下载线程和播放线程;
[0041 ]所述下载线程用于管理本地缓存目录,向内容分发端请求m3u8文件和视频切片文件;
[0042]所述播放线程用于解析缓存目录中的m3u8文件,根据m3u8文件中的EXMS值和已经播放的媒体序号,计算出需要播放的切片,并依次播放;
[0043]所述下载线程与播放线程异步执行。
[0044]如图1所示,所述下载线程的操作步骤为:
[0045]S1、客户端启动下载线程,创建本地存放切片文件的缓存目录;
[0046]S2、客户端依据循环判断条件一每隔一段时间(如30s)向内容分发端请求一次直播m3u8文件;所述判断条件一为:上次请求m3u8时间距离当前时间是否大于阈值和当前已下载切片中未播放切片数是否小于6,这个阈值初始化为30秒,如果向内容分发端请求m3u8文件失败,那么修改为一秒,直到请求成功后再修改为30秒;
[0047]S3、分析返回的m3u8文件,f irst_seq_no变量中存放第一次请求m3u8文件中的EXMS值,cur_seq_no变量中存放每次请求的m3u8文件中的EXMS值,cur_load_seq_no变量中存放最后下载完毕的切片的媒体序号;
[0048]S4、根据算法一计算出本次从m3u8文件中的第几个切片文件开始下载;所述算法一为:当前开始下载的切片序号= cur_load_seq_no_cur_seq_no;
[0049]S5、如果循环判断条件二为真下载切片文件到缓存目录,媒体序号= cur_load_seq_no_first_seq_no,切片文件名以媒体序号命名(例如,0.ts,l.ts,2.ts,...),如果循环结束,那么转入步骤S9;所述条件二为:一个for循环,循环次数是步骤S4中计算出的需要下载的切片文件数;下载后切片文件名和媒体序号相对应,便于步骤S8中删除播放过的切片文件。
[0050]S6、如果判断条件三为真,那么在缓存目录中创建m3u8文件,并通知播放线程根据步骤SI中设置的存储路径获取本地m3u8文件开始播放,m3u8文件中的切片信息修改为缓存目录中对应的切片文件信息,如果判断条件三为假,执行步骤S5;所述条件三为:是否媒体序号为O的切片下载完毕;下载完第一个切片后立即在缓存目录中创建m3u8文件,保证低延时。
[0051 ] S7、更新缓存目录中的m3u8文件;
[0052]S8、根据播放线程中记录的当前播放的媒体序号,清除缓存目录中切片文件名小于当前播放的媒体序号的切片文件;删除已经播放过的切片文件,保证不占用太多本地存储空间;
[0053]S9、线程挂起一秒,然后转到步骤S2。
[0054]如图2所示,所述播放线程的操作步骤为:
[0055]B1、等待下载线程发送可以播放的通知消息;
[0056]B2、读取缓存目录中的m3u8文件中的信息;
[0057]B3、检测视频切片的格式、编码信息,创建对应的解复用,解码器播放模块;
[0058]B4、如果判断条件一为真,那么转步骤B5,如果判断条件一为假,那么转步骤B8;所述判断条件一为:判断直播是否停止,或用户要退出播放;
[0059]B5、如果判断条件二为真,那么转步骤B6,如果判断条件二为假,那么转步骤B7;所述判断条件二为:上次请求m3u8时间距离当前时间是否大于阈值,这个阈值初始化为30秒;记录当前播放切片序号;
[0060]B6、读取缓存目录中的m3u8文件内容,查看更新的切片信息;
[0061]B7、记录当前播放的媒体序号,读取当前要播放的切片数据,解码播放;
[0062]B8、注销下载线程,删除缓存目录中的全部文件;当客户端退出时删除缓存目录中的全部文件,不产生垃圾文件。
[0063]本发明的方法采用异步下载M3u8文件和视频切片文件到本地缓存目录,然后播放器播放本地切片文件的方法,这种方法可以最大限度利用网络带宽资源,保证直播视频流能够流畅,清晰的播放。
[0064]以上公开的仅为本发明的具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
【主权项】
1.一种基于HLS协议的音视频流直播方法,其特征在于,包括下载线程和播放线程; 所述下载线程用于管理本地缓存目录,向内容分发端请求m3u8文件和视频切片文件; 所述播放线程用于解析缓存目录中的m3u8文件,根据m3u8文件中的EXMS值和已经播放的媒体序号,计算出需要播放的切片,并依次播放; 所述下载线程与播放线程异步执行。2.根据权利要求1所述的基于HLS协议的音视频流直播方法,其特征在于,所述下载线程的操作步骤为: S1、客户端启动下载线程,创建本地存放切片文件的缓存目录; S2、客户端依据循环判断条件一每隔一段时间向内容分发端请求一次直播m3u8文件; S3、分析返回的m3u8文件,first_seq_no变量中存放第一次请求m3u8文件中的EXMS值,cur_seq_no变量中存放每次请求的m3u8文件中的EXMS值,cur_load_seq_no变量中存放最后下载完毕的切片的媒体序号; S4、根据算法一计算出本次从m3u8文件中的第几个切片文件开始下载; S5、如果循环判断条件二为真下载切片文件到缓存目录,媒体序号=cur_load_seq_no_first_seq_no,切片文件名以媒体序号命名,如果循环结束,那么转入步骤S9; S6、如果判断条件三为真,那么在缓存目录中创建m3u8文件,并通知播放线程根据步骤SI中设置的存储路径获取本地m3u8文件开始播放,m3u8文件中的切片信息修改为缓存目录中对应的切片文件信息,如果判断条件三为假,执行步骤S5; S7、更新缓存目录中的m3u8文件; S8、根据播放线程中记录的当前播放的媒体序号,清除缓存目录中切片文件名小于当前播放的媒体序号的切片文件; S9、线程挂起一秒,然后转到步骤S2。3.根据权利要求2所述的基于HLS协议的音视频流直播方法,其特征在于,所述判断条件一为:上次请求m3u8时间距离当前时间是否大于阈值和当前已下载切片中未播放切片数是否小于6,这个阈值初始化为30秒,如果向内容分发端请求m3u8文件失败,那么修改为一秒,直到请求成功后再修改为30秒。4.根据权利要求2所述的基于HLS协议的音视频流直播方法,其特征在于,所述算法一为:当前开始下载的切片序号= cur_load_seq_no_cur_seq_no。5.根据权利要求2所述的基于HLS协议的音视频流直播方法,其特征在于,所述条件二为:一个for循环,循环次数是步骤S4中计算出的需要下载的切片文件数。6.根据权利要求2所述的基于HLS协议的音视频流直播方法,其特征在于,所述条件三为:是否媒体序号为O的切片下载完毕。7.根据权利要求1所述的基于HLS协议的音视频流直播方法,其特征在于,所述播放线程的操作步骤为: B1、等待下载线程发送可以播放的通知消息; B2、读取缓存目录中的m3u8文件中的信息; B3、检测视频切片的格式、编码信息,创建对应的解复用,解码器播放模块; B4、如果判断条件一为真,那么转步骤B5,如果判断条件一为假,那么转步骤B8; B5、如果判断条件二为真,那么转步骤B6,如果判断条件二为假,那么转步骤B7; B6、读取缓存目录中的m3u8文件内容,查看更新的切片信息; B7、记录当前播放的媒体序号,读取当前要播放的切片数据,解码播放; B8、注销下载线程,删除缓存目录中的全部文件。8.根据权利要求7所述的基于HLS协议的音视频流直播方法,其特征在于,所述判断条件一为:判断直播是否停止,或用户要退出播放。9.根据权利要求7所述的基于HLS协议的音视频流直播方法,其特征在于,所述判断条件二为:上次请求m3u8时间距离当前时间是否大于阈值,这个阈值初始化为30秒。
【文档编号】H04N21/433GK105847941SQ201610150223
【公开日】2016年8月10日
【申请日】2016年3月17日
【发明人】王鋆
【申请人】央广视讯传媒股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1