|
|
@@ -3,6 +3,7 @@ package com.sheep.gamegroup.util;
|
|
|
import android.content.Context;
|
|
|
import android.graphics.Bitmap;
|
|
|
import android.media.MediaMetadataRetriever;
|
|
|
+import android.net.Uri;
|
|
|
import android.support.v7.widget.GridLayoutManager;
|
|
|
import android.support.v7.widget.RecyclerView;
|
|
|
import android.widget.ImageView;
|
|
|
@@ -154,26 +155,32 @@ public class MediaMetadataRetrieverUtil {
|
|
|
if (duration < size || size < 1) {
|
|
|
return null;
|
|
|
}
|
|
|
- long per = duration * 1000L / (size - 1);
|
|
|
- List<Bitmap> resultList = new ArrayList<>();
|
|
|
- long time = System.currentTimeMillis();
|
|
|
- MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
|
|
|
- metadataRetriever.setDataSource(fromFile);
|
|
|
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
|
|
|
- MediaMetadataRetriever.BitmapParams bitmapParams = new MediaMetadataRetriever.BitmapParams();
|
|
|
- Bitmap.Config config = Bitmap.Config.ARGB_8888;
|
|
|
- bitmapParams.setPreferredConfig(config);
|
|
|
- return metadataRetriever.getFramesAtIndex(0, size, bitmapParams);
|
|
|
- }
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
- //这里单位为微秒
|
|
|
- long atTime = i + 1 == size ? (duration * 1000L) : i * per;
|
|
|
- Bitmap bitmap = metadataRetriever.getFrameAtTime(atTime, MediaMetadataRetriever.OPTION_CLOSEST);
|
|
|
- resultList.add(bitmap);
|
|
|
+ try {
|
|
|
+ long per = duration * 1000L / (size - 1);
|
|
|
+ List<Bitmap> resultList = new ArrayList<>();
|
|
|
+ long time = System.currentTimeMillis();
|
|
|
+ MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
|
|
|
+ metadataRetriever.setDataSource(SheepApp.getInstance(), Uri.parse(fromFile));
|
|
|
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
|
|
|
+ MediaMetadataRetriever.BitmapParams bitmapParams = new MediaMetadataRetriever.BitmapParams();
|
|
|
+ Bitmap.Config config = Bitmap.Config.ARGB_8888;
|
|
|
+ bitmapParams.setPreferredConfig(config);
|
|
|
+ return metadataRetriever.getFramesAtIndex(0, size, bitmapParams);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < size; i++) {
|
|
|
+ //这里单位为微秒
|
|
|
+ long atTime = i + 1 == size ? (duration * 1000L) : i * per;
|
|
|
+ Bitmap bitmap = metadataRetriever.getFrameAtTime(atTime, MediaMetadataRetriever.OPTION_CLOSEST);
|
|
|
+ resultList.add(bitmap);
|
|
|
+ }
|
|
|
+ long curTime = System.currentTimeMillis();
|
|
|
+ LogUtil.println(TAG, time, curTime, curTime - time, (curTime - time) / 1000, (curTime - time) / 10000);
|
|
|
+ return resultList;
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ LogUtil.println(MediaMetadataRetrieverUtil.class.getSimpleName(), "getFrameBitmapList", e.getMessage());
|
|
|
}
|
|
|
- long curTime = System.currentTimeMillis();
|
|
|
- LogUtil.println(TAG, time, curTime, curTime - time, (curTime - time) / 1000, (curTime - time) / 10000);
|
|
|
- return resultList;
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -193,7 +200,7 @@ public class MediaMetadataRetrieverUtil {
|
|
|
List<String> resultList = new ArrayList<>();
|
|
|
long time = System.currentTimeMillis();
|
|
|
MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
|
|
|
- metadataRetriever.setDataSource(fromFile);
|
|
|
+ metadataRetriever.setDataSource(SheepApp.getInstance(), Uri.parse(fromFile));
|
|
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
//这里单位为微秒
|
|
|
@@ -216,8 +223,9 @@ public class MediaMetadataRetrieverUtil {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
+ if(bitmap != null)
|
|
|
+ bitmap.recycle();
|
|
|
}
|
|
|
- bitmap.recycle();
|
|
|
}
|
|
|
long curTime = System.currentTimeMillis();
|
|
|
LogUtil.println(TAG, time, curTime, curTime - time, (curTime - time) / 1000, (curTime - time) / 10000);
|