gpt4 book ai didi

java - 尝试编码数据时出现 BufferOverflowException

转载 作者:太空狗 更新时间:2023-10-29 16:41:16 29 4
gpt4 key购买 nike

我尝试为“audio/3gpp”创建编码器,但我的应用程序崩溃了。

我配置 MediaCodec...

    String mMime = "audio/3gpp";
mMediaCodec = MediaCodec.createEncoderByType(mMime);
MediaFormat mMediaFormat = MediaFormat.createAudioFormat(mMime, 44100, 1);
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 12000);
mMediaFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100);
mMediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();

然后我尝试对数据进行编码...

private byte[] EncodeDataTo3gp(byte[] input)
{
byte[] outData = null;

try
{
ByteBuffer[] inputBuffers = mMediaCodec.getInputBuffers();

ByteBuffer[] outputBuffers = mMediaCodec.getOutputBuffers();
int inputBufferIndex = mMediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0)
{
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
mMediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);
}

MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mMediaCodec.dequeueOutputBuffer(bufferInfo, 0);
while (outputBufferIndex >= 0)
{
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
outData = new byte[bufferInfo.size];
outputBuffer.get(outData);

mMediaCodec.releaseOutputBuffer(outputBufferIndex, false);
outputBufferIndex = mMediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
} catch (Throwable t) {
t.printStackTrace();
}

return outData;
}

但是这个函数抛出异常。当 "inputBuffer.put(input);": java.nio.BufferOverflowException

最佳答案

尝试根据input 大小将MediaFormat.KEY_MAX_INPUT_SIZE 参数添加到您的mMediaFormat。它将增加 inputBuffers 的容量。

关于java - 尝试编码数据时出现 BufferOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489336/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com