android 获取本地视频文件以及缩略图
2017-04-06 16:33
483 查看
特别感谢:http://blog.csdn.net/qq_27062249/article/details/53462266
这个问题其实并不难,但是一开始想错了方向,主要还是知识储备太少,菜鸟一只,所以走了很多弯路,现在记录下来。
首先,第一张方法,也是我一开始用的方法:
这种方法是获取本地视频,但是没有缩略图,我的缩略图是下面这种方法获取的,也是网上大部分的方法:
这种方法就是获取视频的地址,然后获取缩略图,但是在我的项目里面我感到怎么都不满意,加载图片的速度太慢啦。无意间发现下面这种方法,原来,contentProvider已经提供了本地视频的缩略图获取方法,代码如下:
其实Android内部已经对本地视频生成了缩略图,第二种方法是直接提取Android生成的缩略图,这样比自己重新生成快的多。再次鸣谢上面链接的作者。学习啦。
这个问题其实并不难,但是一开始想错了方向,主要还是知识储备太少,菜鸟一只,所以走了很多弯路,现在记录下来。
首先,第一张方法,也是我一开始用的方法:
/** * 从本地得到所有的视频地址 */ private List<EntityVideo> getVideoFromSDCard(Context context) { List<EntityVideo> list = new ArrayList<>(); String[] projection = new String[]{MediaStore.Video.Media.DATA, MediaStore.Video.Media .DURATION}; Cursor cursor = context.getContentResolver().query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, null); while (cursor.moveToNext()) { String path = cursor .getString(cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); long duration = cursor .getInt(cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)); // EntityVideo video = new EntityVideo(path, duration, getVideoThumbnail(path)); // list.add(video); } cursor.close(); return list; }
这种方法是获取本地视频,但是没有缩略图,我的缩略图是下面这种方法获取的,也是网上大部分的方法:
// 获取视频缩略图 public Bitmap getVideoThumbnail(String filePath) { Bitmap b=null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(filePath); b=retriever.getFrameAtTime(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException e) { e.printStackTrace(); } } return b; }
这种方法就是获取视频的地址,然后获取缩略图,但是在我的项目里面我感到怎么都不满意,加载图片的速度太慢啦。无意间发现下面这种方法,原来,contentProvider已经提供了本地视频的缩略图获取方法,代码如下:
public List<EntityVideo> getList(Context context) { List<EntityVideo> sysVideoList = new ArrayList<>(); // MediaStore.Video.Thumbnails.DATA:视频缩略图的文件路径 4000 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 { EntityVideo info = new EntityVideo(); 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()); } return sysVideoList; }
其实Android内部已经对本地视频生成了缩略图,第二种方法是直接提取Android生成的缩略图,这样比自己重新生成快的多。再次鸣谢上面链接的作者。学习啦。
相关文章推荐
- android系统获取本地视频文件的缩略图
- 关于Android查询本地视频文件、获取缩略图,并且让缩略图以相同大小显示、给缩略图添加白色边框效果
- Android中如何获取视频文件的缩略图
- Android必知必会-获取视频文件的截图、缩略图
- Android 获取本地视频缩略图和某一帧的预览图
- Android中如何获取视频文件的缩略图
- Android中本地图片资源以及视频录音资源的获取
- Android中如何获取视频文件的缩略图
- Android ImageUtils 图片工具类,包括:小米从相册调图像空指针,三星旋转照片,压缩图片,保存Bitmap到本地,获取本地视频的缩略图,毛化玻璃效果,代码以后会更新
- [总结]Android 获取本地视频文件路径并播放的几种方式
- Android中如何获取视频文件的缩略图
- 图片,音频,视频文件的上传 以及图片缩略图的制作,音频文件时长的获取以及 视频文件缩略图的获取
- Android获取SD卡上图片和视频文件及其缩略图
- Android获取本地图片、视频缩略图
- android调用本地音视频文件获取信息
- Android 获取视频缩略图以及获取视频分辨率
- Android必知必会-获取视频文件的截图、缩略图
- Android中如何获取视频文件的截图、缩略图
- Android:通过ThumbnailUtils类获取视频文件的缩略图
- Android获取网络视频文件缩略图