根据其他博客的一些说法,总结两种获取本地视频缩略图和时长的方法:
一.利用contentprovider去查询视频文件缩略图和时长,优点是速度快,缺点:有时候获取不到所有视频的缩略图。
public List<VideoBean> getVideoList(Context context) {
List<VideoBean> sysVideoList = new ArrayList<>();
String[] thumbColumns = {MediaStore.Video.Thumbnails.DATA,
MediaStore.Video.Thumbnails.VIDEO_ID};
String[] mediaColumns = {MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA, MediaStore.Video.Media.DURATION};
Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media
.EXTERNAL_CONTENT_URI,
mediaColumns, null, null, null);
if (cursor == null) {
return sysVideoList;
}
if (cursor.moveToFirst()) {
do {
VideoBean info = new VideoBean();
int id = cursor.getInt(cursor
.getColumnIndex(MediaStore.Video.Media._ID));
Cursor thumbCursor = context.getContentResolver().query(
MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID
+ "=" + id, null, null);
if (thumbCursor.moveToFirst()) {
info.setThumbPath(thumbCursor.getString(thumbCursor
.getColumnIndex(MediaStore.Video.Thumbnails.DATA)));
}
info.setPath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media
.DATA)));
info.setDuration(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video
.Media.DURATION)));
sysVideoList.add(info);
} while (cursor.moveToNext());
if(cursor!=null){
cursor.close();
}
}
return sysVideoList;
}
二.利用MediaMetadataRetriever,根据文件路径获取缩略图和时长。优点:只要有路径,就可以获取到。缺点:获取效率不高,耗时长,需要自己做缓存,不然每次加载去获取,用户体验不好。
//根据路径得到视频缩略图
private Bitmap getVideoPhoto(String videoPath) {
media.setDataSource(videoPath);
Bitmap bitmap = media.getFrameAtTime();
return bitmap;
}
//获取视频总时长
private int getVideoDuration(String path){
media.setDataSource(path);
String duration = media.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); //
return Integer.parseInt(duration);
}
VideoBean.java如下:
public class VideoBean {
String thumbPath;
String path;
int duration;
Bitmap bitmap;
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
public String getThumbPath() {
return thumbPath;
}
public void setThumbPath(String thumbPath) {
this.thumbPath = thumbPath;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public int getDuration() {
return duration;
}
public void setDuration(int duration) {
this.duration = duration;
}
}