我想在不使用提取器的情况下解码视频帧.所以我只尝试了一个小样本,我在那里使用了媒体提取器,但我没有 extractor.readsample()
将比特流数据复制到输入缓冲区而是使用FFmpeg解析器,在JNI中,我将视频帧记忆到输入字节缓冲区然后排队输入缓冲区..但是当我调用时decoder.dequeueOutputBuffer(info, 10000)
,它返回MediaCodec.INFO_TRY_AGAIN_LATER
.虽然我使用它可以正常工作extractor.readsample()
.
请在下面找到以下代码段:
Java方面:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import android.app.Activity;
import android.media.MediaCodec;
import android.media.MediaCodec.BufferInfo;
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class VideoBrowser extends Activity implements SurfaceHolder.Callback {
private static final String SAMPLE = Environment.getExternalStorageDirectory() + "/obama.mp4";
private PlayerThread mPlayer = null;
private static native <jintArray> int AVinitializecntxt(String strl, jintArray arr);
private native int AVREADVIDEO(byte[] array); …
Run Code Online (Sandbox Code Playgroud)