Проблемы с MediaExtractor
Я пытаюсь получить определенные кадры в определенное время, как изображения из фильма, используя MediaExtractor
а также MediaCodec
, Я могу сделать это успешно, если:
- я использую
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
однако это дает только ближайший кадр синхронизации, а не целевой кадр. - Я последовательно извлекаю все кадры, используя
extractor.advance();
, но мне нужно получить целевой кадр не всем.
Итак, я пробую следующее:
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
while(extractor.getSampleTime()<time /*target time*/) extractor.advance();
Это обеспечивает правильный кадр, но по какой-то причине изображение повреждено. Это выглядит как правильное изображение (которое я получаю из успешных случаев), но с некоторой пикселизацией и странной дымкой.
while-loop
единственное, что отличается между успешными и испорченными делами. Что делать для продвижения MediaExtractor
в определенное время (не только время синхронизации) без получения поврежденного изображения?
1 ответ
Благодаря комментарию Fadden, я должен продолжать кормить кодировщик, так как I-frame
имеет полную картину и P
а также B
кадры имеют различия (так достигается сжатие). Поэтому мне нужно начать с I-frame
(это было так же, как синхронизировать кадр) и продолжайте подавать другие кадры в декодер для получения полного изображения.