获取缩略图方式
1.ThumbnailUtils获取(耗时50毫秒左右)
Bitmap micro = ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.MICRO_KIND);//小缩略图
Bitmap mini = ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.MINI_KIND);//较大缩略图
2.MediaMetadataRetriever 获取
package com.example.testing.utils.audio;
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import androidx.annotation.NonNull;
import com.example.testing.utils.L;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Liushihua
* @date 2022-5-27 17:04
* @desc 获取raw种视频第一帧
*/
public class VideoUtils {
/**
* 获取raw种视频第一帧
* @param context
* @param videoName 不带.mp4 如:a11.mp4则传入a11
*/
public static void getBitmapToSave(@NonNull Context context,String videoName) {
new Thread() {
@Override
public void run() {
super.run();
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
for (int i = 1; i < 8; i++) {//raw中有7个视频文件
String resPath = "android.resource://" + context.getPackageName() + "/raw/" + videoName;
Bitmap bitmap = getVideoFrame(context,mmr, resPath);
String path = context.getExternalFilesDir("png") + "/v0" + i + ".png";
path = saveBitmapToPngImage(bitmap, path);
if (path != null) {
L.d("保存成功:" + path);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
/**
* 获取帧
* @param context
* @param mmr
* @param path
* @return
*/
private static Bitmap getVideoFrame(Context context,MediaMetadataRetriever mmr, String path) {
long timeUs = 1;//取100毫秒得帧
mmr.setDataSource(context, Uri.parse(path));
Bitmap bitmap = mmr.getFrameAtTime(timeUs, MediaMetadataRetriever.OPTION_CLOSEST);
return bitmap;
}
private static String saveBitmapToPngImage(final Bitmap bitmap, final String savePath) {
File file = new File(savePath);
if (bitmap != null) {
try {
if (!file.exists()) {
file.getParentFile().mkdirs();
file.createNewFile();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 80, baos);//压缩图片质量
FileOutputStream fos = new FileOutputStream(file);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
baos.close();
return savePath;
} catch (IOException var5) {
var5.printStackTrace();
}
}
return null;
}
}