MediaCodeC解码视频指定帧,迅捷、精确

原创文章,转载请联系作者

若待明朝风雨过,人在天涯!春在天涯

原文地址

提要

最近在整理硬编码MediaCodec相关的学习笔记,以及代码文档,分享出来以供参考。本人水平有限,项目难免有思虑不当之处,若有问题可以提Issues项目地址传送门
此篇文章,主要是分享如何用MediaCodeC解码视频指定时间的一帧,回调Bitmap对象。之前还有一篇MediaCodeC硬解码视频,并将视频帧存储为图片文件,主要内容是将视频完整解码,并存储为JPEG文件,大家感兴趣可以去看一看。

如何使用

VideoDecoder2上手简单直接,首先需要创建一个解码器对象:

val videoDecoder2 = VideoDecoder2(dataSource)

dataSoure就是视频文件地址

解码器会在对象创建的时候,对视频文件进行分析,得出时长、帧率等信息。有了解码器对象后,在需要解码帧的地方,直接调用函数:

videoDecoder2.getFrame(time, { it->
					//成功回调,it为对应帧Bitmap对象
                  
                }, {
                 //失败回调
              })
                

time 接受一个Float数值,级别为秒

getFrame函数式一个异步回调,会自动回调到主线程里来。同时这个函数也没有过度调用限制。也就是说——,你可以频繁调用而不用担心出现其他问题。

代码结构、实现过程

代码结构

VideoDecoder2目前只支持硬编码解码,在某些机型或者版本下,可能会出现兼容问题。后续会继续补上软解码的功能模块。
先来看一下VideoDecoder2的代码框架,有哪些类构成,以及这些类起到的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值