如何从资产文件夹中的mp4文件创建视频缩略图

时间:2012-10-18 09:24:52

标签: android

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

3 个答案:

答案 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'文件夹。您可以手动为此视频创建缩略图,也可以将其放入资源。