媒体文件分辨率切换的控制方法、装置及存储介质与流程

文档序号:20050011发布日期:2020-03-03 04:31阅读:200来源:国知局
媒体文件分辨率切换的控制方法、装置及存储介质与流程

本公开涉及媒体播放技术,尤其涉及一种媒体文件分辨率切换的控制方法、装置及存储介质。



背景技术:

相关技术中,浏览器并不支持流媒体格式(flv,flashvideo)媒体文件的播放,可通过将flv文件中的二进制数据进行解析,并编码为分段mp4(fmp4,fragmentedmp4)文件,利用浏览器的video元素播放。在通过浏览器播放flv文件的过程中,如果接收到分辨率切换事件(如从低清到高清的切换),且网络状态不支持切换(如带宽不够),将导致切换失败。



技术实现要素:

有鉴于此,本公开实施例提供一种媒体文件分辨率切换的控制方法、装置及存储介质,能够在分辨率切换条件未得到满足时,继续播放原分辨率的flv文件,避免因为分辨率切换失败导致的播放延迟。

第一方面,本公开实施例提供一种媒体文件分辨率切换的控制方法,包括:

在通过网页播放flv文件的过程中,接收到分辨率切换请求;所述分辨率切换请求用于请求播放目标分辨率的flv文件;

基于所述分辨率切换请求,获取切换参数;所述切换参数包括网络状态参数、数据状态参数至少之一;

基于所获取的所述切换参数判断分辨率切换条件是否得到满足,得到判断结果;

当所述判断结果表征所述分辨率切换条件未得到满足时,控制继续播放原分辨率的所述flv文件。

上述方案中,所述获取切换参数包括:

当所述切换参数为所述网络状态参数时,获取进行媒体数据传输的下行网络带宽;

或者,获取进行媒体数据传输的网络传输速度。

上述方案中,所述基于所获取的所述切换参数判断分辨率切换条件是否得到满足,包括:

判断所述下行网络带宽是否达到带宽阈值,并在所述下行网络带宽达到预设的带宽阈值时,确定所述分辨率切换条件得到满足;

或者,判断所述网络传输速度是否达到速度阈值,并在所述网络传输速度达到速度阈值时,确定所述分辨率切换条件得到满足。

上述方案中,所述获取切换参数包括:

当所述切换参数为所述数据状态参数时,发送网络请求;所述网络请求用于请求所述目标分辨率的flv文件中的部分媒体数据;

基于所述网络请求,确定指定时间内所述部分媒体数据的取回状态。

上述方案中,所述基于所获取的所述切换参数判断分辨率切换条件是否得到满足,包括:

当在所述指定时间内所述部分媒体数据的取回状态为未取回时,确定分辨率切换条件未得到满足;

当在所述指定时间内所述部分媒体数据的取回状态为已取回时,确定分辨率切换条件得到满足。

上述方案中,所述方法还包括:

当所述判断结果表征分辨率切换条件得到满足时,获取所述目标分辨率的flv文件中的部分媒体数据;

基于所述部分媒体数据编码得到分段媒体文件;

通过所述网页的媒体源扩展接口,发送所述分段媒体文件给所述网页的媒体元素进行播放。

上述方案中,所述获取所述目标分辨率的flv文件中的部分媒体数据,包括:

基于所述flv文件的播放过程中实时的播放点,确定所述目标分辨率的flv文件中的两个关键帧;

发送网络请求,所述网络请求用于请求获取所述目标分辨率的flv文件中所述两个关键帧之间的媒体数据。

上述方案中,所述获取所述目标分辨率的flv文件中的部分媒体数据,包括:

发送长连接建立请求;

通过建立的所述长连接,获取所述目标分辨率的flv文件中的部分媒体数据。

上述方案中,所述获取所述目标分辨率的flv文件中的部分媒体数据之后,还包括:

基于所述部分媒体数据中所包含的媒体数据类型,将所述部分媒体数据封装为相应类型的标签文件;

基于所述标签文件的类型,分别对所述标签文件进行解析,得到解析后的媒体数据。

上述方案中,所述方法还包括:

存储解析得到的所述媒体数据,使得所述媒体数据在进行媒体文件播放时被调用。

第二方面,本公开实施例提供一种媒体文件分辨率切换的控制装置,包括:

接收单元,用于在通过网页播放流媒体flv文件的过程中,接收到分辨率切换请求;所述分辨率切换请求用于请求播放目标分辨率的flv文件;

获取单元,用于基于所述分辨率切换请求,获取切换参数;所述切换参数包括网络状态参数、数据状态参数至少之一;

判断单元,用于基于所获取的所述切换参数判断分辨率切换条件是否得到满足,得到判断结果;

控制单元,用于当所述判断结果表征所述分辨率切换条件未得到满足时,控制继续播放原分辨率的所述flv文件。

上述方案中,当所述切换参数为所述网络状态参数时,所述获取单元,还用于获取进行媒体数据传输的下行网络带宽;

或者,获取进行媒体数据传输的网络传输速度。

上述方案中,所述判断单元,还用于判断所述下行网络带宽是否达到带宽阈值,并在所述下行网络带宽达到预设的带宽阈值时,确定所述分辨率切换条件得到满足;

或者,判断所述网络传输速度是否达到速度阈值,并在所述网络传输速度达到速度阈值时,确定所述分辨率切换条件得到满足。

上述方案中,当所述切换参数为所述网络状态参数时,所述获取单元,还用于发送网络请求;所述网络请求用于请求所述目标分辨率的flv文件中的部分媒体数据;

基于所述网络请求,确定指定时间内所述部分媒体数据的取回状态。

上述方案中,所述判断单元,还用于当在所述指定时间内所述部分媒体数据的取回状态为未取回时,确定分辨率切换条件未得到满足;

当在所述指定时间内所述部分媒体数据的取回状态为已取回时,确定分辨率切换条件得到满足。

上述方案中,所述控制单元,还用于当所述判断结果表征分辨率切换条件得到满足时,获取所述目标分辨率的flv文件中的部分媒体数据;

基于所述部分媒体数据编码得到分段媒体文件;

通过所述网页的媒体源扩展接口,发送所述分段媒体文件给所述网页的媒体元素进行播放。

上述方案中,所述控制单元,还用于基于所述flv文件的播放过程中实时的播放点,确定所述目标分辨率的flv文件中的两个关键帧;

发送网络请求,所述网络请求用于请求获取所述目标分辨率的flv文件中所述两个关键帧之间的媒体数据。

上述方案中,所述控制单元,还用于发送长连接建立请求;

通过建立的所述长连接,获取所述目标分辨率的flv文件中的部分媒体数据。

上述方案中,所述装置还包括:

封装单元,用于基于所述部分媒体数据中所包含的媒体数据类型,将所述部分媒体数据封装为相应类型的标签文件;

基于所述标签文件的类型,分别对所述标签文件进行解析,得到解析后的媒体数据。

上述方案中,所述装置还包括:

存储单元,用于存储解析得到的所述媒体数据,使得所述媒体数据在进行媒体文件播放时被调用。

第三方面,本公开实施例提供一种媒体文件分辨率切换的控制装置,包括:

存储器,用于存储可执行指令;

处理器,用于执行所述可执行指令时,实现本公开实施例的媒体文件分辨率切换的控制方法。其中,可执行指令可以为安装包、程序、代码、插件、库(动态/静态库)。

第四方面,本公开实施例提供一种存储介质,存储有可执行指令,所述可执行指令被执行时,实现本公开实施例的媒体文件分辨率切换的控制方法。

附图说明

图1为本公开实施例提供的容器的一个可选的结构示意图;

图2为本公开实施例提供的flv文件的一个可选的封装结构示意图;

图3为本公开实施例提供的音频标签文件的结构示意图;

图4为本公开实施例提供的视频标签文件的结构示意图;

图5为本公开实施例提供的脚本标签文件的结构示意图;

图6为本公开实施例提供的fmp4文件的一个可选的封装结构示意图;

图7为本公开实施例提供的媒体文件分辨率切换的控制装置的组成结构示意图一;

图8为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图一;

图9为本公开实施提供的进行flv文件播放的一个可选的流程示意图;

图10为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图二;

图11为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图三;

图12为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图四;

图13为本公开实施例提供的直播场景下flv文件的播放流程示意图;

图14为本公开实施例媒体文件分辨率切换的控制装置的组成示意图二。

具体实施方式

以下结合附图及实施例,对本公开进行进一步详细说明。应当理解,此处所提供的实施例仅仅用以解释本公开,并不用于限定本公开。另外,以下所提供的实施例是用于实施本公开的部分实施例,而非提供实施本公开的全部实施例,在不冲突的情况下,本公开实施例记载的技术方案可以任意组合的方式实施。

需要说明的是,在本公开实施例中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的方法或者装置不仅包括所明确记载的要素,而且还包括没有明确列出的其他要素,或者是还包括为实施方法或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的方法或者装置中还存在另外的相关要素(例如方法中的步骤或者装置中的单元,例如的单元可以是部分电路、部分处理器、部分程序或软件等等)。

例如,本公开实施例提供的媒体文件分辨率切换的控制方法包含了一系列的步骤,但是本公开实施例提供的媒体文件分辨率切换的控制方法不限于所记载的步骤,同样地,本公开实施例提供的媒体文件分辨率切换的控制装置包括了一系列单元,但是本公开实施例提供的装置不限于包括所明确记载的单元,还可以包括为获取相关信息、或基于信息进行处理时所需要设置的单元。

除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本公开。

对本公开实施例进行进一步详细说明之前,对本公开实施例中涉及的名词和术语进行说明,本公开实施例中涉及的名词和术语适用于如下的解释。

1)媒体文件,以容器(box,也称为盒子)的方式存储进行编码的媒体数据(例如音频数据和视频数据中的至少一种)的文件,其中还包括元数据,即描述媒体数据的数据,元数据中承载有确保媒体数据被正确解码的媒体信息。

例如,采用流媒体封装格式封装多媒体数据形成的媒体文件被称为flv文件,典型地,flv文件中存储高级视频编码(avc,advancedvideocoding,即h.264)或mpeg-4(part2)规范编码的视频数据和高级音频编码(aac,advancedaudiocoding)规范编码的音频数据,当然不排除视频和音频的其他编码方式。

2)容器(box),也称为盒子,由唯一的类型标识符和长度定义的面向对象的构件,参见图1,是本公开实施例提供的容器的一个可选的结构示意图,包括容器头部(boxheader)和容器数据(boxdata),其中填充有用以表达各种信息的二进制数据。

容器头部包括容量(size)和类型(type),容量指明了容器所占用的存储空间的大小(本文中也称为容量或长度),类型指明了容器的类型。

3)元数据容器,媒体文件中用于存储元数据(即描述媒体数据容器中存储的多媒体数据的数据)的容器,在flv文件中的元数据容器为scripttag,scripttag中存储的二进制数据表达的信息称为媒体信息,媒体信息中包含关于视频和/或音频的播放信息,如时长、创建时间和修改时间等。

4)媒体数据容器,媒体文件中用于存储多媒体数据的容器,例如,flv文件中的媒体数据容器为标签(tag),参见图2,是本公开实施例提供的flv文件的一个可选的封装结构示意图,flv文件由一个flvheader文件头和文件体(filebody)构成,其中,文件体由一个一个的tag及tagsize对组成的,tag可以分成三类:audiotag、videotag、scripttag,分别代表音频流,视频流,脚本流(关键字或者文件信息之类),每个tag只能包含以上三种类型的数据中的一种,以下分别进行说明。

音频标签文件(audiotag)开始的第1个字节包含了音频数据的参数信息,从第2个字节开始为音频流数据,参见图3,为本公开实施例提供的音频标签文件的结构示意图,第1个字节的前4位的数值表示了音频编码类型,第5-6位的数值表示音频采样率,第7位表示音频采样精度,第8位表示音频类型。

视频标签文件(videotag)开始的第1个字节包含视频数据的参数信息,从第2个字节为视频流数据,参见图4,为本公开实施例提供的视频标签文件的结构示意图,第1个字节的前4位的数值表示帧类型,第1个字节的后4位的数值表示视频编码类型。

脚本标签文件(scripttag),该类型tag又通常被称为metadatatag,会放一些关于flv视频和音频的元数据信息,如:duration、width、height等。通常该类型tag会跟在fileheader后面作为第一个tag出现,而且只有一个,参见图5,为本公开实施例提供的脚本标签文件的结构示意图。

5)分段媒体文件,媒体文件经过分割形成的子文件,每个分段媒体文件能够被独立解码。

以flv文件为例,flv文件中的媒体数据根据关键帧分割,分割后的媒体数据与对应的元数据封装形成分段mp4(fmp4,fragmentedmp4)文件,每个fmp4文件中的元数据能够保证媒体数据被正确解码。

例如,在将如图2所示的flv文件转换为多个fmp4文件时,参见图6,是本公开实施例提供的fmp4文件的一个可选的封装结构示意图,一个flv文件可以转换为多个fmp4文件,每个fmp4文件包括三个基本的容器:moov容器、moof容器和mdat容器。

moov容器包括了mp4文件级别的元数据,用来描述fmp4文件所来源的mp4文件中的全部媒体数据,例如mp4文件的时长、创建时间和修改时间等。

moof容器存储了分段级别的元数据,用于描述所在的fmp4文件中封装的媒体数据,保证fmp4中的媒体数据能够被解码。

1个moof容器和1个mdat容器组成分段mp4文件的1个分段,1个分段mp4文件中可以包括1个或多个这样的分段,每个分段中封装的元数据保证分段中封装的媒体数据能够被独立解码。

6)媒体资源扩展(mse,mediasourceextensions)接口,在网页中实现的面向播放器的接口,在网页中的加载期间通过浏览器的解释器解释、执行前端编程语言(例如javascript)而实现,向播放器提供调用超文本标记语言(html)媒体元素(mediaelement)的播放媒体流的功能,例如使用视频元素<video>、以及音频元素<audio>来实现视频/音频的播放功能。

7)流媒体格式,把媒体数据封装为流媒体的媒体文件,媒体文件不必完整下载、不需要额外转码,即可被解码播放,即,原生地支持一边下载,一边播放的封装技术。典型的流媒体格式的文件包括:基于http直播流(hls,httplivestreaming)技术的ts媒体文件分片,flv(flashvideo)文件等。

首先说明实现本公开实施例的媒体文件分辨率切换的控制装置,媒体文件分辨率切换的控制装置可以提供为硬件、软件或者软硬件结合的方式。

下面说明媒体文件分辨率切换的控制装置的软件硬件结合的实施,参见图7,图7为本公开实施例提供的媒体文件分辨率切换的控制装置的一个可选的组成结构示意图,本公开实施例的媒体文件分辨率切换的控制装置可以以各种形式来实施,如:由智能手机、平板电脑和台式机等终端单独实施,或者由终端、服务器协同实施。下面对本公开实施例的媒体文件分辨率切换的控制装置的硬件结构做详细说明,可以理解,图7仅仅示出了媒体文件分辨率切换的控制装置的示例性结构而非全部结构,根据需要可以实施图7示出的部分结构或全部结构。

本公开实施例提供的媒体文件分辨率切换的控制装置100包括:至少一个处理器101、存储器102、用户接口103和至少一个网络接口104。媒体文件分辨率切换的控制装置100中的各个组件通过总线系统105耦合在一起。可以理解,总线系统105用于实现这些组件之间的连接通信。总线系统105除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统105。

其中,用户接口103可以包括显示器、键盘、鼠标、轨迹球、点击轮、按键、按钮、触感板或者触摸屏等。

可以理解,存储器102可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。

本公开实施例中的存储器102用于存储各种类型的数据以支持媒体文件分辨率切换的控制装置100的操作。这些数据的示例包括:用于在媒体文件分辨率切换的控制装置100上操作的任何可执行指令,如可执行指令1021,实现本公开实施例的媒体文件分辨率切换的控制方法的程序可以包含在可执行指令1021中。

本公开实施例揭示的媒体文件分辨率切换的控制方法可以应用于处理器101中,或者由处理器101实现。处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,媒体文件分辨率切换的控制方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器、数字信号处理器(dsp,digitalsignalprocessor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器101可以实现或者执行本公开实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本公开实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器102,处理器101读取存储器102中的信息,结合其硬件完成本公开实施例提供的媒体文件分辨率切换的控制方法的步骤。

下面说明媒体文件分辨率切换的控制装置的纯硬件实施,实现本公开实施例媒体文件分辨率切换的控制装置可以被一个或多个应用专用集成电路(asic,applicationspecificintegratedcircuit)、数字信号处理(dsp,digitalsignalprocessing)、可编程逻辑器件(pld,programmablelogicdevice)、复杂可编程逻辑器件(cpld,complexprogrammablelogicdevice)、现场可编程门阵列(fpga,field-programmablegatearray)或其他电子元件实现,用于执行实现本公开实施例提供的媒体文件分辨率切换的控制方法。

下面说明媒体文件分辨率切换的控制装置的纯软件实施,实现本公开实施例媒体文件分辨率切换的控制装置可以为应用程序或插件,或者采用二者结合的方式实现。

作为示例,应用程序可以是专用于进行媒体文件播放的客户端,也可以是将媒体文件播放功能作为可选功能的客户端,通过安装相应的插件实现。

作为示例,插件可以实现为应用程序的功能升级安装包,在用特定应用程序中叠加媒体文件播放的功能;也可以是媒体播放的网页中的元素,采用前端语言实现,通过被网页直接解释执行而在网页中实现媒体文件播放的功能。

接下来以网页内嵌播放器,播放器使用网页的超文本标记语言(html,hypertextmarkuplanguage)5媒体元素播放媒体文件为例,对本公开实施例提供的媒体文件分辨率切换的控制方法进行说明,本公开实施例中的网页既可以是浏览器的网页,也可以是内嵌浏览器内核的应用(app,application)的网页,网页通过解析、执行播放器的js(javascript)代码实现播放器实例。

图8示出了本公开实施例提供的媒体文件分辨率切换的控制方法的一个可选的流程示意图,参见图8,本公开实施例提供的媒体文件分辨率切换的控制方法涉及步骤201至步骤204,以下分别进行说明。

步骤201:播放器在通过网页播放flv文件的过程中,接收到分辨率切换请求,以请求切换至目标分辨率的flv文件的播放。

首先对本公开实施例中flv文件的播放进行说明。

播放器接收到用户的播放请求后,从服务器处获取源媒体文件为flv文件的媒体数据,将所获取的媒体数据转换为fmp4格式的媒体文件,通过媒体元素(video标签)进行播放。在通过网页播放flv文件的过程中,当用户依据实际情况需要进行分辨率切换时,如由低清晰度切换到高清晰度,触发分辨率切换请求,以请求播放源文件为目标分辨率的flv文件。

参见图9,为本公开实施提供的进行flv文件播放的一个可选的流程示意图,播放器从服务器处获取flv文件的媒体数据,依据数据类型(脚本数据、视频数据、音频数据)将其封装为不同类型的标签文件(脚本标签、视频标签、音频标签),将封装得到的标签文件缓存至缓存器,调用对应类型的解析器,即图9中所示的meta信息解码器、音频解码器及视频解码器,对缓存的标签文件进行解析,并将解析结果缓存至缓存器,同时,调用编码器从缓存器获取子解析器解析得到的数据,进行编码得到fmp4文件,将编码得到的fmp4文件添加到媒体资源扩展接口中的媒体源对象,并调用媒体资源扩展接口创建对应媒体源对象的虚拟地址,并向网页的媒体元素(video标签)传递虚拟地址以进行视频播放。例如,播放器执行媒体源扩展接口中封装的createobjecturl方法,创建对应媒体源对象的虚拟地址,即虚拟统一资源定位符(url,uniformresourcelocator),其中封装有blob类型的分段媒体文件。如此,将flv格式的媒体文件中的媒体数据转换成分段媒体文件,并通过网页的媒体源扩展接口,发送给网页的媒体元素进行解码播放,克服了相关技术中不支持flv格式的媒体文件播放的问题。

步骤202:基于分辨率切换请求,获取切换参数。

在一实施例中,所述切换参数包括网络状态参数、数据状态参数至少之一。

当切换参数包括网络状态参数时,网络状态参数可以为进行媒体数据传输的下行网络带宽,或者为进行媒体数据传输的网络传输速度;相应的,播放器可以实时监测网络状态,对下行网络带宽进行检测,和/或监测网络传输速度。

当切换参数包括数据状态参数时,数据状态参数可以为指定时间(可以依据实际需要进行设定)内对目标分辨率的flv文件中媒体数据的取回状态(取回或未取回)。

步骤203:基于所获取的切换参数判断分辨率切换条件是否得到满足,得到判断结果。

在一实施例中,当所述切换参数包括所述网络状态参数时,可通过如下方式判断分辨率切换条件是否得到满足:

当网络状态参数为下行网络带宽时,判断下行网络带宽是否达到预设的带宽阈值,并在所述下行网络带宽达到预设的带宽阈值时,确定所述分辨率切换条件得到满足,也即基于当前的下行网络带宽能够成功的实现分辨率的切换(由低分辨率到高分辨率,即由低清到高清);当下行网络带宽小于预设的带宽阈值时,确定分辨率切换条件未得到满足,也即,基于当前的下行网络带宽若进行低分辨率到高分辨率的切换,由于下行网络带宽较小,使得在进行目标分辨率的flv文件中媒体数据的获取时,数据获取失败,进而出现切换失败,导致播放延迟;

或者,当网络状态参数为网络传输速度时,判断网络传输速度是否达到预设的速度阈值,并在所述网络传输速度达到速度阈值时,确定所述分辨率切换条件得到满足,也即基于当前的网络传输速度能够成功的实现分辨率的切换(由低分辨率到高分辨率,即由低清到高清);在网络传输速度小于预设的速度阈值时,确定所述分辨率切换条件未得到满足,也即,基于当前的网络传输速度若进行低分辨率到高分辨率的切换,由于网络传输速度较小,目标分辨率的flv文件中的媒体数据获取超时或失败,进而出现切换失败,导致播放延迟。

在一实施例中,当所述切换参数包括数据状态参数,数据状态参数为数据取回状态时,可通过如下方式判断分辨率切换条件是否得到满足:

判断指定时间内是否取回了目标分辨率的flv文件中的媒体数据,若数据取回状态为已取回,确定所述分辨率切换条件得到满足;当在指定时间内未取回目标分辨率的flv文件中的媒体数据,即数据取回状态为未取回时,确定所述分辨率切换条件未得到满足。

在一实施例中,当所述切换参数包括数据状态参数,数据状态参数为数据取回状态时,可通过如下方式判断分辨率切换条件是否得到满足:

判断在指定的数据请求次数(依据实际需要进行设定,如3次)内,是否取回了目标分辨率的flv文件中的媒体数据,若数据取回状态为已取回,确定所述分辨率切换条件得到满足;当在指定的数据请求次数内未取回目标分辨率的flv文件中的媒体数据,即数据取回状态为未取回时,确定所述分辨率切换条件未得到满足。

将网络状态和/或数据状态作为分辨率切换条件是否得到满足的判断依据,考虑了网络状态和/或数据状态对分辨率切换所造成的影响,使得能够基于网络状态和/或数据状态的不同情况对flv文件播放的切换进行控制。

步骤204:当所述判断结果表征分辨率切换条件未得到满足时,控制继续播放原分辨率的所述flv文件。

这里,当通过网络状态参数和/或数据状态参数确定分辨率切换条件未得到满足,即当前的网络状态、数据状态不足以支持切换至目标分辨率的flv文件的播放时,放弃分辨率的切换,基于当前的播放点继续进行原分辨率的flv文件的播放,进而避免了因为分辨率切换失败导致的播放延迟。

在一实施例中,当判断结果表征分辨率切换条件得到满足时,控制播放目标分辨率的flv文件,具体的,在实际实施时,可通过如下方式播放目标分辨率的flv文件:

获取目标分辨率的flv文件中的媒体数据;将所获取的所述媒体数据封装为标签文件,对所封装的所述标签文件进行解析,得到解析后的数据;基于解析得到的数据构造分段媒体文件;将所得到的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;向所述网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

这里,获取目标分辨率的flv文件中的媒体数据,可以为获取目标分辨率的flv文件中的部分媒体数据,在一实施例中,播放器对flv文件的播放场景为点播,可通过如下方式获取目标分辨率的flv文件中的部分媒体数据:

播放器基于flv文件的播放过程中实时的播放点,确定目标分辨率的flv文件中的两个关键帧;发送网络请求给服务器,以请求获取目标分辨率的flv文件中两个关键帧之间的媒体数据。

这里,对基于播放点确定两个关键帧进行说明。播放器在播放媒体文件的过程中,通过加载关键帧之间的数据实现媒体文件的播放,即播放器以两个关键帧之间的媒体数据为播放加载单元。就播放点而言,可以是通过连续播放媒体文件(也即在用户未加以干预的情况下自然播放)的方式到达的播放时刻,例如从第30分钟开始播放到第40分钟的播放点;也可以是通过跳转的方式(也即用户通过光标点击进度条实现页面跳转)到达媒体文件到达的播放时刻,例如原播放点为播放进度的20%,跳转后的播放点为播放进度的30%。

在实际应用中,基于播放点所确定的两个关键帧可以为媒体文件中相邻的两个关键帧,或者两个关键帧之间存在其它的一个或多个关键帧,而两个关键帧之间的关键帧的数量,可以根据浏览器的缓存性能(如可用缓存的容量)、网络性能(网络带宽)等确定,还可以依据实际需要进行设定。

在一实施例中,播放器对flv文件的播放场景为直播,播放器发送长连接建立请求给服务器,以与直播服务器建立长连接,在主播端推流到直播服务器的过程中,播放器通过长连接从服务器处获取目标分辨率的flv文件中的部分媒体数据,并释放掉与服务器建立的用于获取原分辨率的flv文件的长连接。

在一实施例中,在获取目标分辨率的flv文件中的部分媒体数据后,播放器调用标签封装器基于不同的数据类型将所获取的目标分辨率的flv文件中的部分媒体数据封装为不同类型的标签文件(脚本标签文件、视频标签文件、音频标签文件),然后调用相应类型的标签解析器(用于解析视频标签文件的视频解析器、用于解析音频标签文件的音频解析器、用于解析脚本标签文件的脚本解析器)对封装得到的不同类型的标签文件进行解析,得到解析后的媒体数据。

在一实施例中,播放器将所获取的目标分辨率的flv文件中的部分媒体数据封装为不同类型的标签文件之后,将封装得到的不同类型的标签文件缓存至缓存器,以供在进行数据解析及数据编码时,文件解析器及编码器调用。如此,实现了文件解析器及编码器的数据共享,最大程度降低了在flv文件的解析阶段对flv转换为fmp4播放所造成的延迟。

在一实施例中,在标签解析器对标签文件进行解析后,可将解析结果缓存至缓存器,以供编码器在进行分段媒体文件构造时调用。

在实际实施时,播放器将构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象之后,调用媒体资源扩展接口创建对应媒体源对象的虚拟地址。例如,播放器执行媒体源扩展接口中封装的createobjecturl方法,创建对应媒体源对象的虚拟地址,即url,其中封装有blob类型的分段媒体文件。

此外,播放器将mediasource对象设置为虚拟url的源(src)属性,也就是将虚拟url与网页中的媒体元素如video/audio元素绑定,这个过程也称为将媒体源对象关联到网页中的媒体元素。

在本公开实施例中,添加到媒体源对象的分段媒体文件,也即是:当前播放的分段媒体文件。例如当前在播放分段媒体文件1,已经构造了后续的分段媒体文件2、3,则构造的分段媒体文件2、3将被添加到mse的sourcebuffer中进行预加载,相应的,播放器所获取的媒体数据对应的两个关键帧中的第一关键帧则是分段媒体文件1之后出现的第一个关键帧。

在实际应用中,播放器中包括有调用媒体元素播放虚拟url的语句,例如:<audio>虚拟url。当浏览器解释网页中嵌入的播放器中对应的语句时,使得浏览器的媒体元素到虚拟url绑定的sourcebuffer对象中读取分段媒体文件,并解码播放。

接下来以播放器内嵌于浏览器的网页,网页通过解析、执行播放器的js代码实现播放器实例,对本公开实施例的媒体文件分辨率切换的控制方法进行说明。图10为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图,针对点播的视频播放场景,参见图10,本公开实施例提供的媒体文件分辨率切换的控制方法包括:

步骤301:播放器在通过网页播放flv文件的过程中,接收到分辨率切换请求,以请求播放目标分辨率的flv文件。

这里,播放器通过网页播放flv文件的过程可参见图9,此处不做赘述。

步骤302:基于分辨率切换请求,确定当前的下行网络带宽。

步骤303:判断当前的下行网络带宽是否达到预设的带宽阈值,如果达到预设的带宽阈值,执行步骤304;如果小于预设的带宽阈值,执行步骤309。

步骤304:基于当前的播放点,确定目标分辨率的flv文件中的两个关键帧。

这里的播放点可以是通过连续播放媒体文件的方式到达的播放时刻,例如从第30分钟开始播放到第40分钟的播放点;也可以是通过跳转的方式到达媒体文件到达的播放时刻。

在实际应用中,基于播放点所确定的两个关键帧可以为媒体文件中相邻的两个关键帧,或者两个关键帧之间存在其它的一个或多个关键帧,而两个关键帧之间的关键帧的数量,可以根据浏览器的缓存性能(如可用缓存的容量)、网络性能(网络带宽)等确定,还可以依据实际需要进行设定。

步骤305:发送网络请求给服务器,以请求获取目标分辨率的flv文件中两个关键帧之间的媒体数据。

步骤306:将请求得到的所述媒体数据封装为不同数据类型的标签文件。

这里,在实际应用中,将从服务器处请求得到的目标分辨率的flv文件中的媒体数据封装为脚本tag、视频tag、音频tag。

步骤307:调用相应类型的解析器对封装得到的不同数据类型的标签文件进行解析,并缓存解析结果。

步骤308:基于解析器的解析结果构造分段媒体文件,并通过mse发送给网页的媒体元素进行播放。

这里,在实际实施时,播放器将所得到的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;向所述网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

步骤309:控制继续播放原分辨率的flv文件。

图11为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图,针对点播的视频播放场景,参见图11,本公开实施例提供的媒体文件分辨率切换的控制方法包括:

步骤401:播放器在通过网页播放flv文件的过程中,接收到分辨率切换请求,以请求播放目标分辨率的flv文件。

这里,播放器通过网页播放flv文件的过程可参见图9,此处不做赘述。

步骤402:基于分辨率切换请求,发送针对目标分辨率的flv文件的媒体数据请求给服务器。

这里,在实际应用中,播放器可基于当前播放的原分辨率的flv文件的播放点,发送针对目标分辨率的flv文件的媒体数据请求,以请求目标分辨率的flv文件中的部分媒体数据,在一实施例中,播放器基于当前的播放点,请求目标分辨率的flv文件中两个关键帧之间的媒体数据,具体地,可以为目标分辨率的flv文件中相邻的两个关键帧,或者两个关键帧之间存在其它的一个或多个关键帧,而两个关键帧之间的关键帧的数量,可以依据实际需要进行设定。

步骤403:判断指定时间内的数据取回状态是否为已取回,如果数据取回状态是已取回,执行步骤404;如果数据取回状态是未取回,执行步骤407。

这里,上述指定时间的大小可以依据实际需要进行设定。

步骤404:将从服务器处取回的媒体数据封装为不同数据类型的标签文件。

这里,在实际应用中,将从服务器处请求得到的目标分辨率的flv文件中的媒体数据封装为脚本tag、视频tag、音频tag。

步骤405:调用相应类型的解析器对封装得到的不同数据类型的标签文件进行解析,并缓存解析结果。

步骤406:基于解析器的解析结果构造分段媒体文件,并通过mse发送给网页的媒体元素进行播放。

这里,在实际实施时,播放器将所得到的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;向所述网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

步骤407:控制继续播放原分辨率的flv文件。

图12为本公开实施例提供的媒体文件分辨率切换的控制方法的流程示意图,针对直播的视频播放场景,参见图12,本公开实施例提供的媒体文件分辨率切换的控制方法包括:

步骤501:播放器在通过网页播放flv文件的过程中,接收到分辨率切换请求,以请求播放目标分辨率的flv文件。

这里,在视频直播场景下flv文件的播放流程示意图如图13所示,主播端进行媒体数据采集后,推流至直播服务器,直播服务器与请求模块之间建立有长连接,并通过长连接不断的获取服务器发送的flv格式封装的媒体数据,将所获取的媒体数据封装为不同类型的标签文件(音频标签文件、视频标签文件、脚本标签文件),控制器(控制中枢)调用相应类型的解码器(音频解码器、视频解码器、脚本解码器)对获取的标签文件进行解析,并将解析结果缓存至缓存器,控制器调用编码器对缓存器中的媒体数据进行编码,得到分段媒体文件(fmp4文件),将构造得到的分段媒体文件添加到媒体资源扩展接口中的媒体源对象,通过mse创建对应媒体源对象的虚拟地址,将虚拟地址发送给浏览器的video元素进行播放。

需要说明的是,播放器的js实现包括图13中请求模块、解码器、编码器、控制器的功能。

步骤502:播放器发送长连接建立请求给直播服务器,以与直播服务器建立长连接。

这里,播放器在接收到分辨率切换请求后,与直播服务器重新建立长连接,以通过重新建立的长连接从直播服务器处获取目标分辨率的flv文件中的部分媒体数据。

步骤503:基于建立的长连接,发送针对目标分辨率的flv文件的媒体数据请求给直播服务器。

这里,在实际应用中,播放器可基于当前播放的原分辨率的flv文件的播放点,发送针对目标分辨率的flv文件的媒体数据请求,以请求目标分辨率的flv文件中的部分媒体数据,在一实施例中,播放器基于当前的播放点,请求目标分辨率的flv文件中两个关键帧之间的媒体数据,具体地,可以为目标分辨率的flv文件中相邻的两个关键帧,或者两个关键帧之间存在其它的一个或多个关键帧,而两个关键帧之间的关键帧的数量,可以依据实际需要进行设定。

步骤504:判断指定时间内的数据取回状态是否为已取回,如果数据取回状态是已取回,执行步骤505;如果数据取回状态是未取回,执行步骤508。

这里,上述指定时间的大小可以依据实际需要进行设定。

步骤505:将从直播服务器处取回的媒体数据封装为不同数据类型的标签文件。

这里,在实际应用中,将从服务器处请求得到的目标分辨率的flv文件中的媒体数据封装为脚本tag、视频tag、音频tag。

步骤506:调用相应类型的解析器对封装得到的不同数据类型的标签文件进行解析,并缓存解析结果。

步骤507:基于解析器的解析结果构造分段媒体文件,并通过mse发送给网页的媒体元素进行播放。

这里,在实际实施时,播放器将所得到的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;向所述网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

步骤508:控制继续播放原分辨率的flv文件。

接下来继续对媒体文件分辨率切换的控制装置进行说明,作为媒体文件分辨率切换的控制装置的硬件实施或软件实施的示例,媒体文件分辨率切换的控制装置可以提供为一系列在信号/信息/数据层面存在耦合关系的模块,下面将结合图14进行说明,参见图14,图14为本公开实施例媒体文件分辨率切换的控制装置一个可选的组成示意图,示出了实现媒体文件分辨率切换的控制装置包括的一系列单元,但是媒体文件分辨率切换的控制装置的单元结构不仅限于图14所示,例如,可以对其中的单元根据所实现的不同功能而进一步拆分或者合并。参见图14,媒体文件分辨率切换的控制装置900包括:

接收单元91,用于在通过网页播放流媒体flv文件的过程中,接收到分辨率切换请求;所述分辨率切换请求用于请求播放目标分辨率的flv文件;

获取单元92,用于基于所述分辨率切换请求,获取切换参数;所述切换参数包括网络状态参数、数据状态参数至少之一;

判断单元93,用于基于所获取的所述切换参数判断分辨率切换条件是否得到满足,得到判断结果;

控制单元94,用于当所述判断结果表征所述分辨率切换条件未得到满足时,控制继续播放原分辨率的所述flv文件。

在一实施例中,当所述切换参数包括所述网络状态参数时,所述获取单元,还用于获取进行媒体数据传输的下行网络带宽;

或者,获取进行媒体数据传输的网络传输速度。

在一实施例中,所述判断单元,还用于判断所述下行网络带宽是否达到带宽阈值,并在所述下行网络带宽达到预设的带宽阈值时,确定所述分辨率切换条件得到满足;

或者,判断所述网络传输速度是否达到速度阈值,并在所述网络传输速度达到速度阈值时,确定所述分辨率切换条件得到满足。

在一实施例中,当所述切换参数包括所述网络状态参数时,所述获取单元,还用于发送网络请求;所述网络请求用于请求所述目标分辨率的flv文件中的部分媒体数据;

基于所述网络请求,确定指定时间内所述部分媒体数据的取回状态。

在一实施例中,所述判断单元,还用于当在所述指定时间内所述部分媒体数据的取回状态为未取回时,确定分辨率切换条件未得到满足;

当在所述指定时间内所述部分媒体数据的取回状态为已取回时,确定分辨率切换条件得到满足。

在一实施例中,所述控制单元,还用于当所述判断结果表征分辨率切换条件得到满足时,获取所述目标分辨率的flv文件中的部分媒体数据;

基于所述部分媒体数据编码得到分段媒体文件;

通过所述网页的媒体源扩展接口,发送所述分段媒体文件给所述网页的媒体元素进行播放。

在一实施例中,所述控制单元,还用于基于所述flv文件的播放过程中实时的播放点,确定所述目标分辨率的flv文件中的两个关键帧;

发送网络请求,所述网络请求用于请求获取所述目标分辨率的flv文件中所述两个关键帧之间的媒体数据。

在一实施例中,所述控制单元,还用于发送长连接建立请求;

通过建立的所述长连接,获取所述目标分辨率的flv文件中的部分媒体数据。

在一实施例中,所述装置还包括:

封装单元,用于基于所述部分媒体数据中所包含的媒体数据类型,将所述部分媒体数据封装为相应类型的标签文件;

基于所述标签文件的类型,分别对所述标签文件进行解析,得到解析后的媒体数据。

在一实施例中,所述装置还包括:

存储单元,用于存储解析得到的所述媒体数据,使得所述媒体数据在进行媒体文件播放时被调用。

本公开实施例还提供了一种可读存储介质,存储介质可以包括:移动存储设备、随机存取存储器(ram,randomaccessmemory)、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。所述可读存储介质存储有可执行指令;

所述可执行指令,用于被处理器执行时实现上述基于参数封装的媒体文件播放方法。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

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