2

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破損したイメージを取得せずに特定の時間 (同期時間だけでなく)に進むにはどうすればよいですか?

4

1 に答える 1

1

fadden コメントのおかげで、 にI-frameは全体像があり、PBフレームには違いがあるため、エンコーダーにフィードし続ける必要があります (これが圧縮の実現方法です)。したがって、I-frame(同期フレームと同じ) から開始し、他のフレームをデコーダーに送り続けて、完全な画像を受信する必要があります。

于 2014-01-15T19:50:08.030 に答える