MediaExtractor的问题

时间:2014-01-13 23:21:51

标签: android mediacodec mediaextractor

我正在尝试使用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推进到特定时间(而不仅仅是同步时间)?

1 个答案:

答案 0 :(得分:1)

感谢fadden评论,我必须继续提供编码器,因为I-frame具有完整的图片,而PB帧有差异(这就是压缩的实现方式) 。所以我需要从I-frame开始(它与同步帧相同)并继续将其他帧送到解码器以接收完整的图像。