播放多媒体文件的方法及装置
技术领域
本发明涉及信息技术领域,尤其涉及一种播放多媒体文件的方法及装置。
背景技术
多媒体文件的封装格式包括MP4、MOV、FLV、AVI、MKV和RMVB等。这些封装格式标记了多媒体文件使用的封装协议,以便应用层使用对应的解复用器对该多媒体文件的音视频进行分离。不同的封装协议采用不同的参数标准,例如HeaderSlice、HeaderInfo或HeaderIndex等,这些参数可以用于解析多媒体文件的基本信息,例如是否存在音频及字幕、该文件的轨道信息等。这些基本信息可以用于初始化解复用器的相关参数,由此使播放器能通过解复用器正确分离音视频数据,从而供解码模块进行解码处理。
多媒体文件的编码格式是针对解复用器拆分出的音视频数据而存在的重要参数。目前,大多数视频采用H264进行编码,大多数音频采用AAC(Advanced Audio Coding,高级音频编码)进行编码。每一种编码方法都有其特定的协议用于解析额外数据(extradata)。视频数据的额外数据中包含多个NALU(Network Abstract Layer Unit,网络抽象层单元)字段,在视频数据的NALU字段中,根据其编码协议,存储SPS(Sequence Parameter Set,序列参数集)、PPS(Picture Parameter Set,图像参数集)和IDR(Instantaneous DecodingRefresh,即时解码刷新)等信息。SPS、PPS和IDR是视频解码的重要参数。音频数据的额外数据中也包括NALU字段,在音频数据的NALU字段中,可以包含esds字段等重要的音频参数。SPS和PPS等信息可以帮助解码器获取AVCProfileIndication(Advanced Video CodingProfile Indication,高级视频编码配置文件指示)和音频采样率等信息。当且仅当解码器正确收集以上相关信息后,方可进行多媒体文件的解码及渲染。
播放器的性能高低一般根据播放器播放视频占用的系统内存、播放器播放视频的功耗以及播放器播放视频的丢包率来评判。播放器的播放流程包括读取多媒体文件、解复用、解码和渲染等步骤。现有技术中,解复用和解码通过软件层完成。在播放器架构中,解码模块是耗时最大、占用系统内存最大的模块。其原因在于,在解码阶段需要采用大量算法对H264数据进行解压缩,从而占用大量的系统内存和CPU(Central Processing Unit,中央处理器)等资源,导致对设备产生了较高的负载。软件层的资源消耗无可避免地造成了设备的功耗增加。由于现有的播放器的应用场景多为移动设备,而移动设备的电池续航能力有限,因此高功耗的播放器将大大减少移动设备的续航时间。此外,由于终端设备的性能参差不齐,当播放器播放清晰度较高的视频时,一些性能较低的终端设备在播放过程中容易出现卡顿现象或者APP(Application,应用)无响应等现象,从而影响用户体验。
发明内容
技术问题
有鉴于此,本发明要解决的技术问题是,现有技术在播放多媒体文件时,采用软件解码的方式对多媒体文件进行解码,导致解码过程占用大量的系统内存和CPU资源,耗时较大,且在播放过程中容易出现卡顿现象或者应用无响应的现象。
解决方案
为了解决上述技术问题,根据本发明的一实施例,提供了一种播放多媒体文件的方法,包括:
获取待播放的多媒体文件;
对所述多媒体文件进行解复用,得到所述多媒体文件对应的解复用数据以及所述解复用数据的格式信息;
根据所述解复用数据的格式信息初始化硬件解码器;
采用所述硬件解码器对所述解复用数据进行解码,得到所述解复用数据对应的解码数据;
采用硬件渲染器对所述解码数据进行渲染。
对于上述方法,在一种可能的实现方式中,所述方法基于MediaCodec框架。
对于上述方法,在一种可能的实现方式中,采用所述硬件解码器对所述解复用数据进行解码,得到所述解复用数据对应的解码数据,包括:
采用所述硬件解码器对所述解复用数据中的待解码帧进行解码,得到所述待解码帧对应的帧解码数据。
对于上述方法,在一种可能的实现方式中,在采用所述硬件解码器对所述解复用数据中的待解码帧进行解码之前,所述方法还包括:将所述待解码帧的时间戳发送至所述硬件解码器;
在得到所述待解码帧对应的帧解码数据之后,所述方法还包括:接收所述硬件解码器返回的所述帧解码数据的时间戳和所述时间戳的序号,其中,所述帧解码数据的时间戳与所述待解码帧的时间戳相同。
对于上述方法,在一种可能的实现方式中,采用硬件渲染器对所述解码数据进行渲染,包括:
采用所述硬件渲染器根据所述帧解码数据的时间戳和所述时间戳的序号对所述帧解码数据进行渲染。
对于上述方法,在一种可能的实现方式中,根据所述解复用数据的格式信息初始化硬件解码器,具体为:
采用Java本地接口,通过对象与MediaCodec框架进行交互,根据所述解复用数据的格式信息初始化硬件解码器。
为了解决上述技术问题,根据本发明的另一实施例,提供了一种播放多媒体文件的装置,包括:
获取模块,用于获取待播放的多媒体文件;
解复用模块,用于对所述多媒体文件进行解复用,得到所述多媒体文件对应的解复用数据以及所述解复用数据的格式信息;
初始化模块,用于根据所述解复用数据的格式信息初始化硬件解码器;
解码模块,用于采用所述硬件解码器对所述解复用数据进行解码,得到所述解复用数据对应的解码数据;
渲染模块,用于采用硬件渲染器对所述解码数据进行渲染。
对于上述装置,在一种可能的实现方式中,所述装置基于MediaCodec框架。
对于上述装置,在一种可能的实现方式中,所述解码模块具体用于:
采用所述硬件解码器对所述解复用数据中的待解码帧进行解码,得到所述待解码帧对应的帧解码数据。
对于上述装置,在一种可能的实现方式中,所述装置还包括:
时间戳发送模块,用于将所述待解码帧的时间戳发送至所述硬件解码器;
时间戳及序号接收模块,用于接收所述硬件解码器返回的所述帧解码数据的时间戳和所述时间戳的序号,其中,所述帧解码数据的时间戳与所述待解码帧的时间戳相同。
对于上述装置,在一种可能的实现方式中,所述渲染模块具体用于:
采用所述硬件渲染器根据所述帧解码数据的时间戳和所述时间戳的序号对所述帧解码数据进行渲染。
对于上述装置,在一种可能的实现方式中,所述初始化模块具体用于:
采用Java本地接口,通过对象与MediaCodec框架进行交互,根据所述解复用数据的格式信息初始化硬件解码器。
有益效果
通过在播放多媒体文件的过程中,根据解复用数据的格式信息初始化硬件解码器,采用硬件解码器对解复用数据进行解码,并采用硬件渲染器对解码数据进行渲染,根据本发明实施例的播放多媒体文件的方法及装置在播放大多数的多媒体文件的情况下,能够采用硬件解码替代软件解码,从而能够降低CPU占用率,采用GPU(Graphics ProcessingUnit,图像处理器)硬件加速替代本地软件算法,从而能够降低系统内存开销,降低系统负载,并能够降低播放多媒体文件产生的功耗,且避免在播放过程中出现卡顿现象或者APP无响应的现象,提高了用户体验,能够使更多的中低端机型播放更高清晰度的多媒体文件。
根据下面参考附图对示例性实施例的详细说明,本发明的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本发明的示例性实施例、特征和方面,并且用于解释本发明的原理。
图1示出根据本发明一实施例的播放多媒体文件的方法的实现流程图;
图2示出根据本发明一实施例的播放多媒体文件的方法中硬件解码器进行解码所根据的数据结构的示意图;
图3示出根据本发明一实施例的播放多媒体文件的方法的一示例性的实现流程图;
图4示出根据本发明一实施例的播放多媒体文件的方法中的同步逻辑的示意图;
图5示出根据本发明一实施例的播放多媒体文件的方法的另一示例性的实现流程图;
图6a示出根据现有的播放多媒体文件的方法播放垂直分辨率为480的视频文件时CPU占用率的示意图;
图6b示出根据本发明一实施例的播放多媒体文件的方法播放垂直分辨率为480的视频文件时CPU占用率的示意图;
图6c示出根据现有的播放多媒体文件的方法播放垂直分辨率为720的视频文件时CPU占用率的示意图;
图6d示出根据本发明一实施例的播放多媒体文件的方法播放垂直分辨率为720的视频文件时CPU占用率的示意图;
图7示出根据本发明另一实施例的播放多媒体文件的装置的结构框图;
图8示出了本发明的另一个实施例的一种播放多媒体文件的设备的结构框图。
具体实施方式
以下将参考附图详细说明本发明的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本发明的主旨。
实施例1
图1示出根据本发明一实施例的播放多媒体文件的方法的实现流程图。如图1所示,该方法主要包括:
在步骤S101中,获取待播放的多媒体文件。
需要说明的是,本实施例的执行主体可以为手机或者平板电脑等移动终端,还可以为其他播放多媒体文件的装置,在此不作限定。
在本发明实施例中,可以从本地获取待播放的多媒体文件,也可以从服务器端获取待播放的多媒体文件。
在一种可能的实现方式中,该方法基于MediaCodec框架。在该实现方式中,播放多媒体文件的装置基于Android操作系统。
在步骤S102中,对多媒体文件进行解复用,得到多媒体文件对应的解复用数据以及解复用数据的格式信息。
作为本发明实施例的一个示例,通过软件层对多媒体文件进行解复用。
在步骤S103中,根据解复用数据的格式信息初始化硬件解码器。
在步骤S104中,采用硬件解码器对解复用数据进行解码,得到解复用数据对应的解码数据。
在步骤S105中,采用硬件渲染器对解码数据进行渲染。
在本发明实施例中,采用硬件解码器替代软件解码器,采用硬件渲染器替代软件渲染器,从而将解码以及渲染流程由软件实现更改为硬件实现,能够充分使用GPU硬件加速,既节省了CPU资源,又节省了系统内存资源,同时由于避免了大量的算法逻辑,大大降低了播放多媒体文件产生的功耗。
图2示出根据本发明一实施例的播放多媒体文件的方法中硬件解码器进行解码所根据的数据结构的示意图。如图2所示,该数据结构可以为根据H264规范解析出的数据结构。图2所示的数据结构中的各项参数可以存在于多媒体文件的额外数据(extradata)中。
在一种可能的实现方式中,采用硬件解码器对解复用数据进行解码,得到解复用数据对应的解码数据,包括:采用硬件解码器对解复用数据中的待解码帧进行解码,得到待解码帧对应的帧解码数据。在本实现方式中,采用硬件解码器对解复用数据进行解码,可以为按照解复用数据中各个待解码帧的时间顺序,分别对各个待解码帧进行解码。
在一种可能的实现方式中,在采用硬件解码器对解复用数据中的待解码帧进行解码之前,方法还包括:将待解码帧的时间戳发送至硬件解码器;在得到待解码帧对应的帧解码数据之后,方法还包括:接收硬件解码器返回的帧解码数据的时间戳和时间戳的序号,其中,帧解码数据的时间戳与待解码帧的时间戳相同。
在本发明实施例中,采用硬件层进行解码和渲染,而采用软件层进行解复用。为了适应软件解码的流程,作为本发明实施例的一个示例,采用消息回调的方式,在采用硬件解码器对待解码帧进行解码之前,将待解码帧的时间戳发送至硬件解码器,并在硬件解码器解码得到帧解码数据之后,接收硬件解码器返回的帧解码数据的时间戳和时间戳的序号,通过C层回调函数,从而在正确的时间点进行下一步的渲染操作。在本示例中,通过时间戳将硬件解码流程与软件解码流程进行统一,从而能够在后期的版本维护中节省开发量以及降低维护成本。
在一种可能的实现方式中,采用硬件渲染器对解码数据进行渲染,包括:采用硬件渲染器根据帧解码数据的时间戳和时间戳的序号对帧解码数据进行渲染。在该实现方式中,根据帧解码数据的时间戳和时间戳的序号对帧解码数据进行渲染,从而能够保证音视频同步。
图3示出根据本发明一实施例的播放多媒体文件的方法的一示例性的实现流程图。如图3所示,该方法包括:
在步骤S301中,获取待播放的多媒体文件。
在步骤S302中,对多媒体文件进行解复用,得到多媒体文件对应的解复用数据以及解复用数据的格式信息。
在步骤S303中,根据解复用数据的格式信息初始化硬件解码器。
在步骤S304中,将待解码帧的时间戳发送至硬件解码器。
在步骤S305中,采用硬件解码器对解复用数据中的待解码帧进行解码,得到待解码帧对应的帧解码数据。
在步骤S306中,接收硬件解码器返回的帧解码数据的时间戳和时间戳的序号,其中,帧解码数据的时间戳与待解码帧的时间戳相同。
在步骤S307中,采用所述硬件渲染器根据所述帧解码数据的时间戳和所述时间戳的序号对所述帧解码数据进行渲染。
图4示出根据本发明一实施例的播放多媒体文件的方法中的同步逻辑的示意图。如图4所示,例如,图像数据解码得到YUV数据(Y表示明亮度,U和V表示色度),音频数据解码得到PCM(Pulse Code Modulation,脉冲编码调制)数据,在播放每一帧前分别进行同步,从而保证音视频同步。
图5示出根据本发明一实施例的播放多媒体文件的方法的另一示例性的实现流程图。如图5所示,该方法包括:
在步骤S501中,获取待播放的多媒体文件;
在步骤S502中,对多媒体文件进行解复用,得到多媒体文件对应的解复用数据以及解复用数据的格式信息;
在步骤S503中,采用Java本地接口,通过对象与MediaCodec框架进行交互,根据解复用数据的格式信息初始化硬件解码器;
在步骤S504中,采用硬件解码器对解复用数据进行解码,得到解复用数据对应的解码数据;
在步骤S505中,采用硬件渲染器对解码数据进行渲染。
作为本发明实施例的一个示例,在进行Android层硬件解码器的初始化时,可以采用JNI(Java Native Interface,Java本地接口)方式,通过对象与Android的MediaCodec框架进行交互。
图6a示出根据现有的播放多媒体文件的方法播放垂直分辨率为480的视频文件时CPU占用率的示意图,图6b示出根据本发明一实施例的播放多媒体文件的方法播放垂直分辨率为480的视频文件时CPU占用率的示意图。经测试,采用现有的播放多媒体文件的方法播放垂直分辨率为480的视频文件时CPU占用率的平均值为28%,采用本发明一实施例的播放多媒体文件的方法播放垂直分辨率为480的视频文件时CPU占用率的平均值为16%。
图6c示出根据现有的播放多媒体文件的方法播放垂直分辨率为720的视频文件时CPU占用率的示意图,图6d示出根据本发明一实施例的播放多媒体文件的方法播放垂直分辨率为720的视频文件时CPU占用率的示意图。经测试,采用现有的播放多媒体文件的方法播放垂直分辨率为720的视频文件时CPU占用率的平均值为34%,采用本发明一实施例的播放多媒体文件的方法播放垂直分辨率为720的视频文件时CPU占用率的平均值为17%。
这样,通过在播放多媒体文件的过程中,根据解复用数据的格式信息初始化硬件解码器,采用硬件解码器对解复用数据进行解码,并采用硬件渲染器对解码数据进行渲染,根据本发明实施例的播放多媒体文件的方法在播放大多数的多媒体文件的情况下,能够采用硬件解码替代软件解码,从而能够降低CPU占用率,采用GPU硬件加速替代本地软件算法,从而能够降低系统内存开销,降低系统负载,并能够降低播放多媒体文件产生的功耗,且避免在播放过程中出现卡顿现象或者APP无响应的现象,提高了用户体验,能够使更多的中低端机型播放更高清晰度的多媒体文件。
实施例2
图7示出根据本发明另一实施例的播放多媒体文件的装置的结构框图。为了便于说明,仅示出了与本发明实施例相关的部分。
如图7所示,该装置包括:获取模块71,用于获取待播放的多媒体文件;解复用模块72,用于对所述多媒体文件进行解复用,得到所述多媒体文件对应的解复用数据以及所述解复用数据的格式信息;初始化模块73,用于根据所述解复用数据的格式信息初始化硬件解码器;解码模块74,用于采用所述硬件解码器对所述解复用数据进行解码,得到所述解复用数据对应的解码数据;渲染模块75,用于采用硬件渲染器对所述解码数据进行渲染。
在一种可能的实现方式中,所述装置基于MediaCodec框架。
在一种可能的实现方式中,所述解码模块74具体用于:采用所述硬件解码器对所述解复用数据中的待解码帧进行解码,得到所述待解码帧对应的帧解码数据。
在一种可能的实现方式中,所述装置还包括:时间戳发送模块76,用于将所述待解码帧的时间戳发送至所述硬件解码器;时间戳及序号接收模块77,用于接收所述硬件解码器返回的所述帧解码数据的时间戳和所述时间戳的序号,其中,所述帧解码数据的时间戳与所述待解码帧的时间戳相同。
在一种可能的实现方式中,所述渲染模块75具体用于:采用所述硬件渲染器根据所述帧解码数据的时间戳和所述时间戳的序号对所述帧解码数据进行渲染。
在一种可能的实现方式中,所述初始化模块73具体用于:采用Java本地接口,通过对象与MediaCodec框架进行交互,根据所述解复用数据的格式信息初始化硬件解码器。
需要说明的是,这样,通过在播放多媒体文件的过程中,根据解复用数据的格式信息初始化硬件解码器,采用硬件解码器对解复用数据进行解码,并采用硬件渲染器对解码数据进行渲染,根据本发明实施例的播放多媒体文件的装置在播放大多数的多媒体文件的情况下,能够采用硬件解码替代软件解码,从而能够降低CPU占用率,采用GPU硬件加速替代本地软件算法,从而能够降低系统内存开销,降低系统负载,并能够降低播放多媒体文件产生的功耗,且避免在播放过程中出现卡顿现象或者APP无响应的现象,提高了用户体验,能够使更多的中低端机型播放更高清晰度的多媒体文件。
实施例3
图8示出了本发明的另一个实施例的一种播放多媒体文件的设备的结构框图。所述播放多媒体文件的设备1100可以是具备计算能力的主机服务器、个人计算机PC、或者可携带的便携式计算机或终端等。本发明具体实施例并不对计算节点的具体实现做限定。
所述播放多媒体文件的设备1100包括处理器(processor)1110、通信接口(Communications Interface)1120、存储器(memory)1130和总线1140。其中,处理器1110、通信接口1120、以及存储器1130通过总线1140完成相互间的通信。
通信接口1120用于与网络设备通信,其中网络设备包括例如虚拟机管理中心、共享存储等。
处理器1110用于执行程序。处理器1110可能是一个中央处理器CPU,或者是专用集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器1130用于存放文件。存储器1130可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1130也可以是存储器阵列。存储器1130还可能被分块,并且所述块可按一定的规则组合成虚拟卷。
在一种可能的实施方式中,上述程序可为包括计算机操作指令的程序代码。该程序具体可用于:实现实施例1中各步骤的操作。
本领域普通技术人员可以意识到,本文所描述的实施例中的各示例性单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件形式来实现,取决于技术方案的特定应用和设计约束条件。专业技术人员可以针对特定的应用选择不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
如果以计算机软件的形式来实现所述功能并作为独立的产品销售或使用时,则在一定程度上可认为本发明的技术方案的全部或部分(例如对现有技术做出贡献的部分)是以计算机软件产品的形式体现的。该计算机软件产品通常存储在计算机可读取的非易失性存储介质中,包括若干指令用以使得计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各实施例方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。