The MediaMetadataRetriever.getFrameAtTime() always returns same frames when ever call. Have a look my code
private ArrayList<Bitmap> getFrames(String path){
try {
ArrayList<Bitmap> bArray = new ArrayList<Bitmap>();
bArray.clear();
MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
mRetriever.setDataSource(getDataSource(path));
for (int i = 3000; i <60000; i=i+5000) {
bArray.add(mRetriever.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC));
}
return bArray;
} catch (Exception e) {
// TODO: handle exception
return null;
}
}
This method always return same frames
Take a screenshot when the video is playing simply by pressing the Snapshot icon or pressing CTRL+ALT+S. You can use the Left or Right arrow button on the keyboard to playback the video frame by frame and save the frame in image format.
Léon Pelletier is right. The problem is that MediaMetadataRetriever.getFrameAtTime() could only extract key frames from video at second level. For example, if a video has about 4 seconds, you can get only 4 or 5 different frames. To get all video frames, please refer to MediaCodec.
I don't know how long is your video, but the time to use in the long var as the time for getTimeAtFrame
must be expressed in MICRO seconds
ex: a video of 1 second have 1000000 USeconds, if use a very short period (like you) you must very lucky for retrieve the first frame only that you video have!!!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With