MediaMetadataRetriever根据指定时间截取帧
2017-10-26 14:47
295 查看
MediaMetadataRetriever根据指定时间截取帧
2017.10.26[摘要:使用MediaMetadataRetriever获取指定时间点的帧,并保存到图库中。当我需要实现这个功能时,第一时间是从百度查,但是查的有好多坑,有些不明白。希望这篇文章对大家方便使用,对自己以后方便再次使用。]
按照惯例先上代码
mediaMetadataRetriever = new MediaMetadataRetriever(); try { //根据url获取缩略图 mediaMetadataRetriever.setDataSource(VideoUrl, new HashMap()); // 取得视频的长度(单位为毫秒) String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); // 获取指定时间点的图片 Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(timeMs*1000,MediaMetadataRetriever.OPTION_CLOSEST); // 保存到图库中 MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "title", "description"); } catch (Exception e) { e.printStackTrace(); } finally { // 日常释放资源 mediaMetadataRetriever.release(); }
获取指定时间帧的关键代码为:
Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(timeMs * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
public Bitmap getFrameAtTime(long timeUs, int option)
第一个参数:指点时间,只能是us(微秒)
第二个参数:
OPTION_CLOSEST 在给定的时间,检索最近一个帧,这个帧不一定是关键帧。
OPTION_CLOSEST_SYNC 在给定的时间,检索最近一个同步与数据源相关联的的帧(关键帧)。
OPTION_NEXT_SYNC 在给定时间之后检索一个同步与数据源相关联的关键帧。
OPTION_PREVIOUS_SYNC 顾名思义,同上
这里为了提取我们想要的帧,不使用关键帧,所以用 OPTION_CLOSEST .
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "title", "description");
解释下第一个参数:当前应用的 ContentResolver实例;剩下几个参数看名字理解
相关文章推荐
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- Android 根据指定某日时间,获取指定星期【原创】
- 根据指定日期获取周,月,年的开始和结束时间
- C++学习笔记(20161114 ) 根据指定目标时间获得时间戳(秒数)
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- Android开发:对VA文件根据时间点截取关键帧并转化为Bitmap
- 根据时间戳测算指定时间与当前时间的时间差(在某面试中看到的代码,,,学习下)
- yii2自动更新时间,根据条件设定指定值,接受多选框的值
- 根据指定的格式验证日期时间
- 根据指定时间获取前一周的时间
- js根据当前时间获取指定范围内的时间段日期
- python实现根据指定字符截取对应的行的内容方法
- sql 根据指定字符截取前面几个字符
- 根据指定时间获取时间
- php 根据指定日期,求出该日期所在周的始末时间和所在月的始末时间
- C++学习笔记(20161114 ) 根据指定目标时间获得时间戳(秒数)
- Android(Java) 字符串的常用操作,获取指定字符出现的次数,根据指定字符截取字符串
- jquery根据指定的时间来跟当前时间比较计算倒计时
- C# 根据指定日期,计算出给定时间间隔的下一个工作日的日期
- SQL Server 根据分隔符截取指定位置的子字符串