我在从资产文件夹中的mp4文件创建缩略图时遇到问题。尝试输入不同的资产路径但没有效果。我该如何解决?
那是我的适配器代码:
VideoEntry video = videos.get(position);
holder.txtTitle.setText(video.getTitle());
holder.imgIcon.setImageBitmap(ThumbnailUtils.createVideoThumbnail("file:///android_asset/videos/Core/Superman.mp4", Thumbnails.MICRO_KIND));
有什么问题?
解决方案:
AssetManager am = getAssets();
InputStream ims = am.open("images/" + category + "/" + item.replace(" ", "_").replace(".mp4", ".png").toLowerCase());
Drawable d = Drawable.createFromStream(ims, null);
holder.imgIcon.setImageDrawable(d);
答案 0 :(得分:8)
ThumbnailUtils.createVideoThumbnail()
只是查询来自MediaStore
的现有缩略图,或强制MediaStore
创建它,如果它不存在的话。这意味着您无法为MediaStore
无法使用的视频文件创建缩略图,因为它是您应用的资产,而不是SD卡上的实际文件。您可以将文件解压缩到SD卡,或者只是在另一个应用程序中提供自己创建的缩略图。希望这可以帮助。
答案 1 :(得分:1)
这对我有用
Bitmap getThumbnailOf(AssetFileDescriptor afd, int atTime) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = null;
if (afd != null && afd.getFileDescriptor().valid()) try {
retriever = new MediaMetadataRetriever();
retriever.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
bitmap = retriever.getScaledFrameAtTime(atTime, MediaMetadataRetriever.OPTION_CLOSEST, 1280, 720);
} else {
bitmap = retriever.getFrameAtTime(atTime);
}
afd.close();
retriever.release();
Log.i("TAG", "getting bitmap process done");
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
通过将输入作为
getThumbnailOf(getAssets().openFd("videos/Core/Superman.mp4"), 500000)
答案 2 :(得分:0)
资产它的app static resources'文件夹。您可以手动为此视频创建缩略图,也可以将其放入资源。