如何从android中的远程URL获取视频缩略图

问题描述

我正在尝试从URL获取缩略图例如:“ https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4”在IOS中可以使用AVAssets 。我这样做的方式是使用以下功能

public static Bitmap retriveVideoFrameFromVideo(String videoPath) throws Throwable {
        Bitmap bitmap = null;
        MediaMetadataRetriever mediaMetadataRetriever = null;
        try {
            mediaMetadataRetriever = new MediaMetadataRetriever();
            if (Build.VERSION.SDK_INT >= 14)
                mediaMetadataRetriever.setDataSource(videoPath,new HashMap<String,String>());
            else
                mediaMetadataRetriever.setDataSource(videoPath);
            //   mediaMetadataRetriever.setDataSource(videoPath);
            bitmap = mediaMetadataRetriever.getFrameAtTime(1,MediaMetadataRetriever.OPTION_CLOSEST);
        } catch (Exception e) {
            e.printstacktrace();
            throw new Throwable("Exception in retriveVideoFrameFromVideo(String videoPath)" + e.getMessage());
        } finally {
            if (mediaMetadataRetriever != null) {
                mediaMetadataRetriever.release();
            }
        }
        return bitmap;
    }

但是问题在于它会减慢recycleview的速度,并一次又一次地加载图像。

解决方法

我已经使用GLide 4.x解决了这个问题。我通过使用MediaMetadataRetriever找到了另一个解决方案。但是在回收视图中使用MediaMetadataRetriever是不可行的,因为它在主线程上运行并导致ANR。适用于我的代码如下。

RequestOptions requestOptions = new RequestOptions();
                Glide.with(context)
                        .load("Your URL")
                        .apply(requestOptions)
                        .thumbnail(Glide.with(context).load("Your URL"))
                        .into(holder.img_video_attachment_preview);
,

你自己的答案对我有用,稍微调整了一下,我得到了一个稍微短一点的版本。尽管您这样做可能有自己的原因...

GlideApp.with(context)
    .load(item.videoURL) // your video url
    .into(image_view)