Android获取视频的第一帧照片

Android录完视频(视频)获取第一帧照片

1、应用场景

当你录完视频后、或者本来就有一部视频,在进行展示的时候需要展示封面,但是封面展示需要图片,这个时候就需要开始从视频里面获取第一帧图片。

2、代码实现
 MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象
        String path = videopath;
        File file=new File(path);//实例化File对象,文件路径为/storage/emulated/0/shipin.mp4 (手机根目录)
        if(!file.exists()){
//            Toast.makeText(SubmitVideoActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
        }
        mmr.setDataSource(path);
        Bitmap bitmap = mmr.getFrameAtTime(0);  //0表示首帧图片
        mmr.release(); //释放MediaMetadataRetriever对象
        if(bitmap!=null){
//            Toast.makeText(SubmitVideoActivity.this, "获取视频缩略图成功", Toast.LENGTH_SHORT).show();
            //存储媒体已经挂载,并且挂载点可读/写。
            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                bitmap.recycle(); //回收bitmap
                return;
            }
            try {
                Calendar now = new GregorianCalendar();
                SimpleDateFormat simpleDate = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault());
                String picture_Name = simpleDate.format(now.getTime()); //获取当前时间戳作为文件名称,避免同名

                String framePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + Environment.DIRECTORY_DCIM
                        + File.separator + "visiontalk/pictures/"; //图片保存文件夹
                File frame_file = new File(framePath);
                if (!frame_file.exists()) {
                    frame_file.mkdirs();
                }
                File picture_file = new File(framePath,picture_Name + ".jpg"); // 创建路径和文件名的File对象
                FileOutputStream out = new FileOutputStream(picture_file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                out.flush();
                out.close();   //注意关闭文件流
                fastPhoto=picture_file;
                Log.d("takeRec", "takeRec: "+picture_file);
//                Toast.makeText(SubmitVideoActivity.this, "保存图片成功!", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
//                Toast.makeText(SubmitVideoActivity.this, "保存图片失败!" + e.getMessage().toString(), Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }else{
//            Toast.makeText(SubmitVideoActivity.this, "获取视频缩略图失败", Toast.LENGTH_SHORT).show();
        }

在这个里面一定要确保文件的路径是不是正确的,如果不正确会不成功,是不是很简单呢?

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值