1
    private void sample(){
        int FRAME_BYTES=326;
        int FRAMESMAX=36;
        String subFolder="media";
        String mediafileName="sample.mp4";
        MediaMetadataRetriever mediaMetadata=new MediaMetadataRetriever();

        try{
            AssetFileDescriptor afd=getApplicationContext().getAssets().openFd(subFolder+File.separator+mediaFileName);
            ;


            mediaMetadata.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());

            Bitmap frame=null;
            for(int currentFrame=0;currentFrame<FRAMESMAX; currentFrame++){

                if(currentFrame<=0){ 
                    frame = mediaMetadata.getFrameAtTime();
                }else{
                    frame =   mediaMetadata.getFrameAtTime(FRAME_BYTES*currentFrame*1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC );
                    //currentFrame++;
                }
                // do some thing with frame
            }
        }catch(Exception e){
            Log.i(TAG, "  unable to get file descriptor of the frame"+e.toString());
        }
    }
}

I am able to read frames from mp4 media files, on emulator and other devices but Samsung galaxy S III throws and error saying that

MediaMetadataRetriever getFrameAttime failed to retrieve video frames .

Any input on this?

user1575781
  • 11
  • 1
  • 3

1 Answers1

0

For to get data source, you can use:

mediaMetadata.setDataSource(Environment.getExternalStorageDirectory().getPath()+"your_folder/your_file");