MediaMetadataRetriever.getFrameAtTime () возвращает только первый кадр

Я извлек кадры из видео с помощью MetadataRetriever и сохранил все изображения вArrayList<Bitmap>, Я хочу хранить их все на SD-карте (только для целей тестирования).

Но когда я извлекаю папку из эмулятора и смотрю на сохраненные изображения, все изображения были только из первого кадра видео.

Вот как я извлекаю кадры из видео:

File videoFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/videos","sample_mpeg4.mp4");

Uri videoFileUri=Uri.parse(videoFile.toString());

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(videoFile.getAbsolutePath());
ArrayList<Bitmap> rev=new ArrayList<Bitmap>();

//Create a new Media Player
MediaPlayer mp = MediaPlayer.create(getBaseContext(), videoFileUri);

int millis = mp.getDuration();
for(int i=0;i<millis;i+=100){
   Bitmap bitmap=retriever.getFrameAtTime(i,OPTION_CLOSEST_SYNC);
   rev.add(bitmap);
}

И вот как я их сохраняю (я вызываю этот метод и передаю битовый массив ArrayList):

public void saveFrames(ArrayList<Bitmap> saveBitmapList) throws IOException{
    Random r = new Random();
    int folder_id = r.nextInt(1000) + 1;

    String folder = Environment.getExternalStorageDirectory()+"/videos/frames/"+folder_id+"/";
    File saveFolder=new File(folder);
    if(!saveFolder.exists()){
       saveFolder.mkdirs();
    }

    int i=1;
    for (Bitmap b : saveBitmapList){
       ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        b.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

        File f = new File(saveFolder,("frame"+i+".jpg"));

        f.createNewFile();

        FileOutputStream fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());

           fo.flush();
           fo.close();

        i++;
    }
    Toast.makeText(getApplicationContext(),"Folder id : "+folder_id, Toast.LENGTH_LONG).show();

}

Когда я вытаскиваю папку, чтобы увидеть все кадры, все изображения были первого кадра видео. Может кто-нибудь объяснить мне, что происходит?

UPDATE:

Я пробовал с другим видео. Я обнаружил, что не получаю пустых изображений, но он всегда возвращает только первый кадр.

MediaMetadataRetriever.getFrameAtTime(long timeUS) возвращает только первый кадр, но я хочу получить все кадры. Какие изменения я должен сделать?

Как мне справиться с этим?

Ответы на вопрос(5)

Ваш ответ на вопрос