如何设置MediaCodec创建的编码器缓冲区大小

use*_*793 6 android buffer encoder

我正在尝试使用Nexus来测试Mediacodec API的编码.我可以看到编码器提供的inputBuffers是119040(通过记录inputBuffers.capacity).但帧的大小,即输入,是460800.我得到错误信息,在inputBuffer.putbuffer overflow.所以我打算将输入缓冲区设置为460800.我能找到的API是BufferInfo.set.但是,我找不到将此设置附加到编码器的方法.有人可以帮忙吗?谢谢!!!

encoder = MediaCodec.createByCodecName(codecInfo.getName());
ByteBuffer[] inputBuffers = encoder.getInputBuffers();
if (inputBufferIndex >= 0) {
    ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
    inputBuffer.clear();
    inputBuffer.put(input);
encoder.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);}
Run Code Online (Sandbox Code Playgroud)

Emi*_*oni 5

我迟到了,但基于:Android MediaCodec Documentation我认为更改缓冲区的正确方法是调整 MAX_INPUT_SIZE,例如:

int width=800;
int height=480;
encoder = MediaCodec.createByCodecName(codecInfo.getName());
format = MediaFormat.createVideoFormat ("video/avc", width, height);
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE,655360); // 0.5MB but adjust it as you need.
Run Code Online (Sandbox Code Playgroud)


fad*_*den 2

您没有设置输入缓冲区的大小。大小由 确定MediaFormat,特别是宽度、高度和颜色格式。如果您的输入数据具有不同的大小,您将需要将其转换为编解码器期望的格式。

这并不完全是微不足道的,但却是可行的。例如,请参阅 CTS EncodeDecodeTest中的缓冲区到缓冲区测试。该测试查询编解码器以查看支持什么颜色格式,生成该格式的帧,将它们提交给编码器,然后解码视频并确认输出的内容与输入的内容相同。

该测试通常需要 API 18 (Android 4.3),但缓冲区到缓冲区代码将在 API 16 中运行。它是否在任何给定设备上运行是一个不同的问题——因为 CTS 测试在 API 之前并不存在18、4.3 之前的设备可能会出现此错误。