一种用于解码视频的方法、装置和播放器的制造方法_2

文档序号:8441776阅读:来源:国知局
缓存、解封装、获取视频的头部信息。缓存表示把部分视频流下载下来,解封装是指获取视频流的信息,包括图像编码类型、音频编码类型、视频的分辨率、帧率、码率、音频采样率、视频时长等等信息,例如如果是his流,则需要获取m3u8信息,如果是http的MP4流,则需要把mp4头按照协议解析获取如上信息,其他视频流不一一列举。
[0048]播放所述视频数据流的终端的信息例如包括但不限于终端所使用的系统的版本、终端的机型、CPU信息等。
[0049]预设的解码方案可以包括多种解码方案,例如:MediaCodec硬件解码、OpenMax硬件解码(简称OMX)、StageFright硬件解码和软件解码。MediaCodec是google提供的在android系统上的标准编码和解码接口 ;0penMax —个不需要授权、跨平台的软件抽象层,以C语言实现的软件接口,用来处理多媒体,是由Khixmos Group提出的标准,目标在于创造一个统一的接口,加速大量多媒体资料的处理;StageFright也是google在android系统引入的底层硬件解码的api,是基于OpenMax实现的一套硬件解码接口,android2.2开始引入。
[0050]步骤S12:调用选择的解码方案以对待解码的视频数据流进行解码。
[0051]在本发明中,当已完成对待解码的视频数据流的解码准备后,也就是对待解码的视频数据流进行缓存以及已解封装,获取了视频的头部信息,可以开始解码之后,才根据终端的机型和系统从预设的解码方案中选择适合的解码方案进行解码。这样做的好处在于:可以在播放器中封装各种不同的解码方案,还能够兼顾到不同的解码类型的结构,比如在Android系统里使用MediaCodec的硬件解码是使用java层代码实现,这么设计可以很好的支持这种多样性,也方便了后续的扩展;在解码准备后选择解码方案进行解码,如果需要更换解码方案,无需再次缓冲和进行解码准备,可以直接切换解码方案,实现了动态切换,这样的切换对于用户几乎感知不到,提高了用户的使用体验。
[0052]如图2所示为本发明的另一实施例中的用于解码视频的方法的主要流程,在该实施例中,当选择的解码方案解码失败时,可以更换解码方案。具体地,本实施例包括以下步骤:
[0053]步骤S21:判断对待解码的视频数据流的解码准备是否已完成,若是,执行步骤S22 ;若否,则重复执行该步骤。
[0054]在播放器中,对待解码的视频数据流的解码准备通常由播放器内核进行,包括对视频数据流进行缓存、解封装、获取视频的头部信息等处理。
[0055]在本发明的其他实施例中,可以通过判断是否接收到播放器内核发出的“已作好解码准备”的通知,来判断是否已完成对待解码的视频数据流的解码准备。
[0056]步骤S22:获取播放所述视频数据流的终端的信息。
[0057]在本发明的其他实施例中,该步骤也可以是预先执行的,也就是可以预先获取终端的信息并保存下来。
[0058]步骤S23:从预设的解码方案中选择与获取的信息相应的解码方案A。
[0059]播放器中可预设多个解码方案,可以包括多个硬件解码方案,也可以包括多个硬件解码方案和软件解码方案。与获取的信息相应的解码方案可以是多个。
[0060]步骤S24:调用选择的解码方案A以对视频数据流进行解码。
[0061]还可以调用对解码方案A的初始化,真正的初始化在解码方案A中完成。初始化一般指设定需要解码的图像宽高、视频时长、图像绘制视图等信息。初始化之后就可以调用解码方案A进行解码了。
[0062]步骤S25:判断选择的解码方案对视频数据流是否成功解码,若是,则结束;若否,则执行步骤S26。
[0063]在本发明的其他实施例中,当选择的解码方案对视频数据流未成功解码时,将发送“解码失败”的通知,因此,可以通过判断是否接收到解码方案发送的“解码失败”的通知,来判断选择的解码方案对视频数据流是否成功解码。
[0064]步骤S26:从预设的解码方案中选择与获取的信息相应的另一个解码方案。
[0065]步骤S27:调用选择的解码方案以从视频数据流中未成功解码处开始解码,然后返回步骤S25。
[0066]此时,播放器的切换代价仅仅是对不同解码方案进行了一个初始化,也就是说播放器解码方案的切换基本不耗费时间,所以如果发生了解码方案的切换对于用户来说基本感知不到。
[0067]在本发明的其他实施例中,从预设的解码方案中选择与终端的信息相应的解码方案时,优先从预设的解码方案中的硬件解码方案中进行选择,因为硬件解码相比软件解码,使终端流畅播放高清视频。只有当所有与终端的信息相应的硬件解码方案都无法成功解码时,再从预设的解码方案中的软件解码方案中选择与终端的信息相应的解码方案,以确保视频能够被播放。
[0068]在本发明的其他实施例中,上述步骤S26可替换为:
[0069]步骤S26’,判断是否需要使用当前选择的解码方案继续解码,若是,则返回步骤S24,若否,则从预设的解码方案中选择与获取的信息相应的另一个解码方案。
[0070]可以根据解码失败所返回的信息来判断是什么原因导致的失败,如果当前选择的解码方案已克服该原因,则可以不必更换解码方案。
[0071]如图3所示为本发明另一实施例,在该实施例中,不同的解码方案对应不同的绘制图层,所述方法包括以下步骤:
[0072]步骤S31:判断对待解码的视频数据流的解码准备是否已完成,若是,执行步骤S32 ;若否,则重复执行该步骤。
[0073]步骤S32:获取播放所述视频数据流的终端的信息。
[0074]步骤S33:从预设的解码方案中选择与获取的信息相应的解码方案,以及从预设的绘制图层中选择与所选择的解码方案对应的绘制图层。
[0075]步骤S34:调用选择的解码方案以及选择的绘制图层以对视频数据流进行解码。
[0076]采用多个绘制图层的方式,根据不同的解码方式,来选择不同的绘制图层,达到灵活切换的目的。一般情况Android系统上可以用来做图像绘制的图层分成四种:SurfaceView、GLSurfaceView、TextureView、TextureView (+OpenGL),可以使用FrameLayout (框架布局)包含各种不同的绘制图层(view)。当从预设的绘制图层中选择与所选择的解码方案对应的绘制图层后,可以将预设的绘制图层中的其他的绘制图层设置为不可见。
[0077]图4为本发明一实施例提供的用于解码视频的装置,如图4所示,用于解码视频的装置,包括:
[0078]选择模块401,用于当对待解码的视频数据流的解码准备已完成后,根据播放该视频的终端的信息,从预设的解码方案中选择与所述信息相应的解码方案。
[0079]调用模块402,用于调用选择的解码方案以对待解码的视频数据流进行解码。
[0080]所述选择模块401还用于,当选择的解码方案对解封装后的视频数据流未成功解码时,根据播放所述视频数据流的终端的信息,从预设的解码方案中选择与所述信息相应的另一个解码方案。
[0081]所述调用模块402还用于,调用所述另一个解码方案以从所述视频数据流中未成功解码处开始解码。
[0082]所述选择模块401还用于,根据播放该视频的终端的信息,优先从预设的解码方案中的硬件解码方案中选择与所述信息相应的解码方案;最后从预设的解码方案中的软件解码方案中选择与所述信息相应的解码方案。
[0083]所述选择模块401还用于,根据播放该视频的终端的信息,从预设的解码方案中选择与所述信息相应的解码方案,以及从预设的绘制图层中选择与所选择的解码方案对应的绘制图层。
[0084]所述调用模块402还用于,调用选择的解码方案以及选择的绘制图层以对待解码的视频数据流进行解码。
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1