非流媒体文件的网页播放方法、装置及存储介质

文档序号:1784943 发布日期:2019-12-06 浏览:7次 >En<

阅读说明:本技术 非流媒体文件的网页播放方法、装置及存储介质 (Webpage playing method, device and storage medium of non-streaming media file ) 是由 银国徽 于 2018-05-29 设计创作,主要内容包括:本公开提供了一种非流媒体文件的网页播放方法、装置及存储介质,方法包括:基于内嵌播放器的网页中播放的媒体文件的两个关键帧,获取所述媒体文件中部分的媒体数据,所述媒体文件采用非流媒体格式;基于所述两个关键帧之间的媒体数据构造分段媒体文件;将所构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;向网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。(the present disclosure provides a method, an apparatus and a storage medium for playing a webpage of a non-streaming media file, wherein the method comprises: acquiring partial media data in a media file based on two key frames of the media file played in a webpage of an embedded player, wherein the media file adopts a non-streaming media format; constructing a segmented media file based on the media data between the two key frames; adding the constructed segmented media file to a media source object in a media resource extension interface; and transmitting a virtual address to the media element of the webpage, wherein the virtual address is used for playing the media element by taking the media source object as a data source.)

非流媒体文件的网页播放方法、装置及存储介质

技术领域

本公开涉及媒体播放技术,尤其涉及一种非流媒体文件的网页播放方法、装置及存储介质。

背景技术

在网页中播放媒体文件时,网页会基于当前的播放点预加载后续的媒体数据,直至加载了从当前播放点到结束时间的全部媒体数据。

当播放点发生跳转时,根据不同网页的加载策略,部分网页会基于新的播放点重新进行预加载,部分网页也可能会复用已经取回的媒体数据。

事实上,用户在播放媒体文件中往往进行播放进度的跳转,因此,不管采用现有技术的哪种加载策略,预加载的媒体数据对流量和带宽的不必要消耗,导致网页中的其他业务出现延迟。

发明内容

有鉴于此,本公开实施例提供一种非流媒体文件的网页播放方法、装置及存储介质,能够避免流量和带宽的不必要消耗,确保网页中的其他业务的实时性能。

本公开实施例的技术方案是这样实现的:

第一方面,本公开实施例提供一种非流媒体文件的网页播放方法,包括:

基于在网页中播放的媒体文件的两个关键帧,获取所述媒体文件中部分的媒体数据,所述媒体文件采用非流媒体格式;

基于所述两个关键帧之间的媒体数据构造分段媒体文件;

将所构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;

向网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

第二方面,本公开实施例提供一种非流媒体文件的网页播放装置,包括:

获取单元,用于基于网页中播放的媒体文件的两个关键帧,获取所述媒体文件中部分的媒体数据,所述媒体文件采用非流媒体格式;

构造单元,用于基于所述两个关键帧之间的媒体数据构造分段媒体文件;

添加单元,用于将所构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;

传输单元,用于向网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

第三方面,本公开实施例提供一种非流媒体文件的网页播放装置,包括:

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

处理器,用于执行所述可执行指令时,实现本公开实施例的非流媒体文件的网页播放方法。其中,可执行指令可以为安装包、程序、代码、插件、库(动态/静态库)。

第四方面,本公开实施例提供一种存储介质,存储有可执行指令,所述可执行指令被执行时,实现本公开实施例的非流媒体文件的网页播放方法。

应用本公开上述实施例具有以下有益效果:

1)、播放器获取媒体文件的两个关键帧之间的部分媒体数据,进行分段媒体文件构造及播放,实现了对播放媒体文件过程中,媒体数据加载的控制,避免了流量及带宽的不必要消耗。

2)、将非流媒体格式的媒体文件中的媒体数据转换成分段媒体文件,并通过网页的媒体源扩展接口,发送给网页的媒体元素进行解码播放,实现了通过网页播放非流媒体格式的媒体文件,克服了非流媒体封装格式文件需要完整下载后才可以独立播放的限制。

3)、所封装得到的分段媒体文件基于获取的媒体文件的部分媒体数据,而非媒体文件的全部数据,如此,转换延迟小,不需要预先存储,除了原始的媒体文件不会占用额外的存储空间,显著降低了对存储空间的占用。

4)网页的媒体元素通过媒体源扩展接口获取分段媒体文件进行解码播放,而非基于媒体文件的真实地址获取媒体数据后播放,实现了对媒体文件的真实地址的保护。

附图说明

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

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

图3为本公开实施例提供的媒体文件中的媒体数据容器存储媒体数据的结构示意图;

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

图5为本公开实施例提供的非流媒体文件的网页播放装置的组成结构示意图一;

图6为本公开实施例提供的非流媒体文件的网页播放方法的流程示意图一;

图7为本公开实施例提供的封装分段媒体文件的流程示意图;

图8为本公开实施例提供的播放器通过网页的媒体源扩展接口播放分段媒体文件的示意图;

图9为本公开实施例提供的MP4文件转换为FMP4文件并通过媒体源扩展接口播放的示意图;

图10为本公开实施例提供的非流媒体文件的网页播放方法的流程示意图二;

图11为本公开实施例提供的非流媒体文件的网页播放方法的流程示意图三;

图12为本公开实施例提供的非流媒体文件的网页播放装置的组成结构示意图二。

具体实施方式

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

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

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

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

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

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

例如,采用动态图像专家组(MPEG,Moving Picture Experts Group)-4封装格式封装多媒体数据形成的媒体文件被称为MP4文件,典型地,MP4文件中存储高级视频编码(AVC,Advanced Video Coding,即H.264)或MPEG-4(Part 2)规范编码的视频数据和高级音频编码(AAC,Advanced Audio Coding)规范编码的音频数据,当然不排除视频和音频的其他编码方式。

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

容器头部包括容量(size)和类型(type),容量指明了容器所占用的存储空间的大小(本文中也称为容量或长度),类型指明了容器的类型,参见图2,是本公开实施例提供的MP4文件的一个可选的封装结构示意图,MP4文件中涉及的基本容器类型包括文件类型容器(ftyp box)、元数据容器(moov box)和媒体数据容器(mdat box)。

容器数据部分可以存储具体的数据,此时容器称为“数据容器”,容器数据部分也可以进一步封装其他类型的容器,此时容器称为“容器的容器”。

3)轨道(Track),也称为流(Stream),媒体数据容器中按时间排序的相关的采样(Sample),对于媒体数据来说,轨道表示一个视频帧序列或一个音频帧序列,还可以包括与视频帧序列同步的字幕轨,同一轨道中的一组连续的采样称为块(Chunk)。

4)文件类型容器,媒体文件中用于存储文件的容量(即所占用字节的长度)和类型的容器,如图2所示,在文件类型容器中存储的二进制数据按照规范的字节长度描述了容器的类型和容量。

5)元数据容器,媒体文件中用于存储元数据(即描述媒体数据容器中存储的多媒体数据的数据)的容器,在MP4文件中的元数据容器中存储的二进制数据表达的信息称为媒体信息。

如图2所示,元数据容器的头部采用二进制数据表示容器的类型为“moov box”,容器数据部分封装用于存储MP4文件的总体信息的mvhd容器,是独立于MP4文件的,并且与MP4文件的播放相关,包括时长、创建时间和修改时间等。

媒体文件的媒体数据容器中可以包括对应多个轨道的子容器,例如音频轨道容器(audio track box)和视频轨道容器(video track box),在音频轨道容器和视频轨道容器的子容器中都包括了相应轨道的媒体数据的引用和描述,必要的子容器包括:用于描述轨道的特性和总体信息(如时长、宽高)的容器(记为tkhd box)、记录轨道的媒体信息(比如媒体类型和采样的信息)的容器(记为mdia box)。

就mdia box中封装的子容器而言,可以包括:记录轨道的相关属性和内容的容器(记为mdhd box),记录媒体的播放过程信息的容器(记为hdlr box),描述轨道中媒体数据的媒体信息的容器(记为minf box);minf box中又封装了用于解释如何定位媒体信息的子容器(记为dinf box)、以及用于记录轨道中采样的所有时间信息(解码时间/显示时间)、位置信息和编解码等信息的子容器(记为stbl box)。

参见图3,是本公开实施例提供的媒体文件中的媒体数据容器存储媒体数据的结构示意图,利用从stbl box容器中二进制数据所识别出的媒体信息,可以解释采样的时间、类型、容量以及在媒体数据容器中的位置,下面说明stbl box中的各个子容器。

stsd box包含了一个采样描述(sample description)表,根据不同的编码方案和存储数据的文件数目,每个媒体文件中可以有一个或多个描述表,通过描述表可以找到每个采样的描述信息,描述信息可以保证采样的正确的解码,不同的媒体类型存储不同的描述信息,例如,视频媒体而言描述信息就是图像的结构。

stts box存储了采样的时长信息,并提供表来映射时间(解码时间)和采样的序号,通过sttx box,可以定位媒体文件中任何时间的采样;stts box中还使用其他的表来映射采样的容量和指针,表中每个条目提供了在同一个时间偏移量里面连续的采样的序号,以及采样的偏移量,递增这些偏移量,可以建立一个完整的时间-采样的映射表,计算公式如下:

DT(n+1)=DT(n)+STTS(n) (1)

其中STTS(n)是没有压缩的STTS第n项信息,DT是第n个采样的显示时间,采样的排列是按照时间的顺序排序,这样偏移量永远是非负的,DT一般以0开始,DT计算公式如下:

DT(i)=SUM(for j=0to i-1of delta(j)) (2)

所有偏移量的和是轨道中媒体数据的时长。

stss box记录了媒体文件中的关键帧的序号。

stsc box记录了采样与存储采样的块的映射关系,通过表来映射采样的序号和块的序号之间的关系,通过查表可以找到包含指定采样的块。

stco box定义了每个块在轨道中的位置,位置采用在媒体数据容器的起始字节的偏移量、以及相对于所述起始字节的长度(即容量)表示。

stsz box记录了媒体文件中每个采样的容量(即大小)。

6)媒体数据容器,媒体文件中用于存储多媒体数据的容器,例如,在MP4文件中媒体数据容器,如图3所示,采样是媒体数据容器中存储的单位,存储在媒体文件的块中,块和样本的长度均可互不相同。

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

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

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

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

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

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

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

9)流媒体格式,把媒体数据封装为流媒体的媒体文件,媒体文件不必完整下载、不需要额外转码,即可被解码播放,即,原生地支持一边下载,一边播放的封装技术。典型的流媒体格式的文件包括:基于HTTP直播流(HLS,HTTP Live Streaming)技术的TS媒体文件分片,FLV(Flash Video)文件等。

10)非流媒体格式,把媒体数据封装为媒体文件、且媒体文件完整下载后才可以被解码播放的封装技术,典型的非流媒体格式的文件包括:MP4文件,视窗媒体视频(WMV,Windows Media Video)文件,MKV文件格式(MKV,MKV file format),高级串流格式(ASF,Advanced Streaming Format)文件等。

需要指出,MP4文件原生不支持流媒体形式的播放,但是通过在线转码后向播放器转码后的媒体流、或者部分下载的MP4文件的缺失部分填充无效的二进制数据(例如,在ftyp容器和moov容器完整下载的情况下,填充mdat容器的缺失部分以无效的二进制数据代替)也能实现一边下载一遍播放的技术效果,本文中这种原生不支持流媒体播放的文件的封装格式都称为非流媒体格式。

首先说明实现本公开实施例的非流媒体文件的网页播放装置,非流媒体文件的网页播放装置可以提供为硬件、软件或者软硬件结合的方式。

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

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

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

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

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

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

下面说明非流媒体文件的网页播放装置的纯硬件实施,实现本公开实施例非流媒体文件的网页播放装置可以被一个或多个应用专用集成电路(ASIC,ApplicationSpecific Integrated Circuit)、数字信号处理(DSP,Digital Signal Processing)、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件实现,用于执行实现本公开实施例提供的非流媒体文件的网页播放方法。

下面说明非流媒体文件的网页播放装置的纯软件实施,实现本公开实施例非流媒体文件的网页播放装置可以为应用程序或插件,或者采用二者结合的方式实现。

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

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

接下来以播放器内嵌于网页,播放器使用网页的超文本标记语言(HTML,HyperText Markup Language)5媒体元素播放媒体文件为例,对本公开实施例提供的非流媒体文件的网页播放方法进行说明,本公开实施例中的网页既可以是浏览器的网页,也可以是内嵌浏览器内核的应用(APP,Application)的网页,网页通过解析、执行播放器的JS(JavaScript)代码实现播放器实例。

图6示出了本公开实施例提供的非流媒体文件的网页播放方法的一个可选的流程示意图,参见图6,本公开实施例提供的非流媒体文件的网页播放方法涉及步骤201至步骤204,以下分别进行说明。

步骤201:基于网页中播放的媒体文件的两个关键帧,获取媒体文件中部分的媒体数据。

这里,网页中播放的媒体文件采用非流媒体格式,如MP4/MKV/WMV/ASF等封装格式,本公开实施例中的媒体数据是指:媒体文件的媒体数据容器中的视频帧和音频帧的至少一种。

在一实施例中,播放器可通过如下方式获取媒体文件中部分的媒体数据:

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

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

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

在一个实施例中,针对播放点是通过连续播放媒体文件的方式到达的播放时刻的情况,根据播放点对应的视频帧是普通帧或关键帧的情况,说明确定两个关键帧(设为第一关键帧、以及解码时间第一关键帧之后的第二关键帧)的方式。

情况1)播放点所对应的视频帧为普通帧,由于播放器以两个关键帧之间的媒体数据为基本播放加载单位,因此,播放点之后、播放点之后的首个关键帧(解码时间晚于播放点的关键帧中距离播放点最近的关键帧)之前的媒体数据为已加载的媒体数据,而为了避免重复获取该部分已加载的媒体数据,给定时段的两个关键帧中的第一关键帧为:媒体文件中解码时间在播放点之后的首个关键帧;两个关键帧中的第二关键帧为:媒体文件中解码时间晚于第一关键帧的关键帧。

情况2)播放点所对应的视频帧为关键帧,两个关键帧中的第一关键帧为:播放点对应的关键帧,即与播放点时间对齐的关键帧;两个关键帧中的第二关键帧为:媒体文件中解码时间晚于第一关键帧的关键帧。

在上述情况1)中,将跨越播放点的关键帧作为媒体数据的端点,能够保证在播放点所对应的视频帧有足够的信息用于正确解码,不会出现因为缺少解码数据(即关键帧)而跳帧的情况。

在另一个实施例中,针对播放点是通过跳转的方式到达的播放时刻的情况,根据播放点对应的视频帧是普通帧或关键帧的情况,说明确定两个关键帧(设为第一关键帧、以及解码时间第一关键帧之后的第二关键帧)的方式。

情况1)播放点所对应的视频帧为普通帧,由于播放点是跳转到达的,因此播放点之前的首个关键帧、与播放点之间的媒体数据没有被加载,第一关键帧为:媒体文件中解码时间在播放点之前的首个关键帧,也即是媒体数据的时间(也即是,媒体信息所表示的序号与帧的解码时间的对应关系)中查找解码时间早于给定时段的起始时间、且距离起始时间最近的关键帧;两个关键帧中的第二关键帧为:媒体文件中解码时间晚于第一关键帧的关键帧。额外请求播放点至播放点之前的关键帧之间的媒体数据,可以保证跳转到任何播放点都能够正常解码,避免出现播放点对应普通帧时因为无法解码而跳帧的情况。

情况2)播放点所对应的视频帧为关键帧,第一关键帧为:播放点所对应的关键帧,也即是从媒体数据的时间(也即是,媒体信息所表示的序号与帧的解码时间的对应关系)中查找的解码时间对齐播放点时间的关键帧;两个关键帧中的第二关键帧为:媒体文件中解码时间晚于第一关键帧的关键帧。

上述情况1)中,将跨越播放点的关键帧作为媒体数据的端点,能够保证在播放点所对应的视频帧有足够的信息用于正确解码,不会出现因为缺少解码数据(即关键帧)而跳帧的情况。

在情况2)中,以对齐播放点的关键帧来界定待获取的媒体数据,在播放点能够被正确解码的前提下,最大程度减少了获取不必要的媒体数据的情况,减少了对连接和流量的占用,进而保证网页中非媒体播放业务的实时性。

在一实施例中,播放器发送给服务器的网络请求携带所请求的两个关键帧之间的媒体数据的偏移量和容量,以使服务器解析网络请求后基于偏移量和容量定位所请求的媒体文件中的媒体数据,从媒体文件中提取从所述偏移量开始,且符合所述容量的媒体数据,返回给播放器。因此,播放器在发送网络请求之前,需要根据媒体文件的媒体信息(即视频/音频帧的位置、偏移量、解码时间等信息),确定媒体数据在媒体文件中的偏移量及容量。而确定偏移量及容量之前首先要从媒体文件的元数据中识别出媒体信息。

接下来对播放器识别媒体信息进行说明。在一实施例中,播放器可通过如下方式从媒体文件中识别出媒体信息:根据设定的偏移量和容量,向服务器请求对应设定的偏移量和容量的媒体文件中的数据(即请求固定容量的数据),从服务器返回的数据中识别出元数据容器中的元数据,解析识别出的元数据,得到用于描述媒体文件的媒体数据容器中封装的媒体数据的媒体信息。

其中,设定的容量可以是根据已有的媒体文件的文件类型容器和元数据容器的容量统计得到,使得设定的容量能够覆盖设定比例(如全部)媒体文件的文件类型容器和元数据容器的容量的加和,确保当媒体文件的封装结构为顺序封装的文件类型容器、元数据容器和媒体数据容器时,能够通过一次请求得到完整的元数据容器中所封装的元数据,节约了网络传输时对连接的占用情况,进而避免了因为连接占用导致网页中非媒体播放业务因为无法使用连接而延迟响应的情况。

以媒体文件为MP4文件为例,播放器获取的元数据容器中封装的元数据即为MP4文件中的moov box中封装的二进制数据,当MP4文件的封装结构为顺序封装的fytp box、moovbox和mdat box时,设定容量可以是根据已有MP4文件的ftyp box和moov box容量统计得到,使设定容量能够覆盖设定比例(如全部)MP4文件的ftyp box和moov box的二进制数据的加和,确保多数情况下一次即可从服务器请求到moov box中包括完整的二进制数据。

在一实施例中,播放器通过设定的偏移量及容量从服务器请求到的二进制数据中,从零字节开始的一段二进制数据是对应文件类型容器的,播放器通过读取容器头部得到文件类型容器的容量,通过读取第二个容器的头部得知下一个容器的类型及容量,当第二个容器的类型为元数据容器,且返回的二进制数据的容量不小于文件类型容器的容量及元数据容器容量的加和时,表明通过设定的偏移量及容量从服务器请求到的二进制数据中包含了元数据容器中封装的元数据;当第二个容器的类型为元数据容器,且返回的二进制数据的容量小于文件类型容器的容量及元数据容器容量的加和时,表明通过设定的偏移量及容量从服务器请求到的二进制数据中未包含元数据容器中封装的元数据。当播放器通过设定的偏移量及容量从服务器请求到的二进制数据未包含完整的元数据容器中的元数据时,播放器需要从服务器所返回的二进制数据中读取容器的容量,根据元数据容器的头部计算元数据容器的偏移量及容量,将计算得到的偏移量及容量携带在网络请求中以向服务器请求元数据,由服务器根据请求,从媒体文件中所计算得到的偏移量开始读取二进制数据、且读取的二进制数据符合计算得到的容量,向播放器返回数据。

举例说明,播放器从服务器所返回的二进制数据中读取容器的容量,根据元数据容器的头部计算元数据容器的偏移量及容量,涉及如下两种情况:

情况1)当从剩余的二进制数据(即返回的二进制数据中除文件类型容器的二进制数据之外的数据)读取的容器的类型为元数据容器,且剩余的二进制数据的容量小于元数据容器的容量时,计算元数据容器的容量与剩余二进制数据容量的差值作为二次请求的新的容量,以首次请求的偏移量和容量的加和作为新的偏移量,向服务器第二次请求二进制数据;

情况2)当从剩余的二进制数据读取的容器的类型为媒体数据容器时,计算媒体数据容器的容量与文件类型容器容量的加和为二次请求的新偏移量,以设定的容量(可以为能够覆盖元数据容器的容量的经验值)向服务器第二次请求二进制数据。

以媒体文件为MP4文件为例,播放器通过设定的偏移量及容量从服务器请求到的二进制数据未包含完整的moov box的二进制数据,此时,播放器需要从服务器所返回的二进制数据中读取容器的类型和容量,确定moov box在MP4文件中的偏移量和容量;

MP4文件的二进制数据,起始的字节总是对应ftyp box,从返回的二进制数据中识别出fytp box的二进制数据,根据ftypbox的头部可以获知其长度,从而从剩余的二进制数据中,根据头部的规范长度读取下一个box的二进制数据,根据头部表示的容器类型,包括以下几种情况:

1)当从剩余的二进制数据(即返回的二进制数据中除fytp box的二进制数据之外的数据)读取的容器的类型为moov box,且剩余的二进制数据的容量不小于moov box的容量时,根据所确定的偏移量和容量,从服务器获取MP4文件中以moov box在MP4文件中的偏移量开始、且符合moov box在MP4文件中的容量的moov数据;

2)当从剩余的二进制数据读取的容器的类型为moov box,且剩余的二进制数据的容量小于moov box的容量时,计算moov box的容量与剩余二进制数据容量的差值作为二次请求的新的容量,以首次请求的偏移量和容量的加和作为二次请求的新的偏移量,向服务器第二次请求二进制数据;

3)当从剩余的二进制数据读取的容器的类型为mdat box时,计算mdat box的容量与ftyp box容量的加和作为二次请求的新偏移量,以设定的容量向服务器第二次请求二进制数据。

如此,无论媒体文件为何种封装结构,即无论媒体文件中文件类型容器、元数据容器和媒体数据容器的封装顺序如何,均能够保证播放器最多两次请求便可从服务器处得到元数据容器中的元数据,提高了元数据的获取效率。

举例说明,对于MP4文件,服务器返回的二进制数据,根据MP4文件的封装规范,从零字节开始的一段二进制数据是对应ftyp box的,而根据box的的头部的封装规范,可以从ftyp box的头部读取ftyp box的容量(即长度)以及完整的MP4文件的容量;假设ftyp box的容量为a(单位为字节),则从a+1开始读取后续容器的头部信息,获取后续容器的类型和容量,如果通过读取得到ftyp box后续的是moov box,且剩余的二进制数据的容量(设定容量-ftyp box的容量)大于moov box的容量,说明已经取回了moov box的完整二进制数据,可以根据moov box的偏移量及容量从剩余的二进制数据中提取moov box中的元数据。

播放器从服务器处获取元数据容器中封装的元数据后,解析元数据容器中子容器的嵌套结构,根据子容器的嵌套结构读取出各子容器中的二进制数据;从所读取出的二进制数据解析出各子容器表征的媒体数据的媒体信息。在实际应用中,媒体信息可以包括媒体文件中视频帧和/或音频帧的偏移量、容量、解码时间等信息。

以媒体文件为MP4文件为例,元数据容器即为moov box,参见图2,可知,moov box中封装有mvhd box和track box,其中,通过解析mvhd box的二进制数据,可以得到MP4文件的创建时间、修改时间、时间度量标尺、可播放时长、默认音量等信息;moov box中包括多个track box,记录了每个媒体轨道所特有的描述信息,如对于视频轨道video track box,video track box中多层嵌套了多个子容器,基于video track box的嵌套结构,解析相应的二进制数据得到MP4文件的视频帧信息、以及所对应的画面信息。

在一个实施例中,播放器可通过如下方式对获取的元数据进行解析,得到媒体信息:顺序解析元数据容器二进制数据中对应容器头部的规范长度的二进制数据,得到所述元数据容器中子容器的容器类型、以及所述子容器的容器数据的长度;调用与所述子容器的容器类型相应类型的解析器,顺序解析未解析的数据中与所述容器数据的长度相应的二进制数据,得到所述容器数据所表示的媒体信息。

其中,播放器针对元数据容器中嵌套多个子容器的情况,每次读取二进制数据的偏移量都是已经识别出子容器长度的加和,所读取的二进制数据的长度符合容器头部的规范长度,从而可以解析出当前所处理子容器的类型和长度。

例如,首次读取时,从元数据容器的二进制数据的零字节开始读取二进制数据,且所读取的二进制数据的长度符合容器头部的规范长度,从而可以解析出第一个子容器的类型和长度;第二次读取时,以首次读取的子容器的长度为偏移量,开始读取二进制数据,且所读取的二进制数据的长度符合容器头部的规范长度,从而可以解析出第二个子容器的类型和长度。

通过上述方式读取二进制数据不会出现多读导致回退的情况,也不会出现及少读而二次读取的情况,解析的效率和正确率得以保证。

在一个实施例中,对元数据容器中嵌套的典型容器类型进行预标记,用于表示容器是直接用于封装二进制数据还是进一步封装有容器,例如对于图2示出的mvhd box、audio track box和video track box等标记进一步封装有容器,对于图2示出的stts box、stsd box等标记为直接封装有二进制数据。

对于标记为直接封装二进制数据的容器类型,设置与容器类型一一对应的解析器,解析器用于根据二进制数据解析出所表示的媒体信息;将解析出的子容器的容器类型与预标记的容器类型比对,涉及到以下两种情况。

情况1)当通过比对确定所述子容器的容器类型被预标记、且被预标记为用于直接封装二进制数据时,则调用与所述子容器的容器类型对应的解析器,通过所述解析器解析所述子容器中的容器数据,得到所述容器数据所表示的媒体信息。

情况2)当通过比对确定所述子容器的容器类型被预标记、且被预标记为用于继续封装容器时,根据所述媒体文件中容器头部的规范长度,递归解析所述子容器所对应的二进制数据,直至解析到所述子容器中所封装容器的容器类型被预标记、且被预标记为用于直接封装二进制数据,调用与子容器中所封装容器的容器类型相应的解析器,逐字节解析二进制数据,所解析二进制数据的长度与所述子容器中所封装容器的容器数据的长度对应,以得到所述子容器中所封装容器的容器数据所表示的媒体信息。

在一个实施例中,对解析元数据容器的过程中记录媒体信息的方式进行说明,在顺序解析元数据容器二进制数据中对应容器头部的规范长度的二进制数据,得到所述元数据容器中子容器的容器类型时,根据子容器与所归属的容器之间的嵌套关系、以及子容器与所封装的容器嵌套关系建立对象,当子容器的容器类型被预标记为用于直接封装二进制数据时,在对应所述子容器所建立的对象中存储包括有媒体信息的数组,所存储的媒体信息由所述子容器的容器数据表示。

例如,在图2中,当解析的子容器的类型为stts box时,由于stts box被预标记为直接封装二进制数据,在对应stts box所建立的对象中存储包括有媒体信息的数组,这里的媒体信息是stts box的容器数据所表示的时长信息。

在一个实施例中,对解析元数据容器的过程中记录子容器之间的嵌套关系的方式说明,在顺序解析元数据容器二进制数据中对应容器头部的规范长度的二进制数据,得到所述元数据容器中子容器的容器类型时,如果容器类型被预标记为直接封装二进制数据,则在被调用的所述解析器中记录所解析的子容器;将所记录的子容器的实例设置到子容器属性中,所述子容器属性包括于所述子容器所归属的容器,用于描述所述子容器与所归属的容器之间的嵌套关系。

例如,在图2中,当解析的子容器的类型为stsd box时,由于stsd box被预标记为直接封装二进制数据,在对应stsd box所对应的解析器中记录stsd box,将stsd box的实例设置到stbl box子容器属性中,以此类推,最后在stsd box的子容器属性中记录了stsdbox、stts box、stsc box等多个嵌套于stbl box的子容器。

在一个实施例中,通过比对确定所述子容器的容器类型没被预标记、或者被预标记为直接封装二进制数据但是没有调用到相应类型的解析器时,忽略解析子容器对应的二进制数据,根据所述子容器的长度,跳转到所述二进制数据中对应下一子容器的部分继续解析。

在实际应用中,媒体文件中会出现自定义的容器类型,通过跳转的方式不会影响元数据容器的整体解析的进度,同时通过设置解析器的方式,当元数据容器的容器类型发生变动时,通过对相应类型的解析器的增加、删除和修改,可以快速实现对最新的元数据容器的兼容解析,具有升级灵活快速的特点。

基于上述对媒体信息识别的说明,接下来对基于识别出的媒体信息确定媒体数据在媒体文件中的偏移量及容量进行说明,在一实施例中,播放器可通过如下方式确定媒体数据在媒体文件中的偏移量及容量:基于识别出的媒体信息,确定媒体数据的视频帧(即第一关键帧及第二关键帧之间的视频帧)在媒体文件中的偏移量及容量、以及与视频帧对齐的音频帧在媒体文件中的偏移量及容量;根据所确定的偏移量及容量,确定包括上述视频帧和音频帧的目标区间(由最小偏移量和最大容量构成的区间)的偏移量及容量;其中,目标区间包括上述视频帧和音频帧。

这里,对本公开实施例中的音频帧与视频帧的对齐方式进行说明:以视频帧为基准,根据媒体数据的起始时间和时长,在视频帧定位时间同步的音频帧,保证媒体数据中第一个音频帧的解码起始时间不晚于第一个视频帧的解码起始时间,最后一个音频帧的解码时间不早于最后一个视频帧的解码结束时间,如此,能够克服媒体文件中视频、音频时长不一致的问题,保证每帧视频播放时会有同步的音频播放,不会出现有画面没声音的现象。

接下来对确定目标区间的偏移量和容量进行说明:通过两个关键帧中第一关键帧及第二关键帧之间的视频帧在媒体文件中的偏移量和容量,定位视频帧在元数据容器中的位置,通过与视频帧对齐的音频帧在媒体文件中的偏移量和容量,定位音频帧在元数据容器中的位置,取位置的上限和下限构成的区间为目标区间,即由最小偏移量和最大容量构成的区间;其中,位置的上限对应的偏移量和容量为目标区间的上限对应的偏移量和容量,位置的下限对应的偏移量和容量为目标区间的下限对应的偏移量和容量。在实际应用中,目标区间是目标分辨率媒体文件的媒体数据容器中存储视频帧和音频帧的最小区间,例如:第一关键帧和第二关键帧之间的视频帧在目标分辨率媒体文件的位置的偏移量,对应区间为[a,b](地址为升序),音频帧在目标分辨率媒体文件的位置的偏移量,对应区间为[c,d](地址为升序),那么,取位置的上限和下限构成的区间即为[min(a,c),max(b,d)]。如此,播放器发送携带目标区间的偏移量和容量的网络请求给服务器,以请求目标区间的媒体数据,服务器基于目标区间的偏移量和容量提取媒体文件中的媒体数据后一次性的返回目标区间的媒体数据,无须二次获取,减少了播放器的请求次数,提高了处理效率。

步骤202:基于两个关键帧之间的媒体数据构造分段媒体文件。

在一实施例中,播放器可通过如下方式构造分段媒体文件:

播放器基于识别得到的媒体信息计算分段媒体文件级别的元数据,将计算得到的元数据以及所获取的媒体数据,基于分段媒体文件的封装格式进行填充,得到对应的分段媒体文件。

在本公开的一个实施例中,参见图7,图7是本公开示例提供的封装分段媒体文件的一个可选的流程示意图,将结合图7示出的步骤进行说明。

步骤301,将表示分段媒体文件的类型和兼容性的数据,填充到分段媒体文件的文件类型容器中。

例如,以封装形成如图4时所示的封装结构的FMP4文件为例,在FMP4文件的文件类型容器即ftyp box的头部填充容器的类型和长度(表示ftyp box的整体长度),在ftyp box的数据部分填充生成表示文件类型为FMP4以及兼容协议的数据(二进制数据)。

步骤302,将表示分段媒体文件的文件级别的元数据,填充到分段媒体文件的元数据容器中。

在一个实施例中,根据向分段媒体文件的封装结构待填充的媒体数据,根据分段媒体文件中的元数据容器的嵌套结构,计算填充嵌套结构所需要的描述媒体数据的元数据。

仍以图4为例,计算表示FMP4文件的文件级别的元数据,并填充到FMP4的元数据容器(即moov box)中,在moov box中嵌套有mvhd、track和视频扩展(mvex,movie extend)三个容器。

其中,mvhd容器中封装的元数据用于表示与分段媒体文件的播放相关的媒体信息,包括位置、时长、创建时间和修改时间等;track容器中嵌套的子容器表示媒体数据中相应轨道的引用和描述,例如track容器中嵌套有描述轨道的特性和总体信息(如时长、宽高)的容器(记为tkhd box)、记录轨道的媒体信息(比如媒体类型和采样的信息)的容器(记为mdia box)。

步骤303,将所提取的媒体数据、以及描述媒体数据的元数据,对应填充到分段媒体文件的分段容器中的媒体数据容器、以及分段级别的元数据容器中。

在一个实施例中,分段媒体文件中可以封装有一个或多个分段(fragment),对于待填充的媒体数据而言,可以填充到分段媒体文件的一个或分段的媒体数据容器(即mdatbox)中,每个分段中封装有分段级别的元数据容器(记为moof box),其中填充的元数据用以描述分段中填充的媒体数据,使分段能够被独立解码。

结合图4,以将待填充的媒体数据填充到FMP4文件的封装结构的2个分段中为例,填充到每个分段媒体数据;计算需要填充到相应分段的分段级别的元数据容器(即moofbox)中的元数据,并对应填充到moof box嵌套的子容器中,其中在moof box的头部称为moof box,其中填充的二进制数据用于表示容器的类型为“moof box”以及moof box的长度。

在步骤301至步骤303中填充数据到相应容器的一个实施例中,当执行填充操作时,调用类的写操作功能在所述子容器的内存缓冲区完成二进制数据的写入和合并,以及,返回所述类的实例,所返回的实例用于合并所述子容器与具有嵌套关系的子容器的合并。

作为填充数据的一个示例,建立用于实现封装功能的类MP4,将分段媒体文件中的每个子容器封装为类Stream的静态方法;建立用于实现二进制数据操作功能的类Stream,每个类Stream提供有一个内存缓冲区,用来保存待填充的二进制数据;通过Stream提供的静态方法,转换待填充的多字节十进制数据到二进制数据;通过类Stream的实例提供的写操作功能,在内存缓冲区完成待填充到子容器的二进制数据的合并以及填充;Stream提供的静态方法返回一个新的Stream实例,可以实现当前子容器与其他具有嵌套关系的子容器的合并。

步骤203:将所构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象。

参见图8,图8是本公开实施例提供的播放器通过网页的媒体源扩展接口播放分段媒体文件的一个可选的示意图,当播放器在网页中播放窗口(播放器对应播放窗口)接收到媒体文件的播放事件时,播放器通过MSE执行MediaSource方法创建媒体源(Media Source)对象;执行媒体源扩展接口中封装的addSourceBuffer方法创建MediaSource对象的缓存,即源缓存(SourceBuffer)对象,一个MediaSource对象拥有一个或多个SourceBuffer对象,每个SourceBuffer对象可以用于对应网页中的一个播放窗口,用于接收窗口中待播放的分段媒体文件。

在媒体文件的播放过程中,播放器中的解析器(Parser)通过解析新获取的媒体数据,不断构造新的分段媒体文件,通过执行SourceBuffer对象的appendBuffer方法,添加分段媒体文件到同一个MediaSource对象的SourceBuffer对象。

播放器将所构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象之后,调用媒体资源扩展接口创建对应媒体源对象的虚拟地址。例如,播放器执行媒体源扩展接口中封装的createObjectURL方法,创建对应媒体源对象的虚拟地址,即虚拟统一资源定位符(URL,Uniform Resource Locator),其中封装有Blob类型的分段媒体文件。

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

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

步骤204:向网页的媒体元素传递虚拟地址,虚拟地址用于供媒体元素以媒体源对象为数据源进行解码播放。

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

下面,以播放器将MP4文件转换FMP4文件并通过媒体源扩展接口在网页播放的过程进行说明。

参见图9,图9为本公开实施例提供的MP4文件转换为FMP4文件并通过媒体源扩展接口播放的一个示意图,播放器基于媒体文件的真实地址(http://www.toutiao.com/a/b.mp4),从服务器请求获取MP4文件中部分的媒体数据,例如解码时间处于用于接续播放点的给定时段的数据。

播放器基于获取的媒体数据构造FMP4文件,然后添加到MediaSource对象对应的SourceBuffer对象,由于虚拟URL被绑定到MediaSource对象,因此播放器调用audio/video元素的代码被执行时,audio/video元素从MediaSource对象的SourceBuffer对象读取被不断添加的新的FMP4文件,并解码,实现媒体文件的连续播放。网页的媒体元素基于虚拟URL进行媒体源对象的获取,进而实现媒体文件的播放,而非基于媒体文件的真实地址进行媒体数据获取,如此,实现了对媒体文件真实地址的保护。

接下来以播放器内嵌于浏览器的网页,网页通过解析、执行播放器的JS代码实现播放器实例,播放器使用浏览器的HTML5媒体元素(Video元素+Audio元素)播放MP4文件为例,对本公开实施例的非流媒体文件的网页播放方法进行说明,根据MP4的实施,可以轻易应用于其它非流媒体格式。图10示出了本公开实施例提供的非流媒体文件的网页播放方法的一个可选的流程示意图,图11示出了本公开实施例提供的非流媒体文件的网页播放方法的另一个可选的流程示意图,结合图10、图11,本公开实施例提供的非流媒体文件的网页播放方法包括:

步骤401:播放器根据设定的偏移量和容量,向服务器请求固定容量的MP4文件中的数据。

播放器通过发送携带设定的偏移量和容量的数据请求给服务器,以获取MP4文件中从零字节开始、且符合设定容量的二进制数据。以MP4文件的封装结构包括顺序封装的fytp box、moov box和mdat box为例,设定容量可以是根据已有MP4文件的ftyp box和moovbox容量统计得到,使设定容量能够覆盖设定比例(如全部)MP4文件的ftyp box和moov box的加和,确保一次即可从服务器请求完整的moov box二进制数据。参见图11,播放器请求设定的偏移量为0字节,设定的容量为Math.pow(25,4)字节的二进制数据,从服务器返回的二进制数据中获取moov数据,若通过一次请求未获取到完整的moov数据,则重新计算偏移量(图11中start)及容量(start~size),进而二次请求。

步骤402:播放器接收服务器返回的数据,并从服务器返回的数据中识别出MP4文件的媒体信息。

MP4文件的媒体信息包括MP4文件中视频/音频帧的偏移量、容量、解码时间等信息。

在一实施例中,播放器可通过如下方式实现MP4文件的媒体信息的识别:从服务器返回的数据中识别出fytp box的二进制数据,并从剩余的二进制数据中读取容器的类型和容量;当读取的容器的类型为moov box,且剩余的二进制数据的容量不小于moov box的容量时,从剩余的二进制数据中解析出媒体信息。这里,对于服务器返回的二进制数据,开始的一段二进制数据必然是对应ftyp box的,根据ftyp box的封装规范,可以读取ftyp box的容量(即长度)以及完整的MP4文件的容量;例如ftyp box的容量a(单位为字节),则从a+1开始读取后续容器的头部信息,获取容器的类型和容量,如果是moov box,且(设定容量-ftyp box的容量)大于moov box的容量,说明已经取回了moov box的完整二进制数据,可以根据封装结构进行解析二进制数据,还原出媒体信息。

在一实施例中,当服务器返回的二进制数据未包括完整的moov数据时,从所获取的二进制数据中读取容器的容量,确定moov box在MP4文件中的偏移量和容量;根据所确定的偏移量和容量,当从剩余的二进制数据读取的容器的类型为moov box,且剩余的二进制数据的容量不小于moov box的容量时,从服务器获取MP4文件中以moov box在MP4文件中的偏移量开始、且符合moov box在MP4文件中的容量的moov数据;当从剩余的二进制数据读取的容器的类型为moov box,且剩余的二进制数据的容量小于moov box的容量时,计算moovbox的容量与剩余二进制数据容量的差值作为二次请求的新的容量,以首次请求的偏移量和容量的加和作为新的偏移量,向服务器第二次请求二进制数据。

在实际应用中,存在MP4文件的封装结构为顺序封装的fytp box、mdat box、moovbox的情况,当从剩余的二进制数据读取的容器的类型为mdat box时,计算mdat box的容量与计算moov box容量的加和为二次请求的新偏移量,以设定的容量向服务器第二次请求二进制数据。

步骤403:在播放器通过浏览器播放MP4文件的过程中,根据识别出的媒体信息及当前的播放点定位MP4文件中的两个关键帧。

在本公开实施例中,播放器以两个关键帧之间的媒体数据(至少包括视频数据,还可进一步包括音频数据)为加载单元进行播放,也即播放器通过加载两个关键帧之间的媒体数据进行MP4文件播放,两个关键帧之间可以仅存在普通帧,即两个关键帧为相邻关键帧,两个关键帧之间亦可以存在其它关键帧。

以通过跳转的方式到达MP4文件的播放点为例进行说明,参见图11,播放器首先进行关键帧的确定,即视频关键帧登记,播放器定位第一关键帧为:MP4文件中解码时间在播放点之前的首个关键帧,定位第二关键帧为:MP4文件中解码时间晚于第一关键帧的关键帧。这里,播放点所对应的媒体文件的视频帧包括普通帧或关键帧两种情况,而当播放点所对应的视频帧刚好为关键帧时,MP4文件中解码时间在播放点之前的首个关键帧即为播放点所对应的关键帧,也即,此时播放器所请求的媒体数据中的第一个关键帧即为播放点所对应的关键帧。

播放器定位MP4文件中的两个关键帧包括:基于识别出的媒体信息及当前的播放点确定上述第一关键帧及第二关键帧的偏移量及容量(对应图11中数据偏移量计算),进而基于偏移量及容量向服务器请求第一关键帧及第二关键帧之间的媒体数据。

步骤404:向服务器请求定位的两个关键帧之间的媒体数据。

在实际实施时,播放器向服务器发送网络请求,以请求MP4文件中定位的两个关键帧之间的媒体数据,网络请求中携带两个关键帧所对应的目标区间的偏移量及容量。

这里,播放器通过第一关键帧及第二关键帧之间的视频帧在MP4文件中的偏移量和容量,定位视频帧在mdat中的位置,通过与视频帧对齐的音频帧在MP4文件中的偏移量和容量,定位音频帧在mdat中的位置(对应图11中音频帧登记),取位置的上限和下限构成的区间为目标区间(对应图11中视频和音频复用),位置的上限对应的偏移量和容量为目标区间的上限对应的偏移量和容量,位置的下限对应的偏移量和容量为目标区间的下限对应的偏移量和容量。

步骤405:服务器返回播放器所请求的两个关键帧之间的媒体数据。

步骤406:基于服务器返回的媒体数据封装FMP4格式的分段媒体文件。

在实际实施时,服务器根据媒体数据的媒体信息计算分段媒体文件级别的元数据,然后根据FMP4格式的分段媒体文件的封装格式,填充分段媒体文件级别的元数据以及媒体数据后得到FMP4格式的分段媒体文件。

步骤407:将分段媒体文件添加到MSE接口中的媒体源对象。

步骤408:向网页的媒体元素传递虚拟地址。

虚拟地址用于供媒体元素(Video元素及Audio元素)以媒体源对象为数据源进行播放。

应用本公开上述实施例,具备以下有益效果:

1)、播放器获取媒体文件的两个关键帧之间的部分媒体数据,进行分段媒体文件构造及播放,实现了对播放媒体文件过程中,媒体数据加载的控制,避免了流量及带宽的不必要消耗。

2)、将非流媒体格式的媒体文件中的媒体数据转换成分段媒体文件,并通过网页的媒体源扩展接口,发送给网页的媒体元素进行解码播放,实现了通过网页播放非流媒体格式的媒体文件,克服了非流媒体封装格式文件需要完整下载后才可以独立播放的限制。

3)、所封装得到的分段媒体文件基于获取的媒体文件的部分媒体数据,而非媒体文件的全部数据,如此,转换延迟小,不需要预先存储,除了原始的媒体文件不会占用额外的存储空间,显著降低了对存储空间的占用。

4)网页的媒体元素通过媒体源扩展接口获取分段媒体文件进行解码播放,而非基于媒体文件的真实地址获取媒体数据后播放,实现了对媒体文件的真实地址的保护。

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

获取单元91,用于基于在网页中播放的媒体文件的两个关键帧,获取所述媒体文件中部分的媒体数据,所述媒体文件采用非流媒体格式;

构造单元92,用于基于所述两个关键帧之间的媒体数据构造分段媒体文件;

添加单元93,用于将所构造的分段媒体文件添加到媒体资源扩展接口中的媒体源对象;

传输单元94,用于向网页的媒体元素传递虚拟地址,所述虚拟地址用于供所述媒体元素以所述媒体源对象为数据源进行播放。

在一实施例中,当所述媒体文件的播放点为通过连续播放的方式到达时,

所述两个关键帧中的第一关键帧为:所述媒体文件中解码时间在所述播放点之后的首个关键帧,;

所述两个关键帧中的第二关键帧为:所述媒体文件中解码时间晚于所述第一关键帧的关键帧。

在一实施例中,当所述媒体文件的播放点为通过跳转的方式到达时,

所述两个关键帧中的第一关键帧为:所述媒体文件中解码时间在所述播放点之前的首个关键帧,

所述两个关键帧中的第二关键帧为:所述媒体文件中解码时间晚于所述第一关键帧的关键帧。

在一实施例中,所述获取单元,还用于根据从所述媒体文件中识别出的媒体信息,确定所述两个关键帧之间的视频帧在所述媒体文件中的偏移量和容量、以及与所述视频帧对齐的音频帧在所述媒体文件中的偏移量和容量;

根据所确定的偏移量和容量确定目标区间的偏移量和容量,所述目标区间包括所述视频帧和所述音频帧;

基于所述目标区间的偏移量和容量,获取所述媒体文件的媒体数据容器中用于构造所述分段媒体文件的媒体数据。

在一实施例中,所述获取单元,还用于根据设定的偏移量和容量,获取所述媒体文件中的元数据;

从所获取的所述元数据中识别出媒体信息;

所述媒体信息用于定位所述媒体数据在所述媒体文件中的偏移量和容量。

在一实施例中,所述获取单元,还用于当从所获取的所述元数据中未识别出完整的媒体信息时,根据元数据容器的头部,计算元数据容器的偏移量和容量;

根据计算得到的所述元数据容器的偏移量和容量,获取所述元数据容器中的元数据;

从获取的所述元数据容器中的元数据中识别得到对应的媒体信息。

在一实施例中,所述构造单元,还用于根据所述两个关键帧之间的媒体数据对应的媒体信息,计算对应的分段媒体文件级别的元数据;

将所计算的元数据、以及所述两个关键帧之间的媒体数据,基于分段媒体文件的封装格式进行填充,得到对应的分段媒体文件。

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

所述可执行指令,用于被处理器执行时实现上述非流媒体文件的网页播放方法。

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

29页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种媒体文件加载方法、装置及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类