Java 来自服务器的视频缩略图未显示在ImageView中
需要从存储在服务器上的视频生成缩略图,下面是我的代码,但“路径”变量给出了问题,如何解决它。如果我删除路径参数和url参数,那么我会得到缩略图,但顺序不正确,或者有时会为2或3个视频生成相同的缩略图,下面是我的代码-Java 来自服务器的视频缩略图未显示在ImageView中,java,android,Java,Android,需要从存储在服务器上的视频生成缩略图,下面是我的代码,但“路径”变量给出了问题,如何解决它。如果我删除路径参数和url参数,那么我会得到缩略图,但顺序不正确,或者有时会为2或3个视频生成相同的缩略图,下面是我的代码- Video video = mVideos.get(position); //play video using android api, when video view is clicked. url = video.getVideo
Video video = mVideos.get(position);
//play video using android api, when video view is clicked.
url = video.getVideoUrl(); // your URL here
Uri videoUri = Uri.parse(url);
new DownloadImage(holder.videothumbView).execute(url);
public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImage(ImageView bmImage) {
this.bmImage = (ImageView ) bmImage;
}
protected Bitmap doInBackground(String... urls) {
Bitmap myBitmap = null;
MediaMetadataRetriever mMRetriever = null;
try {
mMRetriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
mMRetriever.setDataSource(path, new HashMap<String, String>());
else
mMRetriever.setDataSource(path);
myBitmap = mMRetriever.getFrameAtTime();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (mMRetriever != null) {
mMRetriever.release();
}
}
return myBitmap;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
Video=mVideos.get(位置);
//单击视频视图时,使用android api播放视频。
url=video.getVideoUrl();//你的网址在这里
urivideouri=Uri.parse(url);
新下载图像(holder.videothumbView).execute(url);
公共类DownloadImage扩展异步任务{
图像视图bmImage;
公共下载图像(ImageView bmImage){
this.bmImage=(ImageView)bmImage;
}
受保护位图doInBackground(字符串…URL){
位图myBitmap=null;
MediaMetadataRetriever mMRetriever=null;
试一试{
mMRetriever=新的MediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(路径,newHashMap());
其他的
mMRetriever.setDataSource(路径);
myBitmap=mMRetriever.getFrameAtTime();
}捕获(例外e){
e、 printStackTrace();
}最后{
如果(mMRetriever!=null){
mMRetriever.release();
}
}
返回我的位图;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}
所有与网络相关的任务必须在单独的线程中完成。你不能在主线程中完成它。您可以使用图像库。它是开源的,您可以为不同的状态显示不同的图像,如加载、错误等
Picasso.with(context) // your activity of other context referance
.load(video.getVideoUrl())
.placeholder(R.drawable.user_placeholder) // this will show during image loading from network
.error(R.drawable.user_placeholder_error) // error image to display
.into(holder.videothumbView);
BitmapDrawable的可能重复项未被弃用,请像这样使用它BitmapDrawable BitmapDrawable=BitmapDrawable(context.getResources(),thumb)代码>ThumbnailUtils.createVideoThumbnail()仅适用于本地路径。使用上面由Nilu发布的链接。