MediaMetadataRetriever根据指定时间截取帧

来源:互联网 发布:数据有效性wps2016 编辑:程序博客网 时间:2024/06/10 20:13

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实例;剩下几个参数看名字理解

阅读全文
1 0
原创粉丝点击