安卓:如何从视频(Uri)获取缩略图

3
我想要从视频的任何特定位置获取缩略图。我正在使用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;
    }

1
这个问题是有效的,但还没有得到回答。lol - TatiOverflow
4个回答

2
您可以使用Glide直接将缩略图加载到ImageView。最初的回答。
Glide.with(activity).load(videoPath).into(imageview);

1

ThumbnailUtils 在文件或视频损坏时返回null

但我只想使用Uri,这是一个很好的解决方案:

val mmr = MediaMetadataRetriever()
mmr.setDataSource(videoUri)
val thummbnailBitmap = mmr.frameAtTime
imageView.setImageBitmap(thummbnailBitmap)

1
使用以下方法,首先加载视频列表及其路径到您的数组列表中。
 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);

1
这可以通过Android原生使用MediaPlayerSeekTo方法来支持。
如果你只想显示视频占位符,则可以使用以下代码:
video_view.setVideoPath(videoPath);
video_view.seekTo(3000); // in milliseconds i.e. 3 seconds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接