glide缩略图存储 android,Glide 显示视频缩略图及遇到的坑

Glide 显示视频缩略图及遇到的坑

实现原理

Glide支持视频格式的文件,但是在3.x里会有些欠缺。其底层是通过 MediaMetadataRetriever实现的。

MediaMetadataRetriever拥有获取视频的第几帧的能力,Glide获取视频里的第n帧的代码如下:

VideoBitmapDecoder.java

@Override

public Bitmap decode(ParcelFileDescriptor resource, BitmapPool bitmapPool, int outWidth, int outHeight,

DecodeFormat decodeFormat)

throws IOException {

MediaMetadataRetriever mediaMetadataRetriever = factory.build();

mediaMetadataRetriever.setDataSource(resource.getFileDescriptor());

Bitmap result;

if (frame >= 0) {

result = mediaMetadataRetriever.getFrameAtTime(frame);

} else {

result = mediaMetadataRetriever.getFrameAtTime();

}

mediaMetadataRetriever.release();

resource.close();

return result;

}

提取核心代码

mediaMetadataRetriever获取Bitmap的代码:

val file = FileInputStream(File(path))

val s = MediaMetadataRetriever()

s.setDataSource(file.fd)

file.close()

val bitmap = s.getFrameAtTime(-1)

imageView.setImageBitmap(bitmap)

s.release()

Glide3.x的一个bug

但3.x的Glide缓存策略不能是Source我们来分析各种缓存策略Glide的内部的逻辑

Result缓存策略

EngineRunnable.java

private Resource> decode() throws Exception {

if (isDecodingFromCache()) {

return decodeFromCache();

} else {

return decodeFromSource();

}

}

EngineRunnable分走两次,第一次走isDecodingFromCache

private Resource> decodeFromCache() throws Exception {

Resource> result = null;

//...igno

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值