3

我从资产文件夹中的 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);
4

3 回答 3

8

ThumbnailUtils.createVideoThumbnail()只需从现有的缩略图中查询MediaStore或强制MediaStore创建它,如果它不存在。这意味着您不能为不适用于 的视频文件创建缩略图MediaStore,因为它是您的应用程序的资产,而不是 SD 卡上的实际文件。您可以将文件提取到 SD 卡中,或者只提供您自己在另一个应用程序中创建的缩略图。希望这可以帮助。

于 2012-10-18T09:38:55.517 回答
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)
于 2021-05-14T18:25:43.263 回答
0

资产它是应用程序静态资源的文件夹。您可以手动为此视频创建缩略图,也可以将其放入资产中。

于 2012-10-18T09:48:02.163 回答