我正在尝试在特定的时间获取特定的帧,比如使用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提前到特定时间(而不仅仅是同步时间)?
发布于 2014-01-15 19:50:08
感谢fadden的评论,我必须继续给编码器喂食,因为I-frame有完整的图片,P和B帧有差异(这是如何实现压缩的)。因此,我需要从一个I-frame开始(它与同步帧相同),并继续将其他帧提供给解码器以接收完整的图像。
https://stackoverflow.com/questions/21103347
复制相似问题