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)
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |