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,那效果完全無法直視
有沒有其他的方法
uj5u.com熱心網友回復:
自頂,有沒有其他的解決方法??????uj5u.com熱心網友回復:
是本地視頻嗎? 本地視頻的話Glide4.0以后 不是自帶顯示縮略圖的方法uj5u.com熱心網友回復:
是本地視頻,上面有說到用了Glide的,1920*1080是可以正常顯示的,3840*2160的4k視頻就不行
uj5u.com熱心網友回復:
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}
uj5u.com熱心網友回復:
怎么說呢,我上周遇到過,我的是圖片保存再立即顯示出現這種問題,是因為圖片還沒有寫完全到本地就立即呼叫顯示會出現,你看下你加載視頻的時候是不是這樣,延遲時間再顯示就可以解決uj5u.com熱心網友回復:
我這是直接加載預存在本地的視頻檔案縮略圖,不是下載下來的
uj5u.com熱心網友回復:
,3840*2160 的我還真是沒整過uj5u.com熱心網友回復:
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();
}
});
應該是沒加載完,試下這個
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/70971.html
標籤:Android
上一篇:微信小程式里這樣定義類可以嗎?
下一篇:求教如何制作鎖屏效果
