如果 Android MediaCodec dequeueOutputBuffer 返回 -1,这意味着什么?

use*_*461 5 android android-mediacodec

我按照官方 Android 文档使用 MediaCodec 对象为我的音频输入设置编码器。但下面代码中的 dequeueOutputBuffer 方法始终返回 -1。这个返回值是什么意思呢?

我的代码:

/*configuarion of MediaCodec object*/
codec = MediaCodec.createEncoderByType("audio/mp4a-latm");
MediaFormat format = new MediaFormat();
format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100);
format.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024);
format.setInteger(MediaFormat.KEY_AAC_PROFILE,MediaCodecInfo.CodecProfileLevel.AACObjectHE);
codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

codec.start();
 ByteBuffer[] inputBuffers = codec.getInputBuffers();
 ByteBuffer[] outputBuffers = codec.getOutputBuffers();

/*main loop to encode audio data*/
 for (;;) {
   int inputBufferIndex = codec.dequeueInputBuffer(-1); -->this is never zero so data should be written correctly!
   if (inputBufferIndex >= 0) {

     // write data from audiorecord in queue
     inputBuffer = inputBuffers[inputBufferIndex];
     inputBuffer.clear();

     inputBuffer.put(buf);-->data from audiorecord object

     encoder.queueInputBuffer(inputBufferIndex, 0, buf.length, 0, 0);
     codec.queueInputBuffer(inputBufferIndex, ...);

   }

   int outputBufferIndex = codec.dequeueOutputBuffer(bufferInfo, 0);-------->>> "-1"
   if (outputBufferIndex >= 0) {

       //do something but never called because outputbufferindex is always -1??
Run Code Online (Sandbox Code Playgroud)

小智 3

当您传递非负数时,获得 -1 作为返回值timeoutUS表明调用dequeueOutputBuffer已超时。根据Android Sample,它返回以下整数

 public static final int INFO_TRY_AGAIN_LATER = -1;
Run Code Online (Sandbox Code Playgroud)