Android: как получить миниатюру из видео (Uri)

Я хочу миниатюру из видео в любой конкретной позиции. Я использую ThumbnailUtils для того, чтобы получить миниатюру из видео URI и назначения для растрового изображения, но я получаю нулевое значение в растровом изображении.

Любые причины, как это происходит и как я могу это исправить?

selectedVideoUri = data.getData();

bitmap = ThumbnailUtils.createVideoThumbnail(getRealPathFromURI(videoUri),
                        MediaStore.Images.Thumbnails.MINI_KIND);

public String getRealPathFromURI(Uri contentUri) {
        String res = null;
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
        if(cursor.moveToFirst()){;
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            res = cursor.getString(column_index);
        }
        cursor.close();
        return res;
    }

4 ответа

Вы можете использовать Glide для загрузки большого пальца непосредственно в просмотр изображений

Glide.with(activity).load(videoPath).into(imageview);

Это поддерживается Android изначально с использованием метода MediaPlayer SeekTo

Если вы просто хотите показать местозаполнитель видео для отображения, вы можете использовать следующий код:

video_view.setVideoPath(videoPath);
video_view.seekTo(3000); // in milliseconds i.e. 3 seconds

Сначала загрузите список видео с его путем в список массивов, используя метод ниже

 private void loadData(String currentAppPath) {
    hiddenpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + currentAppPath);
    String[] fileName = hiddenpath.list();
    try{

            for(String f : fileName){
                if(HelpperMethods.isVideo(f)){
                    videoFiles.add(hiddenpath.getAbsolutePath()+"/"+f);
                }
            }
            new Loader().loadImages(Environment.getExternalStorageState());

    }catch (Exception e){

    }
}

Вам нужен метод Loader(). LoadImages, поэтому я объявляю этот метод в отдельном файле класса. см. ниже код

public class Loader {
String[] imagieFiles;

public void loadImages(String path){

    Log.e("path",path);
    System.out.println(path);
}  }

Затем после вы можете использовать код ниже, чтобы получить видео миниатюру. По умолчанию в каждом магазине видео миниатюр двух размеров.

1) MINI - MediaStore.Images.Thumbnails.MINI_KIND и

2) MICRO - MediaStore.Images.Thumbnails.MICRO_KIND

  Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath,
                    MediaStore.Images.Thumbnails.MINI_KIND);
            BitmapDrawable bitmapDrawable = new BitmapDrawable(thumb);
            contentViewHolder.videoView.setImageBitmap(thumb);

ThumbnailUtilsвозвращается nullкогда файл или видео повреждены.

но я хотел использовать только Uriи это хорошее решение для этого:

      val mmr = MediaMetadataRetriever()
mmr.setDataSource(videoUri)
val thummbnailBitmap = mmr.frameAtTime
imageView.setImageBitmap(thummbnailBitmap)
Другие вопросы по тегам