多语言展示
当前在线:1036今日阅读:26今日分享:39

Android开发中关于硬件解码H264视频的小心得!

已从事安防行业有将近7年的实际,从最初的专业安防到消费类安防! 从PC端软件开发到移动端APP的开发。 始终围绕音视频编解码在忙碌! 对于H264视频裸数据编解码问题一直是IPCamera的核心工作,从之前通过ffmpeg软解码,到后面升级为通过Android MediaCodec进行硬解码! 中间走过不少弯路,也历过不少挫折,今天就 Android 硬解码分享自己的一点小心得! (备注:2016年在进行Android硬解码开发时有参考网上的相关资源)
工具/原料
1

Mac OS Eclipse开发工具

2

Mac OS电脑

方法/步骤
1

#  定义相关变量参数 & 创建MediaCodec并配置相关参数// Video Constants private final static String MIME_TYPE = 'video/avc'; // H.264 video private  int VIDEO_WIDTH = 1920; private  int VIDEO_HEIGHT = 1080; private  int TIME_INTERNAL = 0; private static  int HEAD_OFFSET = 512; private MediaCodec mCodec; Thread readFileThread; #  初始化并创建配置相关解码库,设置视频高宽等参数;#  设置用于显示视频的surface (mSurHolder.getSurface());mCodec = MediaCodec.createDecoderByType(MIME_TYPE); MediaFormat mediaFormat = MediaFormat.createVideoFormat(MIME_TYPE,VIDEO_WIDTH, VIDEO_HEIGHT); mCodec.configure(mediaFormat, mSurHolder.getSurface(),null, 0); mCodec.start();

2

# 接收到H264裸数据后,通过onFrame(byte[] buf, int offset, int length) 进行实时解码并实时显示视频画面;

3

# 解码完成后,通过mCodec.stop(); 反初始化解码器;# 解码后面画面如下:

4

H264裸数据硬件解码 流程:  1.创建并初始化相关解码器参数;  2.将H264裸数据放入inputBuffer;  3.将inputBuffer入列进行解码;  4.获得一个outputBuffer的索引(出列);  5.释放outputBuffer  6.在4,5间循环直到没有outputBuffer可出列为止; 备注:解码流程参考网上资源,并验证有效!

注意事项
1

在进行H264视频界面前,需要判断手机是否支持硬件界面;

2

通过调用手机GPU进行硬解码,长时间测试,手机有发热情况;

3

通过硬件解码需要需要合理并即时释放解码器资源,否则会造成界面不稳定,闪退等情况

4

实测-解码IPcamera 1080P实时视频20FPS. 效果不错!

推荐信息