Android(安卓)h264 硬编码 软编码
音视频编解码!
对于H264视频裸数据编解码问题一直是IPCamera的核心工作,从之前通过ffmpeg软解码,到后面升级为通过Android MediaCodec进行硬解码! 中间走过不少弯路,也历过不少挫折,今天就 Android 硬解码分享自己的一点小心得!
(备注:2016年在进行Android硬解码开发时有参考网上的相关资源)
工具/原料
-
Mac OS Eclipse开发工具
-
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可出列为止;
备注:解码流程参考网上资源,并验证有效!
END
注意事项
-
在进行H264视频界面前,需要判断手机是否支持硬件界面;
-
通过调用手机GPU进行硬解码,长时间测试,手机有发热情况;
-
通过硬件解码需要需要合理并即时释放解码器资源,否则会造成界面不稳定,闪退等情况
-
实测-解码IPcamera 1080P实时视频20FPS. 效果不错!
更多相关文章
- uni-app系统目录文件上传(非只图片和视频)解决方案
- Android(安卓)从程序启动startActivity到生命周期变化的过程
- 一种基于Android智能手机的远程视频监控的设计[图]
- [App Bundle]Android动态化技术实例
- Android中实现自动生成布局View的初始化代码方法
- Android(安卓)Jpush的集成
- Android利用mediacodec进行视频H264编码解码播放
- Android(安卓)视频播放
- Android笔记:AlbumSaver图片视频保存工具类