0

我正在开发一个模块,我想将所有用户的视频从 sd 卡显示到 Gridview 中。我以通常的方式在数组列表中获取了视频文件路径(检查文件或目录并保存是否为文件)并使用以下代码获取其位图缩略图:

Bitmap bmThumbnail = ThumbnailUtils.createVideoThumbnail(VideoValues.get(position).getAbsolutePath(),
                                        Thumbnails.MINI_KIND);

显然,这段代码在后台线程中运行。但唯一的问题是 gribview 在滚动时仍然冻结很多。据我说,主要问题是从视频中提取位图,这需要很多时间。谁能建议我从视频中获取位图以及如何在网格中获取位图的不同方法?我已经在 Facebook 等其他应用程序中看到了流畅的行为。但我不知道如何做到这一点。

4

1 回答 1

0

请使用以下方法从视频中检索视频缩略图

    @SuppressLint("NewApi")
    public static Bitmap retriveVideoFrameFromVideo(String videoPath)
            throws Throwable
    {
        Bitmap bitmap = null;
        MediaMetadataRetriever mediaMetadataRetriever = null;
        try
        {
            mediaMetadataRetriever = new MediaMetadataRetriever();
            mediaMetadataRetriever.setDataSource(videoPath);
            bitmap = mediaMetadataRetriever.getFrameAtTime();
        }
        catch (Exception e)
        {
            throw new Throwable(
                    "Exception in retriveVideoFrameFromVideo(String videoPath)"
                            + e.getMessage());
        }
        finally
        {
            if (mediaMetadataRetriever != null)
            {
                mediaMetadataRetriever.release();
            }
        }
        return bitmap;
    }
于 2015-09-18T10:25:40.610 回答