androidvideoandroid-videoviewmediacontroller

Set thumbnail to an Intent for VideoView


I have to play a video in one of my screens of Android and I am using Video View intent for the same. The video gets played but there is no thumbnail appearing on the launch of the screen.

My code is like this

@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);
        }

    }

By thumbnail, I mean that when the screen is launched each video should have an image of its own. (something like YouTube)

I tried seekTo() for attaching the thumbnail, but it didn't work. Please Help. Thanks.


Solution

  • I solve the problem using MediaMetaDataRetriever.

    The code goes like this-

    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;
        }
    

    Note that : Because my video link was in the form of server URL, that's why createThumnailUtils was returning a null when video Url was passed through it.

    The below code works fine when the video is coming from local storage.

    Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail("URL", MediaStore.Images.Thumbnails.MINI_KIND);
    
    BitmapDrawable bitmapD = new BitmapDrawable(thumbnail);
    VideoView.setBackground(Drawable bitmapD);
    

    Hope this helps someone!!