一种媒体文件的预加载方法、装置及存储介质

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

阅读说明:本技术 一种媒体文件的预加载方法、装置及存储介质 (Media file preloading method and device and storage medium ) 是由 银国徽 于 2018-05-29 设计创作,主要内容包括:本公开提供了一种媒体文件的预加载方法,包括:显示播放器的用于播放媒体文件的播放窗口;在所述播放窗口中显示所述媒体文件的播放进度;响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识;其中,所述媒体文件对应有多个分段媒体文件,所述预加载的分段媒体文件的播放时间晚于所述播放点的播放时间。本公开还提供了一种媒体文件的预加载装置及存储介质。(The present disclosure provides a media file preloading method, including: displaying a playing window of the player for playing the media file; displaying the playing progress of the media file in the playing window; responding to a playing point reached by the playing progress of the media file in real time, and displaying the identifier of the pre-loaded segmented media file in the playing window; the media files correspond to a plurality of segmented media files, and the playing time of the preloaded segmented media files is later than that of the playing point. The disclosure also provides a preloading device and a storage medium of the media file.)

一种媒体文件的预加载方法、装置及存储介质

技术领域

本公开涉及媒体文件的预加载技术,尤其涉及一种媒体文件的预加载方法、装置及存储介质。

背景技术

通过网页播放多媒体信息时,多媒体信息的缓冲或加载由网页浏览器完成;具体实现为网页浏览器从当前播放点开始,加载当前播放点至结束点分段的多媒体数据,加载过程中浏览器不能控制缓存或加载的多媒体数据的大小。如此,当用户选择性的观看加载的多媒体数据时,造成了流量的不必要消耗。

发明内容

有鉴于此,本公开实施例提供一种媒体文件的预加载方法、装置及存储介质,能够在播放多媒体信息时,减少流量的不必要消耗。

一方面,本公开实施例提供一种媒体文件的预加载方法,包括:

显示播放器的用于播放媒体文件的播放窗口;

在所述播放窗口中显示所述媒体文件的播放进度;

响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识;

其中,所述媒体文件对应有多个分段媒体文件,所述预加载的分段媒体文件的播放时间晚于所述播放点的播放时间。

另一方面,本公开实施例提供一种媒体文件的预加载装置,,包括:

显示单元,用于显示播放器的用于播放媒体文件的播放窗口,以及在所述播放窗口中显示所述媒体文件的播放进度;

加载单元,用于响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识;

其中,所述媒体文件对应有多个分段媒体文件,所述预加载的分段媒体文件的播放时间晚于所述播放点的播放时间。

又一方面,本公开实施例提供一种媒体文件的预加载装置,包括:

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

处理器,用于通过执行所述存储器中存储的可执行指令时实现上述的媒体文件的预加载方法。

再一方面,本公开实施例提供一种存储介质,存储有可执行指令,所述可执行指令被处理器执行时,用于实现本公开实施例上述的媒体文件的预加载方法。

本公开实施例中,显示播放器的用于播放媒体文件的播放窗口;在所述播放窗口中显示所述媒体文件的播放进度;响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识。如此,通过预先将媒体文件划分得到多个分段媒体文件,在播放窗口中显示预加载的分段媒体文件的标识,使得用户能够基于预加载的分段媒体文件的标识,选择性的观看播放点之后的分段媒体文件;由于播放器预先加载播放点之后的分段媒体文件,从而避免了流量的消耗。

附图说明

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

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

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

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

图5是本公开实施例提供的媒体文件的预加载装置的一个可选的结构示意图;

图6是本公开实施例提供的媒体文件的预加载方法的一个可选处理流程示意图;

图7A是本公开实施例显示用于播放媒体文件的播放窗口的一个可选示意图;

图7B是本公开实施例显示用于播放媒体文件的播放窗口的另一个可选示意图;

图8A是本公开实施例在播放器的播放进度条上显示媒体文件的播放进度的一个可选示意图;

图8B是本公开实施例在播放器的播放界面上显示媒体文件的播放进度的另一个可选示意图;

图9A是本公开实施例在播放窗口中显示预加载的分段媒体文件的标识的一个可选示意图;

图9B是本公开实施例在播放窗口中显示预加载的分段媒体文件的标识的另一个可选示意图;

图9C是本公开实施例在播放窗口中显示预加载的分段媒体文件的标识的又一个可选示意图;

图10是本公开实施例提供的应用于媒体文件的预加载装置的媒体文件的预加载方法的另一个可选处理流程示意图;

图11是本公开实施例提供的应用于媒体文件的预加载装置的媒体文件的预加载方法的又一个可选处理流程示意图;

图12是本公开示例提供的封装分段媒体文件的一个可选的流程示意图;

图13是本公开实施例提供的从元数据容器解析得到媒体信息的一个可选的流程示意图;

图14是本公开实施例通过网络请求向服务器获取媒体文件中对应分段媒体文件的媒体数据的处理流程示意图;

图15是本公开实施例提供的播放器通过网页的媒体源扩展接口发送分段媒体文件给网页的媒体元素进行解码播放的流程示意图

图16是本公开实施例提供的播放器通过网页的媒体源扩展接口播放分段媒体文件的一个可选的示意图;

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

图18是本公开实施例提供的媒体文件的预加载装置的组成结构示意图。

具体实施方式

为了使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开作进一步地详细描述,所描述的实施例不应视为对本公开的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。

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

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

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

例如,采用MP4容器格式封装多媒体数据的文件被称为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),媒体数据容器中按时间排序的相关的采样(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)是第n个采样的时长,DT(n)是第n个采样的显示时间,采样的排列是按照时间的顺序排序,这样偏移量永远是非负的,DT一般以0开始,以第i个采样的显示时间DT(i)为例,计算公式如下:

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

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

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

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

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

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

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

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

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

例如,在将如图2所示的MP4文件转换为多个FMP4文件时,参见图4,是本公开实施例提供的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)文件,高级串流格式(ASF,Advanced Streaming Format)文件等。

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

下面说明实现本公开实施例的播放器获取给定时段内媒体数据的流程。

当播放一部电影或者一个轨道的时候,播放器必须能够正确的解析数据流,对一定的时间获取对应的媒体数据并确保这一段媒体数据能够被独立解码。

1.确定待获取的媒体数据对应的时段,时段是接续播放当前的播放点的一段时间,播放点对应的时间是相对于媒体时间坐标系统(以媒体文件的播放开始时间为时间原点)的时间度量。

2.检查stts box来确定解码时间对应给定时段的采样的序号。

对于音频帧帧来说,检查stts box来确定解码时间对应给定时段的音频帧的序号。

对于视频帧来说,由于采用压缩算法,给定时段内的首帧如果不是关键帧,还需要根据时间顺序向给定时段的开始时间之前追溯到关键帧,以保证给定时段内的帧能够被解码。

3.根据采用的序号查询stsc box来确定包括采样的块的序号。

4.从stco box中查找块的偏移量。

5.根据采样的序号查找stsz box,找到采样在块内的偏移量和采样的容量。

继续说明实现本公开实施例的查找关键帧的流程。

1.确定给定时间内的采样的序号。

2.检查stss box来发现这个采样之后的关键帧。

3.检查stsc box来发现对应该关键帧的块。

4.从stco box中提取块的偏移量。

5.利用stsz box找到关键帧sample在块内的偏移量和关键帧的容量。

下面首先说明实现本公开实施例的媒体文件的预加载装置,媒体文件的预加载装置显示播放器的用于播放媒体文件的播放窗口;在所述播放窗口中显示所述媒体文件的播放进度;响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识;其中,所述媒体文件对应有多个分段媒体文件,所述预加载的分段媒体文件的播放时间晚于所述播放点的播放时间。

下面继续说明实现本公开实施例的媒体文件的预加载装置的结构。

参见图5,是本公开实施例提供的媒体文件的预加载装置100的一个可选的结构示意图,图5所示的媒体文件的预加载装置包括:至少一个处理器150、至少一个通信总线160、用户接口180、至少一个网络接口170和存储器190。媒体文件的预加载装置100中的各个组件通过通信总线160耦合在一起。可以理解,通信总线160用于实现这些组件之间的连接通信。通信总线160除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为通信总线160。

其中,用户接口180可以包括显示器、键盘、鼠标、轨迹球、点击轮、按键、按钮、触感板或者触摸屏等。网络接口170可以包括标准的有线接口、无线接口可以是WiFi接口。

可以理解,存储器190可以是高速RAM存储器,也可以是非不稳定的存储器(Non-Volatile Memory),例如至少一个磁盘存储器。存储器190还可以是至少一个在物理位置上远离处理器150的存储系统。

本公开实施例提供的应用于媒体文件的预加载装置的媒体文件的预加载方法可以应用于处理器150中,或者由处理器150实现。处理器150可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,应用于媒体文件的预加载装置的媒体文件的预加载方法中的不同操作可以通过处理器150中的硬件形式的集成逻辑电路或者软件形式的指令完成。上述的处理器150可以是通用处理器、DSP或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,处理器150可以实现或者执行本公开实施例应用于媒体文件的预加载装置的媒体文件的预加载方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本公开实施例所提供的应用于媒体文件的预加载装置的媒体文件的预加载方法,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。

作为示例,软件模块可以位于存储介质中,存储介质可以是如图5示出的存储器190,处理器150读取存储器190中的可执行指令,结合其硬件完成本公开实施例提供的应用于媒体文件的预加载装置的媒体文件的预加载方法的一个可选处理流程,如图6所示,包括如下步骤:

步骤S101,显示播放器的用于播放媒体文件的播放窗口。

在一些实施例中,播放器的形态可以是嵌入网页的H5播放器,也可以是专用的视频播放应用(APP,Application);所述网页可以是浏览器的网页,或者内嵌有浏览器内核的APP的网页。

当播放器的形态为嵌入网页的H5播放器时,可以在一个网页页面中显示一个播放窗口,也可以在一个网页页面中显示两个以上播放窗口;以在一个网页页面显示两个播放窗口为例,显示用于播放媒体文件的播放窗口的示意图,如图7A所示。

当播放器的形态为专用的视频播放应用时,显示用于播放媒体文件的播放窗口的示意图,如图7B所示。在实际应用中,安装有视频播放应用的电子设备的显示界面上,可以只显示一个播放窗口,也可以同时显示两个以上的播放窗口。

这里,媒体文件对应有多个分段媒体文件,当媒体文件为支持流媒体播放的文件时,媒体文件为一系列的分段媒体文件的集合;以媒体文件为HLS流媒体文件时,媒体文件为一系列连续的TS文件的集合。当媒体文件为不支持流媒体播放的文件时,如MP4文件,分段媒体文件是从媒体文件中提取的数据重新封装形成的分段MP4文件,分段MP4文件可独立解码播放。

步骤S102,在播放窗口中显示媒体文件的播放进度。

在一些实施例中,在播放器的播放进度条上显示媒体文件的播放进度,如图8A所示,播放完成的媒体文件和未播放的媒体文件在播放进度条上以不同的颜色显示。

在另一些实施例中,在播放器的播放界面上显示媒体文件的播放进度,如图8B所示,在播放器的播放界面上的空白区域显示当前播放点对应的播放时间,以及媒体文件的总的播放时长。

步骤S103,响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识。

在一些实施例中,在播放窗口中显示预加载的分段媒体文件的标识的一个可选示意图,如图9A所示,在播放器的播放进度条中显示预加载的分段媒体文件的标识,且显示方式区别于进度条中已经播放的分段媒体文件。在具体实施时,可以对预加载分段媒体文件分别设置不同的颜色、透明度等显示参数,以进行区别显示。

在另一些实施例中,在播放窗口中显示预加载的分段媒体文件的标识的另一个可选示意图,如图9B所示,除了对预加载分段媒体文件分别设置不同的颜色、透明度等显示参数,以进行区别显示时,还可以在播放器中与分段媒体文件对应的显示界面提示分段媒体文件的时长。

在又一些实施例中,在播放窗口中显示预加载的分段媒体文件的标识的又一个可选示意图,如图9C所示,除了对预加载分段媒体文件分别设置不同的颜色、透明度等显示参数,以及在播放器中与分段媒体文件对应的显示界面提示分段媒体文件的时长,还可以在于分段媒体文件对应的显示界面采用文本或缩略图提示的方式显示分段媒体文件的关键信息,如主要人物、场景等。这里,场景可以采用缩略图的方式进行显示,人物可以采用文本的形式进行显示。

本公开实施例中,分段媒体文件的标识可以一直存在,也可以在超时时间达到后消失。可以仅提示一次分段媒体文件的标识,也可以多次提示分段媒体文件的标识,也可以关闭分段媒体文件的标识的提示功能。当多次提示分段媒体文件的标识时,可以预设两次提示之间的时间间隔。

在一些实施例中,当播放器包括至少两个播放窗口时,在取得聚焦状态的播放窗口中显示分段媒体文件的标识,所显示的分段媒体文件的播放时间晚于所述播放点的播放时间。播放点可以是通过播放进度的跳转操作所到达的时刻,例如原播放点为播放进度的20%,跳转后的播放点为30%;播放点还可以是通过连续播放的方式所到达的时刻,例如从第30分钟开始连续播放到第40分钟所到达的时刻。

这里,在视频播放APP中,取得聚焦状态的播放窗口是指,获得最新的鼠标点击事件或触控事件的播放窗口。在嵌入网页的播放器中,取得聚焦状态的播放窗口是指,播放器同时开启多个播放窗口时被观看的播放窗口,例如H5播放器中一个页面显示多个播放窗口,当页面滚动时部分播放窗口可能会隐藏,在页面中显示的窗口为聚焦窗口;如此,通过在取得聚焦状态的播放窗口中显示分段媒体文件的标识,能够避免对全局的播放窗口进行分段媒体文件的预加载,实现对流量消耗进行精准控制。

本公开实施例中,预加载的分段媒体文件的数量可以为一个或多个,具体可通过如下方式预先设定预加载的分段媒体文件的数量:

1、由播放器全局设定预加载的分段媒体文件的数量,如设定预加载的分段媒体文件的数量为10个。

2、根据承载播放器的网络状况及软/硬件能力设定预加载的分段媒体文件的数量;其中,软/硬件能力包括:可用带宽、可用传输流量、缓存容量、播放器版本等。

以网络带宽为例,预加载的分段媒体文件数量越多,则每次进行播放点切换后,从服务器请求获取的媒体数据量也就越多,占用的下行网络带宽也就越大,也即预加载的分段媒体文件与其所占用的下行网络带宽存在正相关关系,可基于该正相关关系确定播放器能够预加载的分段媒体文件数量。

以可用传输流量为例,预加载的分段媒体文件数量与可用传输流量正相关;即可用传输流量越大,则可预加载较多数量的分段媒体文件;可用传输流量越小,则预加载较少数量的分段媒体文件,以减小网络负载,保证网络的传输性能。

3、播放器从服务器请求分段媒体文件的信息,服务器可以根据媒体文件的内容表现变换记录媒体文件不同内容单元的起始时间而形成分段信息,或者,根据媒体文件中不同时间点的观看频率,将观看频率趋于一致、且连续的时间点记录为分段媒体文件。

4、根据媒体文件的时长,对媒体文件根据时间粒度进行平均划分设定。

在一些实施例中,设置时间粒度与预加载的分段媒体文件数量正相关;即媒体文件的时长较长,则设置预加载的分段媒体文件的数量较多;媒体文件的时长较短,则设置预加载的分段媒体文件的数量较少。

这里,时间粒度可以为一次性设置即有效,或者在特定时间段内有效,或者针对特定媒体文件(如特定类型的媒体文件),或者根据登陆用户设置,时间粒度也可以是自适应确定的。

当时间粒度为自适应确定时,至少包括如下两种情况:

A、基于播放器的下行网络带宽与缓存能够预加载的容量的正相关关系,确定播放器能够预加载数据量,进而根据媒体文件中每帧视频/音频的容量,计算预加载的数据量能够播放时长,以该时长为时间粒度。

B、对于播放器内嵌于网页播放的情况,时间粒度还可以基于播放窗口的数量与所述时间粒度的负相关关系确定;即播放窗口的数量越多,时间粒度越小;如此,能够避免播放窗口预加载分段媒体文件的预加载时长过长的情况,实现每个播放窗口被点击时都能够播放,不会出现没有响应的情况。

上述方式可以随机选用,或者按照特定顺序选用,例如:优先使用从服务器查询的分段媒体文件的信息,如果没有,根据时间粒度形成分段媒体文件。

本公开实施例提供的应用于媒体文件的预加载装置的媒体文件的预加载方法的另一个可选处理流程,如图10所示,包括如下步骤:

步骤S201,显示播放器的用于播放媒体文件的播放窗口。

步骤S202,在播放窗口中显示媒体文件的播放进度。

步骤S203,响应于媒体文件的播放进度所实时到达的播放点,在播放窗口中显示预加载的分段媒体文件的标识。

本公开实施例中步骤S201至步骤S203的具体实现过程与上述实施例中步骤S101至步骤S103的具体实现过程相同。

步骤S204,接收播放窗口的停止播放事件。

在一些实施例中,接收到用户通过鼠标触发或通过触控屏幕触发的播放窗口的停止播放事件。

步骤S205,中止显示晚于实时的播放点的分段媒体文件的标识,并中止相应的分段媒体文件的网络请求。

在一些实施例中,当接收到播放窗口的停止播放事件时,中止显示晚于实时的播放点的分段媒体文件的标识;即当前播放点之后的分段媒体文件的标识均不再显示。

并且,当接收到播放窗口的停止播放事件时,中止相应的分段媒体文件的网络请求;举例来说,可以将相应分段媒体文件的网络请求撤销,也可以保持相应分段媒体文件的网络请求的连接,但是不获取新的媒体数据;直至接收到播放窗口的播放事件时,再恢复网络请求的连接,并获取新的媒体数据。如此,能够实现流量消耗的精准控制。

本公开实施例提供的应用于媒体文件的预加载装置的媒体文件的预加载方法的可选处理流程,如图11所示,包括如下步骤:

步骤S301,显示播放器的用于播放媒体文件的播放窗口。

步骤S302,在播放窗口中显示媒体文件的播放进度。

步骤S303,响应于媒体文件的播放进度所实时到达的播放点,在播放窗口中显示预加载的分段媒体文件的标识。

本公开实施例中步骤S301至步骤S303的具体实现过程与上述实施例中步骤S101至步骤S103的具体实现过程相同。

步骤S304,当播放器以内嵌于网页的方式运行时,向网页的媒体资源扩展接口发送分段媒体文件。

这里,媒体扩展资源接口用于供播放器调用网页的媒体元素播放分段媒体文件。

向网页的媒体资源扩展接口发送分段媒体文件之后,媒体资源扩展接口给予分段媒体文件创建媒体源(Media Source)对象作为虚拟统一资源定位符(U niform ResourceLocator,URL)的数据源,创建缓存对象(Source Buffer)作为媒体源的缓存;再向缓存对象添加分段媒体文件;最后向网页的媒体元素传递虚拟URL,以播放分段媒体文件。所述媒体元素包括audio元素和/或video元素。

在一些实施例中,当媒体文件的预加载装置向媒体资源扩展接口发送的分段媒体文件为流媒体格式的视频文件时,如HLS和FLV;则直接获取视频文件中的分段媒体文件的播放起始时刻和播放结束时刻之间的分段,每个分段可以独立解码播放。

在另一些实施例中,当媒体文件的预加载装置向媒体资源扩展接口发送的分段媒体文件为非流媒体格式的视频文件时,如MP4格式的视频文件时,媒体文件的预加载装置首先通过网络请求向服务器获取媒体文件中对应分段媒体文件的媒体数据;再结合媒体信息计算新的元数据(包括分段媒体文件级别的元数据即moov、以及分段媒体文件中分段级别的元数据即moof),根据分段媒体文件的封装结构封装到分段媒体文件的容器,得到相应的分段媒体文件。

这里,媒体数据包括视频帧和音频帧。

在一个实施例中,播放器从服务器获取媒体文件中的分段媒体文件,将根据媒体数据、以及描述所述媒体数据的元数据根据分段媒体文件的封装结构进行封装,形成能够用于被网页的媒体元素独立解码的分段媒体文件。

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

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

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

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

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

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

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

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

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

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

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

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

上述实施例中,分段媒体文件的封装之前,需要计算待填充的媒体数据的元数据,这需要结合媒体文件中的元数据计算,以得到分段媒体文件级别的元数据(例如对于FMP4文件而言,对应填充到moov box中的元数据),以及分段媒体文件中分段级别的元数据(例如对应FMP4文件而言,对应填充到moof box中的元数据)。

下面,说明解析媒体文件的元数据容器中封装的元数据得到用于描述媒体文件的媒体数据容器中封装的媒体数据的媒体信息的示例性实施。

在本公开的一个实施例中,媒体文件为MP4文件,解析媒体文件的元数据容器中子容器的嵌套结构,根据嵌套结构读取出各子容器中的二进制数据;从所读取出的二进制数据解析出各子容器表征的媒体数据的媒体信息。

结合图2所示的结构,MP4文件的moov容器为嵌套结构,对元数据容器中子容器的嵌套结构进行解析,确定moov容器所嵌套的子容器,例如mvhd容器、音频轨道容器和视频轨道容器等,如果子容器还嵌套有容器则继续解析,直至解析到不再嵌套有容器的子容器时,读取相应的子容器中封装的二进制数据,解析得到二进制数据所表示的媒体消息,例如stss box记录的媒体文件中的关键帧的序号,stsz box记录的媒体文件中每个采样的容量(即大小),等等。

在本公开的一个实施例中,提供根据容器类型设置解析器,根据容器类型解析元数据容器中的子容器从而得到媒体信息的方式,将结合图6进行说明。

参见图13,图13是本公开实施例提供的从元数据容器解析得到媒体信息的一个可选的流程示意图,将结合图13示出的步骤进行说明。

步骤S501,定位元数据容器在媒体文件中的位置。

在一个实施例中,通过从媒体文件的二进制数据读取符合容器头部规范的二进制数据,根据读取的二进制数据中识别的容器的类型和长度,直至定位元数据容器在媒体文件中的偏移量和容量。

举例来说,对于媒体文件的二进制数据,从零字节起始的二进制数据对应文件类型容器,通过容器头部的规范长度,读取媒体文件的二进制数据的起始位置,读取符合容器头部的规范长度的二进制数据,解析读取的二进制数据可以确定媒体文件中位于文件类型容器之后的容器的类型和长度。

如果解析出的类型是文件类型容器,则可以解析出元数据容器的长度(即容量),此时元数据容器的偏移量为文件类型容器的长度。

如果解析出的类型是媒体数据容器,则根据媒体数据容器的长度和分类型容器的长度为偏移量,继续读取符合容器头部的规范长度的二进制数据,从而可以解析出元数据容器的长度(即容量),此时元数据容器的长度为文件类型容器的长度与媒体数据容器的长度的加和。

媒体文件中除了起始的容器是文件类型容器,后续容器的封装顺序没有规范,通过上述解析方式,不管媒体文件中容器的封装顺序是文件类型容器、元数据容器和媒体数据容器,还是文件类型容器、媒体数据容器和元数据容器,都能够准确高效定位文件类型容器在媒体文件中的位置。

步骤S502,根据元数据容器在媒体文件中的位置从媒体文件的二进制数据中获取对应元数据容器的二进制数据。

元数据容器在媒体文件中的位置以偏移量和容量表示,从媒体文件中读取以偏移量对应的位置开始读取二进制数据,直至读取的二进制数据的长度符合元数据容器的容量,从而读取出元数据容器对应的二进制数据。

步骤S503,顺序解析元数据容器二进制数据中对应容器头部的规范长度的二进制数据,得到元数据容器中子容器的容器类型、以及子容器的容器数据的长度。

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

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

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

步骤S504,调用与子容器的容器类型相应类型的解析器,顺序解析未解析的数据中与容器数据的长度相应的二进制数据,得到容器数据所表示的媒体信息。

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

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

情况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的子容器。

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

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

以媒体文件的预加载装置是播放器为例,播放器通过网络请求向服务器获取媒体文件中对应分段媒体文件的媒体数据的处理流程示意图,如图14所示,包括以下步骤:

步骤S601,播放器确定分段媒体文件的播放起始时刻对应的第一时间戳,以及分段媒体文件的播放结束时刻对应的第二时间戳。

步骤S602,播放器向服务器发送网络请求,以查找解码时间在第一时间戳之前、且距离第一时间戳最近的第一关键帧,以及解码时间在第二时间戳之后、且距离第二时间戳最近的第二关键帧。

当第一时间戳对应的视频帧为关键帧时,第一关键帧即为第一时间戳对应的视频帧。当第二时间戳对应的视频帧为关键帧时,第二关键帧即为第二时间戳对应的视频帧。

步骤S603,服务器从自身存储的媒体文件中提取第一关键帧和第二关键帧之间的视频帧,发送至播放器。

步骤S604,播放器向服务器发送网络请求,以查找解码时间在第一关键帧的解码时间之前、且距离第一关键帧的解码时间最近的第一音频帧,以及解码时间在第二关键帧的解码时间之后、且距离第二关键帧的解码时间最近的第二音频帧。

这里,基于解码时间实现视频帧与音频帧的对齐,避免出现视频文件中有画面没声音、或有声音没画面的情况。

步骤S605,服务器从自身存储的媒体文件中提取第一音频帧和第二音频帧之间的音频帧,发送至播放器。

步骤S603中提取的视频帧与步骤S605中提取的音频帧共同构成媒体数据。

需要说明的是,本公开上述实施例中媒体文件的预加载方法由媒体文件的预加载装置上的各种类型播放器来实现,媒体文件的预加载装置可以是台式机电脑和笔记本电脑等各种终端设备。

继续说明播放器向网页的媒体源扩展接口发送分段媒体文件给网页的媒体元素进行解码播放的过程。

参见图15,是本公开实施例提供的播放器通过网页的媒体源扩展接口发送分段媒体文件给网页的媒体元素进行解码播放的流程示意图,将结合图15示出的步骤进行说明。

步骤S701,播放器将分段媒体文件添加到媒体资源扩展接口中的媒体源对象。

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

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

步骤S702,播放器调用媒体资源扩展接口创建对应媒体源对象的虚拟地址。

例如,播放器执行媒体源扩展接口中封装的createObjectURL方法,创建对应媒体源对象的虚拟地址,即虚拟URL,其中封装有Blob类型的分段媒体文件。

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

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

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

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

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

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

基于上述媒体文件的预加载方法,本公开实施例还提供一种媒体文件的预加载装置,如图18所示,媒体文件的预加载装置800包括:

显示单元801,用于显示播放器的用于播放媒体文件的播放窗口,以及在所述播放窗口中显示所述媒体文件的播放进度;

加载单元802,用于响应于所述媒体文件的播放进度所实时到达的播放点,在所述播放窗口中显示预加载的分段媒体文件的标识;

其中,所述媒体文件对应有多个分段媒体文件,所述预加载的分段媒体文件的播放时间晚于所述播放点的播放时间。

在一些实施例中,所述显示单元801,用于在所述播放器的播放进度条中显示预加载的分段媒体文件的标识,且显示方式区别于所述进度条中已经播放的分段媒体文件。

在一些实施例中,所述显示单元801,用于当所述播放器包括至少两个播放窗口时,在取得聚焦状态的播放窗口中显示分段媒体文件的标识,所显示的分段媒体文件的播放时间晚于所述播放点的播放时间。

在一些实施例中,所述媒体文件的预加载装置800,还包括:

中止单元803,用于当接收到播放窗口的停止播放事件时,中止显示晚于实时的播放点的分段媒体文件的标识,并中止相应的分段媒体文件的网络请求。

在一些实施例中,所述媒体文件的预加载装置800,还包括:

发送单元804,用于当所述播放器以内嵌于网页的方式运行时,向所述网页的媒体资源扩展接口发送所述分段媒体文件,所述媒体资源扩展接口用于供所述播放器调用所述网页的媒体元素播放所述分段媒体文件。

在一些实施例中,所述媒体文件的预加载装置800,还包括:

获取单元805,用于当所述媒体文件为非流媒体封装格式时,通过网络请求从服务器获取所述媒体文件中对应所述分段媒体文件的媒体数据;

将所述获取的媒体数据、以及对应的元数据封装到分段媒体文件的容器,得到相应的分段媒体文件。

在一些实施例中,获取单元805,用于确定所述分段媒体文件的播放起始时刻对应的第一时间戳,以及所述分段媒体文件的播放结束时刻对应的第二时间戳;

查找解码时间在所述第一时间戳之前、且距离所述第一时间戳最近的第一关键帧,以及解码时间在所述第二时间戳之后、且距离所述第二时间戳最近的第二关键帧;

从所述媒体文件中提取所述第一关键帧和所述第二关键帧之间的视频帧。

在一些实施例中,获取单元805,用于查找解码时间在所述第一关键帧的解码时间之前、且距离所述第一关键帧的解码时间最近的第一音频帧,以及解码时间在所述第二关键帧的解码时间之后、且距离所述第二关键帧的解码时间最近的第二音频帧;

从所述媒体文件中提取所述第一音频帧和所述第二音频帧之间的音频帧。

本公开实施例还提供一种媒体文件的预加载装置,包括:

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

处理器,用于通过执行所述存储器中存储的可执行指令时实现上述的媒体文件的预加载方法。

本公开实施例中,媒体文件的预加载装置可以实施为播放器,播放器的形态可以是嵌入网页的H5播放器,也可以是专用的视频播放APP。

本公开实施例还提供一种存储介质,所述存储介质中存储有可执行指令,该计算机可执行指令用于执行上述的媒体文件的预加载方法。

综上所述,本公开实施例具有以下技术效果:

1、通过预先将媒体文件划分得到多个媒体文件分段,在播放窗口中显示预加载的分段媒体文件的标识,使得用户能够基于预加载的分段媒体文件的标识,选择性的观看播放点之后的媒体文件分段;由于播放器预先加载播放点之后的媒体文件分段,从而避免了流量的消耗。

2、当需要播放媒体文件的给定时段时,只需要从非流媒体格式的媒体文件提取给定时间的媒体数据,封装为可独立解码的分段媒体文件即可,通过这种方式,一方面,克服了非流媒体格式文件需要完整下载后才可以独立播放的限制,播放实时性好;另一方面,由于仅需要针对给定时段构造分段媒体文件,而不是将完整的媒体文件预先转换为流媒体格式,转换延迟小因此不需要预先存储,除了原始的媒体文件不会占用额外的存储空间,显著降低了对存储空间的占用。

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

4、播放器获取的是媒体文件的关键帧之间的部分媒体数据,实现了对播放媒体文件过程中,媒体数据加载的控制。

5、所封装得到的分段媒体文件基于获取的媒体文件的部分媒体数据,而非媒体文件的全部数据,如此,转换延迟小,不需要预先存储,除了原始的媒体文件不会占用额外的存储空间,显著降低了对存储空间的占用,进一步使得在用户观看过程中进行分辨率切换时,不会出现黑屏或卡顿,提高了分辨率切换的实时性。

6、网页的媒体元素基于虚拟地址获取分段媒体文件进行解码播放,而非基于媒体文件的真实地址进行媒体数据获取并播放,实现了对MP4文件的真实地址的保护。

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

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

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类