移动终端硬解码智能切换软解码播放视频的方法与流程

文档序号:14844646发布日期:2018-06-30 14:44阅读:2488来源:国知局
移动终端硬解码智能切换软解码播放视频的方法与流程

本发明涉及多媒体数据处理、音视频解码领域,特别是一种移动终端硬解码智能切换软解码播放视频的方法。



背景技术:

硬解码是通过硬件实现的解码,软解码是通过软件让CPU进行视频解码处理。

移动设备操作系统Android(即安卓)自2007年发布问世至今,在移动领域越来越受到推崇,如今已经占据了大半壁江山的份额,加上移动互联网的迅猛发展以及在移动终端对流媒体视频观看的强大需求,现有技术中提供了一种用于Android中的多媒体系统播放器,该播放器支持音视频硬解码,但是其本身支持的音视频格式太少,支持的流媒体协议也有限,无法满足种类繁多的多媒体格式及流媒体协议,另外还有研究用FFmpeg和libstagefright、FFmpeg和mediacodec进行硬解码,由于安卓硬件设备差异化严重、系统版本更新变化快,同一种机型都有可能因用户手机ROM的差异而硬解码支持有差异,这样通常视频应用会采取选择FFmpeg软解码,但是软解码方式存在播放CPU占有率高、耗电快等缺点,如何判断优先使用硬解码来播放,目前尚未有提出更有效的解决方案。



技术实现要素:

本发明所要解决的技术问题是,针对现有技术不足,提供一种移动终端硬解码智能切换软解码播放视频的方法,解决无法优先使用硬解码来支持繁多的多媒体视频格式以及多种流媒体协议、播放CPU占有率高、耗电快的问题。

为解决上述技术问题,本发明所采用的技术方案是:一种移动终端硬解码智能切换软解码播放视频的方法,包括以下步骤:

1)解复用初始音视频格式得到目标音视频;

2)抓取目标音视频的视频描述信息及视频流数据;

3)根据所述视频描述信息及视频流数据过滤合适的profile 和level属性,过滤失败则采取FFmpeg软解码方式解码所述视频描述信息及视频流数据;根据所述视频描述信息及视频流数据查找合适的硬解码器名称,查找不到则采取FFmpeg软解码方式解码所述视频描述信息及视频流数据;

4)根据硬解码器名称创建硬解码器,创建失败则采取FFmpeg软解码方式解码所述视频描述信息及视频流数据;

5)根据创建的硬解码器,设置视频渲染器;

6)使用FFmpeg软解码器解码音频描述信息及音频流数据,使用硬解码器解码所述视频描述信息及视频流数据,硬解码器解码失败则重新使用FFmpeg软解码方式解码所述视频描述信息及视频流数据;

7)获取解码后的音频描述信息及音频流数据、视频描述信息及视频流数据,当收到音频流数据第一帧数据时,开始计时等待视频流数据第一帧数据,视频渲染器渲染视频流数据第一帧数据时发出视频第一帧数据开始的渲染通知video_render_msg,若N秒(本发明中设置为3秒)没有收到video_render_msg则发出播放失败错误警告。

步骤6)之后,播放失败则视频流数据重新置为FFmpeg软解码。

所述视频描述信息及视频流数据包括音视频的profile、 level、编解码编号id。

步骤3)中,根据所述视频描述信息及视频流数据过滤合适的profile和level属性的具体实现过程包括:根据视频描述信息中的编码格式的profile和level值,查找是否符合此编码格式对应的硬解码所支持的profile和level值范围,其范围值符合则找到硬解码支持的profile和 level属性。

步骤3)中,根据所述视频描述信息及视频流数据查找合适的硬解码器名称的具体实现过程包括:从所述视频描述信息及视频流数据中提取编解码器编号;根据编解码器编号找到对应的资源媒体类型,再根据资源媒体类型找到合适的硬解码器名称。

与现有技术相比,本发明所具有的有益效果为:本发明通过解复用初始的音视频格式得到目标视频流,通过抓取流信息获取目标视频流信息之后,过滤合适的profile和level属性以便于判断是否可用硬解码,可以用硬解码的话,接着用对应的编解码器编号所对应的资源媒体类型来查找合适的硬解码器名称,通过是否有合适的硬解码器名称可以判断是否可用硬解码,若有合适的硬解码器名称,开始创建硬解码器,通过是否创建成功可以判断是否可用硬解码,硬解码器创建成功之后,通过硬解码器解码目标音视频流数据,通过是否可以解码成功或硬解码渲染是否成功来来判断是否可用硬解码,从而解决了现有技术在Android中无法优先使用硬解码来支持繁多的多媒体视频格式以及多种流媒体协议的问题,降低了播放CPU占有率,解决了播放CPU耗电快的问题。

附图说明

图1为本发明播放内核的核心模块流程图;

图2为本发明实施例方法流程图。

具体实施方式

本发明实施例提供的一种选择硬解码视频的播放的方法,如图1所示,主要包括在S110(数据模块)、S120(解复用模块)和S130(解码模块)、S140(渲染模块)四个核心模块步骤中。

本发明实施例提供的一种选择硬解码视频的播放的方法,如图2所示,主要包括以下步骤:

步骤S210,获取待播放的流媒体视频的音视频信息,抓取音视频的profile和level、编解码编号id,创建对应的渲染器;

步骤S211,结合安卓对硬解支持的规格,判断音视频的profile和level是否在规格内,不符合则走M2(即使用软解码方式解码播放);

步骤S220,根据视频的编解码编号查找mediacodec硬解码器名称;

步骤S221:判断是否存在合适的mediacodec硬解码器名称,不合适则走M2;

步骤S230,用mediacodec硬解码名称去初始化硬解码器;

步骤S231,判断硬解码器初始化是否成功,不成功则走M2;

步骤S240,使用初始化成功的硬解码器去解码音视频原始数据;

步骤S241,判断是否能成功解码音视频数据,若不能成功解码则走M2;

步骤S250,使用渲染器渲染播放目标解码的音视频;

步骤S251,判断渲染器是否成功渲染输出,若失败则走M2;

步骤S260,成功播放目标音视频。

具体地,在本发明的上述步骤实例中,通过FFmpeg可以实现S110的解复用功能,解复用初始音视频的格式,通过FFmpeg打开目标视频文件,然后获取到目标视频的音视频数据信息,抓取profile、 level、编解码编号,调用安卓开放的mediacodec API创建的硬解码器解码音视频数据的数据帧,并将解码后的解码数据渲染到画面,完成对音视频的播放。

具体地,在本发明的上述步骤实例中,S211判断视频的profile和level,进一步地以视频格式H264为例,基本的baseline、main、hight才可硬解码。

具体地,在本发明的上述步骤实例中,S221先用编解码编号找到对应mediacodec的mimeType硬解码格式名称,通过读取系统配置文件/system/etc/media_codecc.xml,用mimeType去查找匹配,匹配到有且不等于OMX.google.*的可用硬解码。

具体地,在本发明的上述步骤实例中,S230就是根据S221获取到的硬解码名称,通过MediaCodec标准API接口createByCodecName进行初始化,拿到MediaCodec初始化句柄codec。

具体地,在本发明的上述步骤实例中,S231通过S230拿到句柄codec,判断是否成功创建codec以及通过调用MediaCodec标准API接口codec.getOutputFormat能否成功拿到format,通过调用MediaCodec标准API接口codec.configure是否配置成功,判断可用硬解码;S241通过调用MediaCodec标准API接口codec.start判断是否成功开启硬解码器解码。

具体地,在本发明的上述步骤实例中,S251判断渲染输出,没有收到视频渲染失败通知,但是实际未收到画面输出,则也不能使用硬解码。

在通过解复用初始的音视频格式得到目标视频流之后,通过抓取流信息获取目标视频流信息之后,过滤合适的profile和level属性以便于判断是否可用硬解码,可以用硬解码的话,接着用对应的编解码器编号所对应的资源媒体类型来查找合适的硬解码器名称,通过是否有合适的硬解码器名称可以判断是否可用硬解码,若有合适的硬解码器名称之后,开始创建硬解码器,通过是否创建成功可以判断是否可用硬解码,若硬解码器创建成功之后,通过硬解码器解码目标音视频流数据,通过是否可以解码成功或者检测硬解码渲染是否成功来判断是否可用硬解码。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1