本发明涉及视频播放处理技术领域,尤其涉及的是一种直播视频时移的控制方法、终端及存储介质。
背景技术:
目前,视频播放已经成为所有终端智能平台的必需功能,为用户带来炫酷多彩的视觉体验,且功能越来越丰富;网络上为安卓平台上提供的开源视频播放器越来越多,如ijkplayer、exoplayer、gsyvideoplayer、jiecaovideoplayer、pldroidplayer等,这些视频播放器都具备正常的直播,点播功能,在进行视频点播时,用户可以对当前的影片进行任意的拖动,从任意时刻开始观看,而直播时,用户无法进行拖动,只能观看当前正在播放的时间点下的视频,但在某些时刻,用户希望在观看直播节目时,能进行往回拖动的功能,在当前节目已经播放过的时长之内任意的拖动,即达到时移的功能,一般情况下,播放器并不支持。
因此,现有技术有待于进一步的改进。
技术实现要素:
鉴于上述现有技术中的不足之处,本发明的目的在于为用户提供一种直播视频时移的控制方法、终端及存储介质,克服现有技术中安卓平台所提供的视频播放器不具有时移功能的缺陷。
本发明提供的第一实施例为一种直播视频时移的控制方法,其中,包括:识别并标记直播视频流m3u8文件中含有的ts流切片,并记录各个ts流切片的时长;
根据接收到的用户拖动指令所对应的视频播放时间点,计算所述视频播放时间点所对应的ts流切片标记号,以及根据计算出的ts流切片标记号和所述ts流切片标记号对应的ts流切片的时长,计算出所述ts流切片上对应的定位时间点;
根据计算出的ts流切片标记号及定位时间点进行时移播放控制。
可选的,所述步骤还包括:
获取直播视频流m3u8文件,并检查所述m3u8文件的格式是否标准;
若标准,则读取所述m3u8文件,记录其中含有的ts流切片信息。
可选的,所述步骤还包括:
在读取所述m3u8文件时,若未检测到目录结尾标识时,则设置本次直播视频流m3u8文件不记录视频播放总时长。
可选的,所述识别并标记直播视频流m3u8文件中含有的ts流切片步骤之前,还包括:
将默认识别并标记直播视频流m3u8文件中含有的ts流切片的数目设置为不限制数目。
可选的,所述方法还包括:
设置当前直播状态下的进度条为可拖动的。
本发明提供的第二实施例为一种直播视频播放终端,其中,所述直播视频播放终端包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的直播视频时移的控制程序,其中所述直播视频时移的控制程序被所述处理器执行时实现以下步骤:
识别并标记直播视频流m3u8文件中含有的ts流切片,并记录各个ts流切片的时长;
根据接收到的用户拖动指令所对应的视频播放时间点,计算所述视频播放时间点所对应的ts流切片标记号,以及根据计算出的ts流切片标记号和所述ts流切片标记号对应的ts流切片的时长,计算出所述ts流切片上对应的定位时间点;
根据计算出的ts流切片标记号及所述定位时间点进行时移播放控制。
可选的,所述直播视频时移的控制程序被所述处理器执行时还实现以下步骤:
获取直播视频流m3u8文件,并检查所述m3u8文件的格式是否标准;
若标准,则读取所述m3u8文件,记录其中含有的ts流切片信息。
可选的,所述直播视频时移的控制程序被所述处理器执行时还实现以下步骤:
在读取所述m3u8文件时,若未检测到目录结尾标识时,则设置本次直播视频流m3u8文件不记录视频播放总时长;
将默认识别并标记直播视频流m3u8文件中含有的ts流切片的数目设置为不限制数目;
以及设置当前直播状态下的进度条为可拖动的。
本发明提供的第三实施例为:一种计算机可读存储介质,其中,所述计算机可读存储介质上存储有直播视频时移的控制程序,所述直播视频时移的控制程序被处理器执行时实现所述的直播视频时移的控制方法的步骤。
有益效果,本发明公开了一种直播视频时移的控制方法、终端及存储介质,通过识别并标记直播视频流m3u8文件中含有的ts流切片,并记录各个ts流切片的时长;根据接收到的用户拖动指令所对应的视频播放时间点,计算所述视频播放时间点所对应的ts流切片标记号,以及根据计算出的ts流切片标记号和所述ts流切片标记号对应的ts流切片的时长,计算出所述ts流切片上对应的定位时间点;根据计算出的ts流切片标记号及定位时间点进行时移播放控制。本发明提供的方法、终端及存储介质,通过对视频流中的ts流进行识别,并解析完成后,根据用户对进度条的推动进行直播视频的时移播放,满足了用户可以随意观看直播视频之前的任意时间段视频,给用户的视频观看带来便利。
附图说明
图1是本发明所述的直播视频时移的控制方法的步骤流程图;
图2是本发明所述控制方法的总体框架图;
图3是本发明所述控制方法中m3u8文件读取时的步骤流程图;
图4是本发明所述的直播视频播放终端的原理结构图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
本发明提供的方法及终端,选择一款开源的视频播放器ijkplayer,通过适当修改其直播情况下解析处理m3u8文件逻辑,可以达到直播情况下能时移的功能。具体的,本发明提供的第一实施例为一种直播视频时移的控制方法,如图1所示,包括:
步骤s1、识别并标记直播视频流m3u8文件中含有的ts流切片,并记录各个ts流切片的时长。
由于m3u8文件是指utf-8编码格式的m3u文件,m3u文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放,因此本步骤中首先对已经获取到的m3u8文件,进行识别,获取其中含有的ts流切片的信息,根据获取到的ts流切片进行下一步的播放控制。
节目流(ts,transportstream),其含有固定包长度为188字节,ts流固定包长度的好处是便于找到帧的起始位置,易于从包丢失中恢复,适合于有误码的环境。根据ts流切片的188字节所含有字节信息解析出其中含有的视频信息。
步骤s2、根据接收到的用户拖动指令所对应的视频播放时间点,计算所述视频播放时间点所对应的ts流切片标记号,以及根据计算出的ts流切片标记号和所述ts流切片标记号对应的ts流切片的时长,计算出所述ts流切片上对应的定位时间点。
当接收到用户发出的对进度条的拖动指令,则获取用户拖动指令所对应的播放时间点,根据所述播放时间点,获取与其相对应的视频关键帧,根据当前视频关键帧计算与其相对应的ts流切片标记号,从而对当前拖动指令所对应的标记号下的ts流切片上的时间点进行准确定位,计算出所述ts流切片上对应的定位时间点。
步骤s3、根据计算出的ts流切片标记号及定位时间点进行时移播放控制。
当上述步骤s2中对拖动位置所对应的ts流切片及该ts流切片上所对应的定位时间点进行准确定位后,根据ts流切片所对应的标记号的播放顺序进行依次播放。
本步骤主要完成对seekbar(进度条)进行拖动时的逻辑处理,根据用户拖动的时间点找到对应时间点的视频关键帧,计算该时间点下对应的ts流切片序列号并返回。
可选的,所述方法还包括:
设置当前直播状态下的进度条为可拖动的。
由于直播情况下默认不允许进行拖动,因此需要做如下的改动:
if((flags&avseek_flag_byte)/*||!c->variants[c->first_valid_variant]->finished*/)
returnaverror(enosys);
具体的,如图2所示,为本实施所公开方法在具体实施例中包含的主要步骤,其中,视频显示:对应视频显示模块,其主要用于视频播放器界面。视频显示模块主要包括:m3u8格式检测模块:该模块主要是检查m3u8文件的格式。m3u8文件读取:对应m3u8文件读取模块,该模块主要是读取m3u8文件。ts流切片解析:对应ts流切片解析模块,该模块主要是解析m3u8文件中的ts流切片。拖动解析,对应拖动解析模块,该模块主要是处理拖动时候的逻辑。
进一步的,在上述m3u8文件读取的步骤中为了实现对m3u8文件中包含的视频进行准确定位及播放,所述步骤还包括:
获取直播视频流m3u8文件,并检查所述m3u8文件的格式是否标准;
若标准,则读取所述m3u8文件,记录其中含有的ts流切片信息。
具体的,结合图3所示,为具体实施例时m3u8文件读取的步骤流程图,其步骤包括:
步骤h21,获取所述m3u8文件,并开始进行文件信息读取;
步骤h22、判断m3u8文件是否以#extm3u开始,若是,则说明文件格式准确,执行步骤h23;否则,重复本步骤;
步骤h23,逐行读取m3u8文件;
步骤h24,识别出最后一行,或者判断是否检测到#ext-xendust标识,若识别到或检测到,则判定出当前m3u8文件不是直播视频文件,则执行步骤h25,若未检测到则当前m3u8文件是直播视频文件,则重复本步骤;
步骤h25,记录总时长以及将记录当前ts流切片的变量设置为第一个ts流切片。
步骤h26,读取完毕。
上述步骤中在进行记录ts流切片信息时,还包括:
在读取所述m3u8文件时,若未检测到目录结尾标识时,则设置本次直播视频流m3u8文件不记录视频播放总时长。
记录每个ts流切片的详细信息;从“#extm3u”字符串开始,当识别到“#extinf:”时,标记当前ts流为其中的一个切片,记录其时长:
if(av_strstart(line,"#extinf:",&ptr)){1
is_segment=1;
duration=atof(ptr)*av_time_base;
}
循环当前步骤直至识别到“#ext-x-endlist”时,标记当前的m3u8文件已经读取完毕;
if(av_strstart(line,"#ext-x-endlist",&ptr)){
if(var)
var->finished=1;
}
如果整个m3u8文件读取完毕后,仍然没有检测到“#ext-x-endlist”时,表明这是一个直播流(livestream),此时我们要做的改动之一就是将记录总时长的条件放开,即是将原记录总时长的程序代码修改为以下程序代码:
if(true/*c->variants[c->first_valid_variant]->finished*/){
int64_tduration=0;
for(i=0;i<c->variants[c->first_valid_variant]->n_segments;i++)
duration+=c->variants[c->first_valid_variant]->segments[i]->duration;
s->duration=duration;
}
较佳的,所述识别并标记直播视频流m3u8文件中含有的ts流切片步骤之前,还包括:
将默认识别并标记直播视频流m3u8文件中含有的ts流切片的数目设置为不限制数目。
同时,由于直播流默认只解析整个m3u8文件中的最后三个ts流切片,而我们需要让播放器解析所有的ts流切片,需要将原限制解析ts流切片个数的代码修改为以下程序代码:
/*if(!v->finished&&v->n_segments>3)
v->cur_seq_no=v->start_seq_no+v->n_segments-3;*/
本发明提供的第二实施例为:一种直播视频播放终端,如图4所示,所述直播视频播放终端包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的直播视频时移的控制程序,其中所述直播视频时移的控制程序被所述处理器执行时实现以下步骤:
识别并标记直播视频流m3u8文件中含有的ts流切片,并记录各个ts流切片的时长;
根据接收到的用户拖动指令所对应的视频播放时间点,计算所述视频播放时间点所对应的ts流切片标记号,以及根据计算出的ts流切片标记号和所述ts流切片标记号对应的ts流切片的时长,计算出所述ts流切片上对应的定位时间点;
根据计算出的ts流切片标记号及所述ts流切片时长对应的时间点进行时移播放控制。
进一步的,所述直播视频时移的控制程序被所述处理器执行时还实现以下步骤:
获取直播视频流m3u8文件,并检查所述m3u8文件的格式是否标准;
若标准,则读取所述m3u8文件,记录其中含有的ts流切片信息。
进一步的,所述直播视频时移的控制程序被所述处理器执行时还实现以下步骤:
在读取所述m3u8文件时,若未检测到目录结尾标识时,则设置本次直播视频流m3u8文件不记录视频播放总时长;
将默认识别并标记直播视频流m3u8文件中含有的ts流切片的数目设置为不限制数目;
以及,设置当前直播状态下的进度条为可拖动的。
本发明提供的第三实施例为:一种计算机可读存储介质,其中,所述计算机可读存储介质上存储有直播视频时移的控制程序,所述直播视频时移的控制程序被处理器执行时实现所述的直播视频时移的控制方法的步骤。
存储器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中直播视频时移的控制程序或者模块。处理器通过运行存储在存储器中的非易失性软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例中工业设备管理装置或智能终端的功能。
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储工业设备管理方法使用或接收的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。
上述计算机设备可执行本发明实施例所提供的方法,具备执行该方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
本发明公开了一种直播视频时移的控制方法、终端及存储介质,通过识别并标记直播视频流m3u8文件中含有的ts流切片的信息及其时长;根据接收到用户拖动指令所对应的视频播放时间点,计算所述时间点所对应的ts流切片标记号及所述ts流切片上的定位时间点;根据所述ts流切片标记号及定位时间点进行时移播放控制。本发明提供的方法、终端及存储介质,通过对视频流中的ts流进行识别,并解析完成后,根据用户对进度条的推动进行直播视频的时移播放,满足了用户可以随意观看直播视频之前的任意时间段视频,给用户的视频观看带来便利。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。