Java 如何在android中从远程url获取视频缩略图
我正在尝试从URL示例获取缩略图:”https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4“在IOS中使用AVAssets是可能的。我这样做的方式是使用以下函数Java 如何在android中从远程url获取视频缩略图,java,android,android-studio,video-thumbnails,Java,Android,Android Studio,Video Thumbnails,我正在尝试从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;
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;
}
公共静态位图检索VideoFrameFromVideo(字符串视频路径)抛出可丢弃{
位图=空;
MediaMetadataRetriever MediaMetadataRetriever=null;
试一试{
mediaMetadataRetriever=新的mediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(videoPath,newhashmap());
其他的
mediaMetadataRetriever.setDataSource(videoPath);
//mediaMetadataRetriever.setDataSource(videoPath);
位图=mediaMetadataRetriever.getFrameAtTime(1,mediaMetadataRetriever.OPTION_);
}捕获(例外e){
e、 printStackTrace();
抛出新的Throwable(“RetrieveVideoFrameFromVideo(String videoPath)中的异常)”+e.getMessage();
}最后{
if(mediaMetadataRetriever!=null){
mediaMetadataRetriever.release();
}
}
返回位图;
}
但问题是它会一次又一次地减慢回收查看和加载图像的速度。我已经使用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)