android 封面,Android加载视频封面的两种方式

这是一个Java工具类,用于从网络或本地获取视频的第一帧并显示在ImageView上。主要利用了MediaMetadataRetriever类来获取视频帧,并结合Glide库进行图片加载和帧选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.z.z.utils;/** :Created by z on 2020-08-31*/

importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.media.MediaMetadataRetriever;importandroid.util.Log;importandroid.widget.ImageView;importandroidx.annotation.NonNull;importcom.bumptech.glide.Glide;importcom.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;importcom.bumptech.glide.load.resource.bitmap.BitmapTransformation;importcom.bumptech.glide.load.resource.bitmap.VideoDecoder;importcom.bumptech.glide.request.RequestOptions;importjava.security.MessageDigest;importjava.util.HashMap;public classVideoFrameTool {private staticVideoFrameTool instance;public staticVideoFrameTool getInstance() {if (instance == null) {

instance= newVideoFrameTool();

}returninstance;

}/*** 获取网络视频第一帧

*

*@paramvideoUrl

*@return

*/

public voidloadFirst(String videoUrl, @NonNull ImageView cover) {

Bitmap bitmap= null;

MediaMetadataRetriever retriever= newMediaMetadataRetriever();try{//根据url获取缩略图

retriever.setDataSource(videoUrl, newHashMap());//获得第一帧图片

bitmap =retriever.getFrameAtTime();

}catch(IllegalArgumentException e) {//e.printStackTrace();

Log.e("zhu", e.toString());

}finally{

retriever.release();

}if (bitmap != null) {

cover.setImageBitmap(bitmap);

}

}/***   context 上下文

*   uri 视频地址

*   imageView 设置image

*   frameTimeMicros 获取某一时间帧*/

public void loadFirstWithGlide(final Context context, String uri, ImageView imageView, longframeTimeMicros) {

RequestOptions requestOptions=RequestOptions.frameOf(frameTimeMicros);

requestOptions.set(VideoDecoder.FRAME_OPTION, MediaMetadataRetriever.OPTION_CLOSEST);

requestOptions.transform(newBitmapTransformation() {

@Overrideprotected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, intoutHeight) {returntoTransform;

}

@Overridepublic voidupdateDiskCacheKey(MessageDigest messageDigest) {try{

messageDigest.update((context.getPackageName()+ "RotateTransform").getBytes("utf-8"));

}catch(Exception e) {

e.printStackTrace();

}

}

});

Glide.with(context).load(uri).apply(requestOptions).into(imageView);

}/*** 获取本地视频的第一帧

*

*@paramlocalPath

*@return

*/

publicBitmap getLocalVideoBitmap(String localPath) {

Bitmap bitmap= null;

MediaMetadataRetriever retriever= newMediaMetadataRetriever();try{//根据文件路径获取缩略图

retriever.setDataSource(localPath);//获得第一帧图片

bitmap =retriever.getFrameAtTime();

}catch(IllegalArgumentException e) {

e.printStackTrace();

}finally{

retriever.release();

}returnbitmap;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值