问题描述
我正在尝试从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)