Проблемы с 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 (это было так же, как синхронизировать кадр) и продолжайте подавать другие кадры в декодер для получения полного изображения.

Другие вопросы по тегам