问题描述
我想获得在特定的时间特定的帧作为使用来自电影图像 MediaExtractor
和媒体codeC
。我能成功地做到这一点,如果:
I am trying to get specific frames at specific times as images from a movie using MediaExtractor
and MediaCodec
. I can do it successfully if:
- 我用
extractor.seekTo(时间,MediaExtractor.SEEK_TO_ preVIOUS_SYNC);
,然而,这只是给最近的同步帧而不是目标帧。 LI> - 在我按顺序使用
extractor.advance()提取所有的帧;
,但我需要得到目标帧不是所有 。
- I use
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
, however, this only gives the nearest sync frame not the target frame. - I sequentially extract all frames using
extractor.advance();
, but I need to get the target frame not all.
于是,我尝试以下方法:
So, I try the following:
extractor.seekTo(time, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
while(extractor.getSampleTime()<time /*target time*/) extractor.advance();
此提供了正确的帧,但由于某些原因图像损坏。它看起来像正确的图像(一个我从成功案例获得),但与一些像素化和陌生的阴霾。
This provides the correct frame, but for some reason the image is corrupted. It looks like the correct image (the one I get from the successful cases), but with some pixelation and a strange haze.
在 while循环
是成功的案例和破坏的人之间不同的唯一的事。怎样做才能推进 MediaExtractor
到一个特定的时间(不只是同步时间)没有得到损坏的图像?
The while-loop
is the only thing that is different between the successful cases and the corrupted ones. What to do to advance MediaExtractor
to a specific time (not just sync time) without getting a corrupted image?
推荐答案
由于法登的评论,我必须保持喂EN codeR因为 I帧
有充分的画面和 P
和 B
帧有分歧(这是怎样的COM pression实现)。所以,我要开始与 I帧
(这是一样的同步帧),并再喂另一帧去codeR接收完整的图像。
Thanks to fadden comment, I have to keep feeding the encoder since the I-frame
has the full picture and the P
and B
frames have differences (this is how compression is achieved). So I need to start with an I-frame
(it was same as sync frame) and keep feeding the other frames to the decoder to receive the full image.
这篇关于与MediaExtractor问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!