硬解码音视频的方法及装置的制造方法_2

文档序号:8434225阅读:来源:国知局
发者快速开发C(或C++)的动态库,并能 自动将so和java应用一起打包成apk,通过NDK可W使得开发者直接接触An化oid的系统 资源,并使用传统的C/C++语言编写程序,并在程序封包(.apk)文件中直接嵌入原生库文 件(即Amlroid的系统资源中的库文件)。
[004引 AVFormatSource ;是一个继承了An化oid自带媒体资源类的资源的格式库。
[0046] OMXClient ;用于与0MXL通讯的渠道。
[0047] MediaSource ;An化oid自带媒体资源类。
[0048] ANativeWindow ;是An化oid的本地窗口类,用于连接化en化(即开放的图形程序 接口)和An化oid窗口系统的桥梁,即化en化通过ANativeWindow类来间接地操作An化oid 窗口系统。
[0049] avformat_open_hput;FFMPEG打开媒体的函数。
[0050] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的 附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是 本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术 人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范 围。
[0051]需要说明的是,本发明的说明书和权利要求书及上述附图中的术语"第一"、"第 二"等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解该样使用 的数据在适当情况下可W互换,W便该里描述的本发明的实施例能够W除了在该里图示或 描述的那些W外的顺序实施。此外,术语"包括"和"具有"W及他们的任何变形,意图在于 覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限 于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于该些过程、方法、产 品或设备固有的其它步骤或单元。
[005引图1是根据本发明实施例的硬解码音视频的装置的结构示意图。如图1所示,该 装置可W包括:转换模块10,用于转换初始音视频的格式得到目标音视频;获取模块30,用 于获取目标音视频的音视频信息和音视频数据;第一创建模块50,用于根据音视频信息创 建解码器;解码模块70,用于使用解码器解码音视频数据得到解码数据;播放模块90,用于 使用解码数据播放目标音视频。
[0053] 采用本发明,在通过转换模块转换初始音视频的格式得到目标音视频之后,通过 获取模块获取目标音视频的音视频信息和音视频数据之后,第一创建模块根据音视频信息 创建解码器,然后通过解码模块使用解码器解码音视频数据得到解码数据,播放模块使用 解码数据播放目标视频。从而解决了现有技术中An化oid中无法使用硬解码播放多种格式 的音视频的问题,实现了在Amlroid中无法使用硬解码播放音视频的效果。
[0054] 在本发明的上述实施例中,通过FFmpeg可W实现转换初始音视频的格式,通过 FFmpeg打开目标视频文件,然后获取到目标视频的MediaSource(即上述实施例中的音视 频数据),调用0MX的解码器解码音视频数据的数据峽,并将解码后的解码数据撞染到画面, 完成对音视频的播放。
[0055] 具体地,在本发明的上述实施例中,可W使用FFmpeg和libstage化i曲t进行硬解 码,主要过程是通过FFmpeg获取到目标音视频的音视频信息和音视频数据,然后根据音视 频信息创建0MX的解码器,当解码的时候,通过0MX的读取方法获取音视频数据,将其解码 得到解码数据W播放目标视频。
[0056] 在本发明的上述实施例中,装置还可W包括:第二创建模块,用于根据音视频信息 创建撞染器;播放模块可W包括撞染模块,用于使用撞染器撞染解码数据W播放目标音视 频。
[0057] 具体地,第二创建模块可W在根据音视频信息创建解码器decoder的同时,根据 音视频信息创建解码器render,然后撞染模块使用撞染器一峽一峽地读取解码数据将读取 到的峽数据(即解码数据)撞染到峽缓冲区硬件设备中,W显示目标视频。其中,峽缓冲区硬 件设备可W是移动设备的显示设备,如屏幕。
[0058] 根据本发明的上述实施例,撞染模块可W包括;第H创建模块,用于根据音视频信 息创建初始化界面;撞染将解码数据撞染到初始化界面W播放目标音视频。
[0059] 在本发明的上述实施例中,第一创建模块可W包括:第一提取模块,用于从音视频 信息中提取编译码器编号;数据获取模块,用于获取与编译码器编号对应的元数据;创建 子模块,用于使用元数据创建解码器。
[0060] 具体地,使用本发明的上述实施例,从获取的音视频信息中提取编译码器编号,根 据音视频的CodecID获取到指定的元数据MetaData,创建OMX的解码器和撞染器,当解码的 时候,通过0MX的读取方法获取到音视频缓冲区(MediaBuffer)的峽数据进行解码得到解 码数据,撞染器将解码数据撞染到显示窗口中。其中,此处的元数据是指描述目标视频的数 据;解码数据为一峽一峽的数据。
[006^ 更具体地,通过调用OMXClient打开解码器OMXCodec: :Create获取到OMXCodec:MediaSource。然后使用解码器不断调用MediaSource的读取方法将目标视频的 元数据解码后读取到MediaBuffer中,然后撞染器从MediaBuffer读取解码数据,如果该解 码数据是有效的峽就将该解码数据撞染到ANativeWindow。
[0062] 在本发明的上述实施例中,获取模块可W包括;获取子模块,用于获取目标音视频 的音视频流;第二提取模块,用于从音视频流中提取音视频信息和音视频数据。
[0063] 具体地,可W通过FFmpeg获取不同格式的目标视频巧日;MKV、M0VW及FLV等)。具 体地,可W通过调用方法;avformat_open_input打开不同格式的目标视频。
[0064] 在上述步骤中可W获取音视频流。具体地通过上述函数可W得到 AVFormatContext,调用AVFormateContext-〉nb_streams获取音视频流,具体地,可W获取 音视频流信息,比如是视频流或者是音频流。
[0065] 从上述步骤获取到的音视频流中可W提取到音视频信息,具体地,通过上述步骤 得到的AVCodecContext,调用AVFormateContext-〉streams[mVideoIndex]-〉codec,从 而可W得到音视频信息,该音视频信息具体可W包括;音视频长度(width)、音视频宽度 化ei曲t)W及编译码器编码(codec_id)。
[0066] 图2是根据本发明实施例的硬解码音视频的方法的流程图,如图2所示该方法包 括如下步骤:
[0067] 步骤S102,转换初始音视频的格式得到目标音视频。
[0068] 步骤S104,获取目标音视频的音视频信息和音视频数据。
[0069] 步骤S106,根据音视频信息创建解码器。
[0070] 步骤S108,使用解码器解码音视频数据得到解码数据。
[0071]步骤S110,使用解码数据播放目标音视频。
[0072] 采用本发明,在转换初始音视频的格式得到目标音视频之后,通过获取模块获取 目标音视频的音视频信息和音视频数据之后,第一创建模块根据音视频信息创建解码器, 然后通过解码模块使用解码器解码音视频数据得到解码数据,播放模块使用解码数据播放 目标视频。从而解决了现有技术中Amlroid中无法使用硬解码播放多种格式的音视频的问 题,实现了在An化oid中无法使用硬解码播放音视频的效果。
[0073] 在本发明的上述实施例中,通过FFmpeg可W实现转换初始音视频的格式,通过 FFmpeg打开目标视频文件,然后获取到目标视频的MediaSource(即上述实施例中的音视 频数据),调用0MX的解码器解码音视频数据的数据峽,并将
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1