MediaMetadataRetriever根据指定时间截取帧

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值