获取视频缩略图、第一帧的问题

雕·不懒惰 2020-01-10 10:18:19

MetadataRetriever retriever = new MediaMetadataRetriever();
try {
//根据文件路径获取缩略图
retriever.setDataSource(fileInfo.getFile_path());
//获得第一帧图片
// Bitmap bitmap = retriever.getFrameAtTime();
//获得1ms时帧图片
Bitmap bitmap = retriever.getFrameAtTime(1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
if (bitmap != null) {

fileInfo.setBitmap(bitmap);
LogUtils.e(bitmap.getByteCount() / 1024 + "KB w=" + bitmap.getWidth() + " h=" + bitmap.getHeight());

}else{
LogUtils.e("(bitmap == null);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
bitmap一直返回null
改用FFmpegMediaMetadataRetriever
Matrix matrix = new Matrix();
FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
try {

retriever.setDataSource(fileInfo.getFile_path());

// Bitmap bitmap = retriever.getFrameAtTime();
//获得1ms时帧图片
Bitmap bitmap = retriever.getFrameAtTime(1000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST_SYNC);
if (bitmap != null) {
matrix.setScale(0.1f, 0.1f);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
//1920*1080的视频大概要2s左右,3840*2160的视频得8s左右
fileInfo.setBitmap(bitmap);
LogUtils.e(bitmap.getByteCount() / 1024 + "KB w=" + bitmap.getWidth() + " h=" + bitmap.getHeight());
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}

用Glide
Glide.with(context).load(list.get(i).getFile_path()).thumbnail(0.1f).into(viewHolder.iv_thumb);
1920*1080可以正常显示,3840*2160的显示不了,
列表先显示文件名、时长等信息,但是用FFmpegMediaMetadataRetriever每获取一个bitmap更新item,那效果完全无法直视
有没有其他的方法


...全文
2111 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Non-satisfied 2020-01-16
  • 打赏
  • 举报
回复
Glide.with(getContext()).load(file.getAbsolutePath()).into(new SimpleTarget<Drawable>() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) { new Thread(new Runnable() { @Override public void run() { BitmapDrawable bd = (BitmapDrawable) resource; Bitmap bm = bd.getBitmap(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }); 应该是没加载完,试下这个
Write_BUG小能手 初级 2020-01-14
  • 打赏
  • 举报
回复
,3840*2160 的我还真是没整过
雕·不懒惰 2020-01-13
  • 打赏
  • 举报
回复
引用 5 楼 qq_37077845 的回复:
怎么说呢,我上周遇到过,我的是图片保存再立即显示出现这种问题,是因为图片还没有写完全到本地就立即调用显示会出现,你看下你加载视频的时候是不是这样,延迟时间再显示就可以解决


我这是直接加载预存在本地的视频文件缩略图,不是下载下来的
six周 2020-01-13
  • 打赏
  • 举报
回复
怎么说呢,我上周遇到过,我的是图片保存再立即显示出现这种问题,是因为图片还没有写完全到本地就立即调用显示会出现,你看下你加载视频的时候是不是这样,延迟时间再显示就可以解决
雕·不懒惰 2020-01-13
  • 打赏
  • 举报
回复
glide加载4K(3840*2160)视频缩略图时提示
W/Glide: Load failed for /storage/emulated/0/Movies/SONY.mp4 with size [25x14]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{FileInputStream->Bitmap->Bitmap}, LOCAL
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->Bitmap->Bitmap}
Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{ParcelFileDescriptor->Bitmap->Bitmap}, LOCAL
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ParcelFileDescriptor->Bitmap->Bitmap}
Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{AssetFileDescriptor->Bitmap->Bitmap}, LOCAL
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{AssetFileDescriptor->Bitmap->Bitmap}
W/Glide: Load failed for /storage/emulated/0/Movies/SONY.mp4 with size [250x140]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{FileInputStream->Bitmap->Bitmap}, LOCAL
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->Bitmap->Bitmap}
Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{ParcelFileDescriptor->Bitmap->Bitmap}, LOCAL
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ParcelFileDescriptor->Bitmap->Bitmap}
Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{AssetFileDescriptor->Bitmap->Bitmap}, LOCAL
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{AssetFileDescriptor->Bitmap->Bitmap}
雕·不懒惰 2020-01-13
  • 打赏
  • 举报
回复
引用 2 楼 Write_BUG小能手 的回复:
是本地视频吗? 本地视频的话Glide4.0以后 不是自带显示缩略图的方法


是本地视频,上面有说到用了Glide的,1920*1080是可以正常显示的,3840*2160的4k视频就不行
Write_BUG小能手 初级 2020-01-11
  • 打赏
  • 举报
回复
是本地视频吗? 本地视频的话Glide4.0以后 不是自带显示缩略图的方法
雕·不懒惰 2020-01-10
  • 打赏
  • 举报
回复
自顶,有没有其他的解决方法??????

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧