将缩略图设置为 VideoView 的 Intent

Set thumbnail to an Intent for VideoView

我必须在 Android 的其中一个屏幕上播放视频,并且我正在使用视频查看 intent。视频已播放,但启动屏幕上没有出现缩略图。

我的代码是这样的

@OnClick(R.id.icon_play)
    protected void playVideo(){
        String videoUrl="https://someUrl/Video/v07.mp4";
        if(!videoUrl.isEmpty()) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(videoUrl));
            intent.setDataAndType(Uri.parse(videoUrl), "video/mp4");
            startActivity(intent);
        }

    }

缩略图是指当屏幕启动时,每个视频都应该有自己的图像。 (类似于 YouTube)

我尝试 seekTo() 附加缩略图,但没有成功。 请帮忙。谢谢

这可能会用到我正在使用此方法在我的视频播放器列表视图中显示视频的缩略图..

     Cursor cursor = mContext.getContentResolver().query(
            MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj,
            MediaStore.Video.Media.DISPLAY_NAME + "=?",
            new String[]{localItem._display_name}, null);
    cursor.moveToFirst();
    long ids = cursor.getLong(cursor
            .getColumnIndex(MediaStore.Video.Media._ID));

    ContentResolver crThumb = mContext.getContentResolver();
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 1;
    Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(
            crThumb, ids, MediaStore.Video.Thumbnails.MICRO_KIND,
            options);
    itemHolder.thumbImage.setImageBitmap(curThumb);
    curThumb = null;
    cursor.close();

尝试这种方式可能会有帮助

以上答案现已弃用。 具有快速解决方案的新更新答案 我们只需要提供视频数据路径

    Bitmap bmThumbnail;
    bmThumbnail = ThumbnailUtils.createVideoThumbnail(arraylist.get(i)._data, MediaStore.Video.Thumbnails.MICRO_KIND);
    itemHolder.thumbImage.setImageBitmap(bmThumbnail);

其中 arraylist.get(i)._data => 视频路径。

最好的方法是使用 Glide 或任何其他图像寄存异步库来平滑滚动列表视图。

刚看了另一个例子。不能 100% 确定它是否有效,但值得一试。

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail("URL", MediaStore.Images.Thumbnails.MINI_KIND);

BitmapDrawable bitmapD = new BitmapDrawable(thumbnail);
VideoView.setBackground(Drawable bitmapD);

请注意,我已经写完了 phone,因此可能存在拼写错误。 让我知道这是否可行,或者您是否找到了另一种选择

我使用 MediaMetaDataRetriever 解决了这个问题。

代码是这样的-

public static Bitmap retriveVideoFrameFromVideo(String videoPath)
            throws Throwable
    {
        Bitmap bitmap = null;
        MediaMetadataRetriever mediaMetadataRetriever = null;
        try
        {
            mediaMetadataRetriever = new MediaMetadataRetriever();
            if (Build.VERSION.SDK_INT >= 14)
                mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
            else
                mediaMetadataRetriever.setDataSource(videoPath);
            //   mediaMetadataRetriever.setDataSource(videoPath);
            bitmap = mediaMetadataRetriever.getFrameAtTime(-1,MediaMetadataRetriever.OPTION_CLOSEST);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new Throwable(
                    "Exception in retriveVideoFrameFromVideo(String videoPath)"
                            + e.getMessage());

        }
        finally
        {
            if (mediaMetadataRetriever != null)
            {
                mediaMetadataRetriever.release();
            }
        }
        return bitmap;
    }

请注意:因为我的视频 link 是服务器 URL 的形式,所以当视频 Url 通过它时 createThumnailUtils 返回空值。

当视频来自本地存储时,以下代码工作正常。

Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail("URL", MediaStore.Images.Thumbnails.MINI_KIND);

BitmapDrawable bitmapD = new BitmapDrawable(thumbnail);
VideoView.setBackground(Drawable bitmapD);

希望这对某人有所帮助!!