Saturday, May 25, 2013

Get image frame in video using MediaMetadataRetriever

MediaMetadataRetriever, for API level 10 or higher, provides a unified interface for retrieving frame and meta data from an input media file.

Example to retrieve frame in video:

retrieve frame in video


package com.example.androidmediametadataretriever;

import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.os.Bundle;
import android.widget.ImageView;
import android.app.Activity;

public class MainActivity extends Activity {
 
 String uri = "/storage/sdcard0/DCIM/100MEDIA/VIDEO0007.mp4";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ImageView capturedImageView = (ImageView)findViewById(R.id.capturedimage);
  
  MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  
  mediaMetadataRetriever.setDataSource(uri);
  Bitmap bmFrame = mediaMetadataRetriever.getFrameAtTime(5000000); //unit in microsecond
  capturedImageView.setImageBitmap(bmFrame);
 }

}


Next:
- Get the current frame in VideoView using MediaMetadataRetriever


Updated@2014-12-29:
Permission of "android.permission.READ_EXTERNAL_STORAGE" is needed, otherwise MediaMetadataRetriever.setDataSource() will throw IllegalArgumentException.

Read: MediaMetadataRetriever: IllegalArgumentException thrown from setDataSource()


8 comments:

Student said...

I am getting only one frame/ current frame from mediametadataretriever.
I want to take all frames from a video which has been stored in sdcard.. How to do it..

Osc said...

How can I save that bitmap to sdcard?

Andr.oid Eric said...

hello Osc,

you have a bitmap, so you can save bitmap to sdcard.

sugumar.p sugu said...

Bitmap bmFrame = mediaMetadataRetriever.getFrameAtTime(5000000);

i am getting null value in bmFrame.. so what i do

Andr.oid Eric said...

hello sugumar.p sugu,

getFrameAtTime() return null means such a frame cannot be retrieved.

Ankita A said...

hello, i tried the above code in android 4.0 (icecream sandwich) but it throwing fatal exception, can u pls help me

Andr.oid Eric said...

hello Ankita A,

Is it IllegalArgumentException thrown from the code mediaMetadataRetriever.setDataSource(uri)?

If yes, please read my update: MediaMetadataRetriever: IllegalArgumentException thrown from setDataSource().

Ankita A said...

thank you, its working now, but am getting only one frame.i want to extract all frames. how to do it?