我试图在特定时间获取特定帧作为电影中的图像,使用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
损坏图像的情况下提前到特定时间(不仅仅是同步时间)?