android 获取视频的封面

感谢https://www.jb51.net/article/184153.htm 作者:feng海涛
的文章,帮到我了啦

String path="****.mp4";  //此修改自己转过来的路径
getFirstFrame(path);

 //获取视频首帧图片并保存到本地
  private void getFirstframe(String path){
    MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象
  
    File file=new File(path);//实例化File对象,文件路径为/storage/emulated/0/shipin.mp4 (手机根目录)
    if(!file.exists()){
      Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
    }
    mmr.setDataSource(path);
    Bitmap bitmap = mmr.getFrameAtTime(0); //0表示首帧图片
    mmr.release(); //释放MediaMetadataRetriever对象
    if(bitmap!=null){
      Toast.makeText(MainActivity.this, "获取视频缩略图成功", Toast.LENGTH_SHORT).show();
      imageView.setImageBitmap(bitmap);//设置ImageView显示的图片
      //存储媒体已经挂载,并且挂载点可读/写。
      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() + "/framePicture/"; //图片保存文件夹
        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();  //注意关闭文件流
        Toast.makeText(MainActivity.this, "保存图片成功!", Toast.LENGTH_SHORT).show();
      } catch (Exception e) {
        Toast.makeText(MainActivity.this, "保存图片失败!" + e.getMessage().toString(), Toast.LENGTH_LONG).show();
        e.printStackTrace();
      }
    }else{
      Toast.makeText(MainActivity.this, "获取视频缩略图失败", Toast.LENGTH_SHORT).show();
    }
  }

此转发:https://www.jb51.net/article/184153.htm 作者:feng海涛

Android中,获取视频文件的封面通常涉及到媒体扫描服务(MediaScannerConnection)和ContentResolver API。以下是基本步骤: 1. **使用MediaStore**: 首先,你需要查询MediaStore里的MediaItem类,它包含了关于视频的信息。你可以通过以下代码获取视频对应的ID(_id): ```java ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, null); if (cursor.moveToFirst()) { int videoIdColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID); long videoId = cursor.getLong(videoIdColumn); // 使用videoId进一步获取封面图片URI } ``` 2. **获取封面图片URI**: 获取视频ID后,可以通过`MediaStore.Images.Thumbnails`表来查找视频的缩略图封面。例如: ```java String coverPath = MediaStore.Images.Thumbnails.getThumbnail(cr, videoId, MediaStore.Images.Thumbnails.MINI_KIND, null); ``` `MINI_KIND`表示最小尺寸的缩略图。 3. **读取图片数据或显示**: 如果封面路径有效,你可以使用BitmapFactory来读取图片数据,然后显示在ImageView或其他地方: ```java Bitmap bitmap = BitmapFactory.decodeFile(coverPath); ImageView imageView.setImageBitmap(bitmap); ``` 请注意,这个过程可能会比较耗时,并且不是所有视频都有预设的封面,某些第三方应用生成的视频可能没有提供封面信息。另外,如果你需要处理大量的视频,最好在后台线程中操作,以免阻塞主线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值