与MediaExtractor问题问题、MediaExtractor

2023-09-07 14:46:11 作者:鬼魅无痕

我想获得在特定的时间特定的帧作为使用来自电影图像 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); ,然而,这只是给最近的同步帧而不是目标帧 在我按顺序使用 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.

 
精彩推荐
图片推荐