原创文章,转载请联系作者
若待明朝风雨过,人在天涯!春在天涯
提要
最近在整理硬编码MediaCodec相关的学习笔记,以及代码文档,分享出来以供参考。本人水平有限,项目难免有思虑不当之处,若有问题可以提Issues
。项目地址传送门
此篇文章,主要是分享如何用MediaCodeC
解码视频指定时间的一帧,回调Bitmap对象。之前还有一篇MediaCodeC硬解码视频,并将视频帧存储为图片文件,主要内容是将视频完整解码,并存储为JPEG文件,大家感兴趣可以去看一看。
如何使用
VideoDecoder2
上手简单直接,首先需要创建一个解码器对象:
val videoDecoder2 = VideoDecoder2(dataSource)
dataSoure就是视频文件地址
解码器会在对象创建的时候,对视频文件进行分析,得出时长、帧率等信息。有了解码器对象后,在需要解码帧的地方,直接调用函数:
videoDecoder2.getFrame(time, { it->
//成功回调,it为对应帧Bitmap对象
}, {
//失败回调
})
time 接受一个Float数值,级别为秒
getFrame
函数式一个异步回调,会自动回调到主线程里来。同时这个函数也没有过度调用限制。也就是说——,你可以频繁调用而不用担心出现其他问题。
代码结构、实现过程
代码结构
VideoDecoder2
目前只支持硬编码解码,在某些机型或者版本下,可能会出现兼容问题。后续会继续补上软解码的功能模块。
先来看一下VideoDecoder2
的代码框架,有哪些类构成,以及这些类起到的作用。