溯源视频文件的分解方法与流媒体服务器及客户端与流程

文档序号:20040264发布日期:2020-02-28 11:49阅读:318来源:国知局
溯源视频文件的分解方法与流媒体服务器及客户端与流程

本发明涉及流媒体技术领域,尤其涉及一种溯源视频文件的分解方法与流媒体服务器及客户端。



背景技术:

一些视频应用领域,特别在溯源领域,需要播放大时长视频文件,大时长视频文件不便存储和管理,且播放时seek操作效率低。针对这些不足,现有的技术解决方案通常将一个大时长视频文件拆分成多个较小时长的视频文件,每个较小时长的视频文件独立存储在文件系统中,播放端提供一个文件列表供用户选择被播放的文件。所述解决方案虽然解决了管理问题,但仍存在以下不足:

seek操作仅作用于当前播放的较小时长的视频文件,不能跨文件执行seek操作,而用户观看溯源视频与观看普通视频的方式差别较大,前者主要以浏览求证为主,执行seek的频率和时间偏移量都比较大。就seek操作而言,当不能提供等效于基于原文件的seek操作的体验效果时,有违用户使用溯源视频的习惯。

分成多个较小时长的视频文件后,由于缺乏文件层面相邻文件联动播放机制支持,用户只有通过客户端采用播放计划机制获得连续播放效果。连续播放多个较小时长的视频文件需要多次建立播放会话,而建立播放会话又比较耗时,因此,播放过程中,从一个文件切换到另一个文件存在明显的延时,影响用户体验效果,当网络带宽不理想时尤为明显。

有鉴于此,本申请提供了一种溯源视频文件的分解方法与流媒体服务器及客户端,用于解决上述所述问题。



技术实现要素:

(一)要解决的技术问题

为了解决现有技术的上述问题,本发明提供一种视频文件之分解方法与流媒体服务器及客户端。

(二)技术方案

为了达到上述目的,本发明采用的主要技术方案包括:

一种溯源视频文件的分解方法,用于将第一溯源视频文件分解成一组第二视频文件,所述方法包括:

获取第一溯源视频文件和第一溯源视频文件的描述信息;其中,所述描述信息包括:第一溯源视频文件的主文件名fn、第一溯源视频文件的采样时间ct、第一溯源视频文件的播放时长dt以及第一溯源视频文件的扩展文件名e;

基于第一溯源视频文件、第一溯源视频文件的描述信息以及预先设定的时间片ts,采用第一分解方法将第一溯源视频文件分解出n个编号为1到n的第二视频文件;其中,n为整数,且ts×n大于或等于dt且ts×(n-1)小于dt;

其中,所述第二视频文件存储在流媒体服务器可访问的文件系统或装置中。

优选的,所述用第一分解方法将第一溯源视频文件分解出n个编号为1到n的第二视频文件,具体包括步骤:

获取第一溯源视频文件的视频编码参数;

获取预先设定的第二视频文件的编码类型;所述编码类型包括“h264”;

用时间片ts将所述第一溯源视频文件的播放时长dt分解为n个时间段;其中,所述n个时间段中的前n-1个时间段的时长为ts;所述n个时间段中的第n时间段的时长为dt-ts×(n-1);

用整数i遍历1到n,执行以下步骤:

(1)获取第i个时间段;

(2)通过解码得到所述第一溯源视频文件中属于所述第i个时间段的视频数据;

(3)基于所述频编码参数对所述第i个时间段的视频数据进行编码获取与第i个时间段所对应的第二视频数据;

(4)基于预先设定的f参数集的实例,使用f方法获取第i个时间段所对应的文件名;

所述f参数集的实例包括第一参数、第二参数、第三参数、第四参数、第五参数、第六参数;其中,第一参数的值置为fn,第二参数的值置为dt,第三参数的值置为ts,第四参数置为i,第五参数置为n,第六参数的值置为第二视频文件的编码类型;

(5)基于所述第i个时间段所对应的的文件名和所述第i个时间段所对应的第二视频数据得到第i个时间段对应的第二视频文件。

优选的,基于预先设定的f参数集的实例,使用所述f方法获取第i个时间段所对应的文件名,具体包括步骤:

根据预先设定的f参数集中的与第i个时间段相应的实例,采用预先设定的nlv格式获取与所述实例相应的第一nlv串、第二nlv串、第三nlv串、第四nlv串、第五nlv串、第六nlv串、第七nlv串;

所述第一nlv串包括依次连接的:第一名称子串、第一长度子串、第一值子串;

所述第一名称子串包括:预先设定的第一nlv串名称的字符串;

所述第一长度子串包括:文件类型编码值的字符串的字节数;

所述第一值子串包括:预先设定的文件类型编码值的字符串,如常量串“svf”;

所述第二nlv串包括:第二名称子串、第二长度子串、第二值子串;

所述第二名称子串包括:预先设定的第二nlv串名称的字符串;

所述第二长度子串包括:第二值子串的字节数;

所述第二值子串包括:所述实例中的第一参数的值的字符串;

所述第三nlv串包括:第三名称子串、第三长度子串、第三值子串;

所述第三名称子串包括:预先设定的第三nlv串名称的字符串

所述第三长度子串包括:第三值子串的字节数;

所述第三值子串包括:所述实例中的第二参数的值的字符串;

所述第四nlv串包括:第四名称子串、第四长度子串、第四值子串;

所述第四名称子串包括:预先设定的第四nlv串名称的字符串

所述第四长度子串包括:第四值子串的字节数;

所述第四值子串包括:所述实例中的第三参数的值的字符串;

所述第五nlv串包括:第五名称子串、第五长度子串、第五值子串;

所述第五名称子串包括:预先设定的第五nlv串名称的字符串

所述第五长度子串包括:第五值子串的字节数;

所述第五值子串包括:所述实例中的第四参数的值的字符串;

所述第六nlv串包括:第六名称子串、第六长度子串、第六值子串;

所述第六名称子串包括:预先设定的第六nlv串名称的字符串

所述第六长度子串包括:第六值子串的字节数;

所述第六值子串包括:所述实例中的第五参数的值的字符串;

所述第七nlv串包括:第七名称子串、第七长度子串、第七值子串;

所述第七名称子串包括:预先设定的第六nlv串名称的字符串

所述第七长度子串包括:第七值子串的字节数;

所述第七值子串包括:所述实例中的第六参数的值的字符串;

基于所述nlv串,获取与所述第i个时间段相应的文件名;

其中,所述文件名包括依次连接的第一nlv串和第一串;

所述第一串包括:第二nlv串、第三nlv串、第四nlv串、第五nlv串、第六nlv串、和第七nlv串。

优选的,文件名为依次连接第一nlv串、第二nlv串、第三nlv串、第四nlv串、第五nlv串、第六nlv串、预设的常量串"."和第七nlv串。

优选的,还包括:

基于所述第一视视频文件和所述第一分解方法获取一个列表项;

所述列表项由第一元素、第二元素、第三元素、第四元素、第五元素、第六元素、第七元素组成;

其中,第一元素的值置为fn,第二元素的值置为ts,第三元素的值置为ct,第四元素的值置为dt,第五元素的值置为n,第六元素的值置为e,第七元素的值置为第二视频文件的编码类型;

将所述列表项添加到预置的视频文件列表中;所述视频文件列表存储在客户端可访问的发布装置中。

一种流媒体服务器,用于响应客户端的直接或间接携带目标视频文件名和播放起始时间的播放请求,读出所述播放请求所指定的目标视频文件的视频数据并传输给客户端,其特征在于,包括:

字节流提取单元:用于在一个播放会话中使用递归方式读出目标视频文件和其相邻视频文件的视频数据供给报文生成单元;

报文生成单元:用于从字节流提取单元获取视频数据并将所述视频数据打包成传输协议所支持的传输报文供给网络传输单元;

网络传输单元:用于响应客户端请求和从报文生成单元获取传输报文发送给客户端。

优选的,所述使用递归方式读出目标视频文件和其相邻视频文件的视频数据,包括以下步骤:

b1、读取目标视频文件的视频数据至到遇到文件结束符;

b2、遇到文件结束符时,判断目标视频文件是否存在相邻视频文件;

若否,则向报文生成单元发送读结束信号表示读结束;

若是,则基于目标视频文件的文件名获取相邻视频文件的文件名,并以所述相邻视频文件的文件名所指的视频文件为目标视频文件再次执行步骤b1和b2。

优选的,判断目标视频文件是否存在相邻视频文件,具体包括步骤:

基于所述目标视频文件的文件名获取目标视频文件所属的f参数集的实例;

判断所述实例中的前预先设置的n个字节是否与具有n个字节的第一nlv串相同;

若相同,则判断所述实例中的第四参数的值是否小于所述实例中的第五参数的值;

若小于,则确定所述目标视频文件存在相邻的视频文件。

优选的,当目标视频文件存在相邻文件时,基于目标视频文件的文件名获取相邻视频文件的文件名,具体包括步骤:

解析目标视频文件的文件名得到f参数集的第一实例;

将所述f参数集的第一实例中的第四参数的值加1得到f参数集的第二实例;

基于所述第二实例,采用所述f方法获取相邻视频文件的文件名。

一种客户端,接收来自所述流媒体服务器传输的视频数据报文,对所述视频数据报文解码获取视频图像并显示图像,包括:

视频文件列表:所述视频文件列表至少包含一个列表项;

所述列表项由第一元素、第二元素、第三元素、第四元素、第五元素、第六元素、第七元素组成;

交互单元:接收用户选择列表项并指定播放起始时间指令,响应于所述指令,并基于列表项内容和播放起始时间ptime得到终端播放目标文件名和终端播放起始时间,向所述播放单元发出从终端播放起始时间播放所述终端播放目标视频文件的指令;

播放单元:接收来自交互单元的从播放起始时间播放与所述目标视频文件名对应的目标视频的指令,向流媒体服务器发送请求指令;

所述请求指令包括目标视频文件名和播放起始时间。

优选的,基于列表项内容和播放起始时间ptime得到终端播放目标文件的文件名和终端播放起始时间,具体包括步骤:

由列表项内容获取一个f参数集的实例;

其中,所述实例中的第一参数的值为所述列表项的第一元素的值,所述实例中的第二参数的值为所述列表项的第四元素的值,所述实例中的第三参数的值为所述列表项的第二元素的值,所述实例中的第四参数的值0或其它值,所述实例中的第五参数的值为所述列表项的第五元素的值,所述实例中的第六参数的值为所述列表项的第七元素的值;

根据所述实例中的第五参数的值和/或所述实例中的第三参数的值,确定终端播放目标文件的文件名和终端播放起始时间;

其中,当所述实例中的第五参数的值为0或所述实例中的第三参数的值为0时,采用所述实例中的第一参数的值和所述列表项的第六元素的值获取终端播放目标文件名,将终端播放起始时间置为ptime;

当所述实例中的第五参数的值不为0和所述实例中的第三参数的值不为0时,将所述实例中的第四参数的值置为ptime/ts加1获取第二实例,基于所述第二实例使用f方法获取终端播放目标文件的文件名,且将终端播放起始时间置为表达式ptime-(id-1)×ts的值;其中,ts为所述实例中的第三参数的值,id为所述实例中的第四参数的值。

(三)有益效果

本发明的有益效果是:采用本发明的视频分解方法和流媒体服务器和客户端,在连续播放多个视频文件时有文件层面的媒体服务器和客户端支持,提高了在视频溯源领域内的超长视频文件和多个时间连续的视频文件的管理效率。

进一步的,本发明的视频文件分解方法可用于所有的视频文件的分解。

附图说明

图1为本发明中nlv串结构示意图;

图2为本发明的流媒体服务器;

图3为本发明的客户端示意图;

图4为本发明视频文件列表示意图;

图5为本发明实施例中播放进度条示意图;

图6本发明的视频分解方法流程图。

【附图标记说明】

310:名称域;

320:长度域;

330:值域;

400:流媒体服务器;

410:字节流提取单元;

420:报文生成单元;

430:网络传输单元;

700:客户端;

710:视频文件列表;

720:交互单元;

730:播放单元;

740:同步单元;

800:播放进度条;

820:指示器。

具体实施方式

为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。

视频文件分解的方法

如附图6所示,本实施例中视频文件分解方法用于将一个溯源视频文件(用mvf表示,意为主视频文件)分解成多个播放时长较小的子文件(用svf表示,意为子视频文件),svf也是一种溯源视频文件。

具体包括:

获取mvf描述信息,包括主文件名fn,采样时间ct(日历时间),播放时长dt和扩展名文件名e。

用给定的时间片ts,使用第一分解方法,从mvf分解出系列svf,所有svf按其内容在mvf中出现的顺序组成一个有序序列,记为{svf},{svf}仅逻辑存在。{svf}中的第i个成员用svfi表示,mvf的{svf}用{svf}mvf表示。显然,当ts=dt时,{svf}中仅存在一个成员,所述成员就是mvf本身。

发布mvf和{svf}mvf。

后述中,用svf.data表示一个svf文件的数据,用svf.name表示它的文件名。

本实施例中,第一分解方法为:

运行时输入参数包括一个mvf和其描述信息(fn、ct、dt、e)

将mvf分解成svf时使用的时间片为ts时,分解出n个svf,其中,n为整数,ts×n大于或等于dt且ts×(n-1)小于dt。

具体过程如下所示:

从mvf解析出视频编码参数,如sps和pps。

将dt分成n段,前n-1个段大小相同均为ts,最后一个段的大小为dt-ts×(n-1),得到数组dt={dt1,dt2,…,dtn-1,dtn}。

需要时编辑视频编码参数,如改变其中帧率值的大小。

执行下列伪代码表示的逻辑生成{svf}mvf:

for(i=1;i<=n;i++){

解码获得mvf中属于时段dt[i-1]的视频帧对应的图像vis(videoimageset);

使用视频编码参数对vis进行编码生成分段视频数据fdata;

以fn,ts,i,n和e为参数使用f算法生成一个符合文件系统命名规则的文件名fname;

用fdata和fname创建第i个svf并存储在文件系统中,所述svf的svf.name为fname,svf.data为fdata。其中,i为所述svf的标示符。

}

上述过程完成后,得到由n个svf之文件名组成的有序序列{svfn},其成员依次记为svfn1、svfn2、…、svfnn-1、svfnn,{svfn}通常仅逻辑存在。{svfn}的第i个成员用svfni表示。{svfn}与{svf}的成员间存在一对一关系,且svfni是svfi对应的svf文件名。

{svf}mvf具有以下特点:

(1)每个svf可以独立播放,至少可以在播放mvf的环境下播放;

(2)svf1、svf2、…、svfn-1、svfn合并后的播放效果与mvf的播放效果就溯源领域而言相同;

(3)svf1、svf2、…、svfn-1、svfn连续播放效果与mvf的播放效果就溯源领域而言相同。

本实施例中发布mvf和{svf}mvf包括:

运行时输入参数包括mvf和{svf}mvf。

发布mvf就是将mvf和{svf}mvf的描述信息添加到视频文件列表中。

视频文件列表存储在发布装置上,发布装置可为一个系统或一个服务。

视频文件列表由列表项构成,所述列表项包含fnitem、tsitem、ctitem、dtitem、nitem和eitem域。

发布过程如下:

(1)生成一个新的列表项crow。

(2)将crow中的fnitem置为mvf文件名的fn。

(3)将crow中ctitem置为mvf的采集时间ct。

(4)将crow中dtitem置为mvf的播放总时长dt。

(5)将crow中tsitem置为生成svf时使用的时间片ts。

(6)将crow中nitem置为{svf}mvf的中svf的总个数。

(7)将crow中eitem置为mvf文件名的e。

(8)将所述crow添加到在视频文件列表中。

客户端通过访问所述发布装置获取视频文件列表的列表项信息。

视频文件列表和列表项具有如下特征:

(1)一个列表项对应且仅对应一个mvf,反之亦然。

(2)当列表项的nitem数据项的值为0时,表示此列表项对应的mvf没有被分解。

本实施例中的f算法

f算法作用于mvf,用于生成从所述mvf分解出的svf的文件名。也就是说,本发明中,合法的f算法应用场景都会显式或隐含地关联一个mvf,准确说是关联一个mvf的文件名。

本实施例中f算法生成svf文件名,包括:

获取输入参数,所述参数包含但不仅限于fn、dt、ts、id、n和e,其中,

参数fn的值为mvf的文件名的主名。

参数dt的值为mvf播放时长。

参数ts的值为分段时长。

参数id的值为待生成的svf的标示符,。

参数n的值为分段个数。

参数e的值为mvf的文件名的扩展名。

上述参数称为f参数。

svf文件名由主名mn和扩展名en构成,en取值为e,mn按如下步骤构造:

生成子串tag、fn、ts、dt、id和n的,所述子串按nlv格式组织,其中,

子串tag,用于持有字符串常数“svf”,

子串fn,用于fn持有fn的值,

子串ts,用于ts持有ts的值,

子串dt,用于dt持有dt的值,

子串id,用于id持有id的值,

子串n,用于n持有n的值。

以tag子串为第一子串,按预定次序将其它子串连接在一起得到mn。

在具体实现中,可用其它结构,如tlv,代替nlv结构。

优化操作,构造一个auth子串加入到mn中,所述auth子串用于增强识别一个字符串是否为一个由f算法生成的mn的可靠性。auth子串中持有一个校验值,所述校验值是基于其它子串的运算结果,运算算法包含但不仅限于“所有子串所含字节累加和”。

本实施例中的nlv格式和nlv串

一个nlv格式的实体是一个字符串(nlv串),nlv串作为组成vfs文件名的子串用于表达一个f参数。

nlv串由3个域组成,依次为名称域310、长度域320和值域330,组成结构如附图1所示。

名称域310为:字符串,长度小于32,值为所持f参数的名称,当前取值仅为“tag”或“fn”或“ts”或“n”或“id”或“t”;

长度域320为:字符串,长度固定为4,值为330所占的字节数,如“0023”,当330所占的字节数小于1000时前补0;

值域330为:字符串,长度小于250,为所持f参数值的字符串表达形式的值。

示例:在java中,“fn0019videochinesecabbage”是表达参数fn的nlv串,从该nlv串可以解析出名为fn的f参数的值。

本实施例svf的文件名,可解析出svf文件名的主文件名mn和扩展文件名en。依次从mn中解析出所有nlv串。分别解析每个nlv串获得全部f参数的值,从nlv串结构看解析过程比较显然。

本实施例中svf文件名特征

对任一给定的文件名fname,可判断其是否为f算法生成的文件名。具体实现为:断言fname前10个字节是串“tag0003svf”为真时,则认为fname是由f算法生成的文件名;c算法的另一种具体实现为:断言fname前10个字节是“tag0003svf”为真时,计算fname主文件名的校验值,如果所述校验值与其中auth子串所持的值相同,则认为fname是由f算法生成的文件名。

由f算法生成的svf文件名fname,如果该fname属于某个{svfn}且为svfni,当i<n时,用svfni作参数调可得到svfni+1,具体实现为:从svfni中解析所有f参数,将其中的参数id加1后再用变更后的所述f参数调用f算法所得结果为非空时即为svfni+1。

由f算法生成的svf文件名fname,如果该fname属于某个{svfn}且为svfni,用svfni作参数可得到svfni-1,具体实现为:如果i>1时,从svfni中解析所有f参数,将其中的参数id,对id加1后再用变更后的所述f参数调用f算法所得结果即为svfni-1。

流媒体服务器

如附图2所示,流媒体服务器400用于从mvf或svf获取视频数据,对所述视频数据打包后传输给客户端,包括但不仅限于:字节流提取单元410,报文生成单元420和网络传输单元430;其中,

字节流提取单元410,利用客户端播放请求所携带的pname和ptime,读出对应的视频数据供给报文生成单元420,其中,pname为播放资源文件名,ptime为播放起始时间。

报文生成单元420,用于将所述视频数据打包成传输协议支持的视频数据报文(如rtp报文),并将所述报文提交给网络传输单元430。

网络传输单元430,用于接收客户端的请求,向客户端发送视频数据报文。

所述流媒体服务器400,就rtsp流媒体服务器而言,可通过扩展live555(一个开源rtsp服务器)实现。

本实施例中的字节流提取单元410的工作过程包括:

运行时输入参数包括pname和ptime。

如果pname不是svf文件名,执行以下过程:

(1)如果pname未打开,打开文件pname,(在一个mvf或svf播放中,流媒体服务器400可能多次触发字节流提取单元410)

(2)执行seek操作,使文件读写指针指到ptime处,

(3)读数据并提交给报文生成单元,

如果pname是svf文件名,定义临时变量cvf,执行以下流程:

(1)解析pname得到全部f参数的值,既:fn、dt、ts、id、n和e的值,

(2)当(id-1)×ts>ptime或id×ts<ptime时,执行重定向过程得到新的pname;

(3)将pname赋给cvf。

(4)打开文件cvf(如果cvf未打开),

(5)执行seek操作,使文件读写指针到指ptime处,

(6)读数据并提交给报文生成单元,

(7)当读时遇到eof(文件结束符)后,用cvf为参数获取新的cvf,置ptime为0。如果cvf非空,执行(4)到(7),否则终止本流程。

本实施例的重定向过程包括:

运行时输入参数包括pname,返回修改后的pname。

解析pname得到全部f参数的值,既:fn、dt、ts、id、n和e,

设i=ptime/ts,以fn,ts,i+1,n和e为参数调用f算法生成新的svf文件名赋给pname。

一种客户端

如附图3所示,客户端700供用户选择播放资源,从流媒体服务器获取播放资源数据,对播放资源数据解码得到视频图像并显示图像。包括但不仅限于:视频文件列表710、交互单元720、播放单元730,其中,视频文件列表710,直接或间接持有客户端700可播放的mvf和其{svf}mvf描述信息,如附图4所示。

交互单元720,接收用户操作,响应用户操作并处理用户操作。

播放单元730,响应于用来自交互单元720的播放控制指令,该控制指令携带播放资源文件名pname和播放起始时间ptime信息。连接流媒体服务器400,向流媒体服务器400发送播放请求,所述播放请求直接或间接携带pname和ptime信息。

所述客户端700可选存在同步单元740,所述同步单元740用于同步发布节点上的视频文件列表信息。

所述客户端从本地或发布装置加载视频文件列表710。

如果从发布节点加载视频文件列表710,则由交互单元720或其它组件将发布节点上的变更同步到同步单元710。

本实施例中交互单元处理用户操作包括:

运行时输入参数包括列表项crow和ta或tb。

其中ta为用户从710选择一个列表项(记为crow),设置的起始播放时间,具体实现时,用户进行a操作:点击播放按钮视为提交。

tb为播放中用户重新指定播放时间。具体实现时,用户进行b操作:如附图5所示,用户可通过滑动播放进度条800中的指示器820设置tb,以手指脱离屏幕视为提交。

用户的b操作仅在a操作后出现,b操作继承a操作的crow;ta和tb均属于[0,dt],dt是crow所对应的mvf的播放时长。

将ta或tb赋与ptime作为本次操作的播放起始时间。

用列表项crow和ptime为参数执行二次选择得到播放资源文件名pname。

以pname和ptime为控制参数向播放单元730发送播放控制指令。

本实施例中二次选择得到播放资源文件名pname,包括:

运行时输入参数包括列表项crow和ptime。

列表项crow内容为fnitem、tsitem、ctitem、dtitem,nitem和eitem。

执行下列计算过程之一生成播放资源文件名pname。

(1)如果tsitem或nitem为0,则ptime的值保持不变,且置pname为fnitem⊕“.”⊕eitem,其中,⊕为连接操作符,如,“videofileone”⊕“.”⊕“h264”等于“videofileone.h264”。

(2)如果tsitem和nitem均为非0,设i=ptime/tsitem,以fnitem,tsitem,i,nitem和eitem为参数调用f算法且将调用返回结果赋与pname,且置ptime的值为ptime-(i-1)×tsitem。

本实施例中的溯源视频文件分解方法和流媒体服务器和客户端,提供了在连续播放多个视频文件时的文件层面和媒体服务器和客户端的支持,提高了在视频溯源领域内的大视频文件和多个时间连续的视频文件的管理效率。本实施例中的视频文件分解方法可用于所有的视频文件的分解。

以上结合具体实施例描述了本发明的技术原理,这些描述只是为了解释本发明的原理,不能以任何方式解释为对本发明保护范围的限制。基于此处解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方式,这些方式都将落入本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1