Problemy z MediaExtractor
Próbuję uzyskać określone klatki w określonym czasie jako obrazy z filmu przy użyciuMediaExtractor
iMediaCodec
. Mogę to zrobić z powodzeniem, jeśli:
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
jednak to daje tylko najbliższej ramce synchronizacji nie ramkę docelową.Wyciągam sekwencyjnie wszystkie ramki za pomocąextractor.advance();
, ale muszę nie dopuścić do ramki docelowej.Próbuję więc:
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
while(extractor.getSampleTime()<time /*target time*/) extractor.advance();
Zapewnia to poprawną ramkę, ale z jakiegoś powodu obraz jest uszkodzony. Wygląda to jak poprawny obraz (ten, który otrzymałem z udanych przypadków), ale z pewną pikselacją i dziwną mgiełką.
Thewhile-loop
jest jedyną rzeczą, która różni się między przypadkami zakończonymi sukcesem a przypadkami uszkodzonymi. Co zrobić, aby awansowaćMediaExtractor
do określonego czasu (nie tylko czasu synchronizacji) bez uzyskania uszkodzonego obrazu?