2

我试图在特定时间获取特定帧作为电影中的图像,使用MediaExtractorMediaCodec。如果满足以下条件,我可以成功:

  • 但是,我使用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损坏图像的情况下提前到特定时间(不仅仅是同步时间)?

4

1 回答 1

1

多亏了fadden评论,我必须继续输入编码器,因为它I-frame有完整的画面,P并且B帧有差异(这是实现压缩的方式)。所以我需要从一个I-frame(它与同步帧相同)开始,并继续将其他帧馈送到解码器以接收完整图像。

于 2014-01-15T19:50:08.030 回答