您的位置:首页 > 移动开发 > Android开发

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实例;剩下几个参数看名字理解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 截取 获取帧