【发布时间】:2015-09-24 16:41:23
【问题描述】:
我用这个配置 MediaCodec
mediaCodec = MediaCodec.createEncoderByType(MIME_TYPE);
MediaFormat mediaFormat = MediaFormat.createVideoFormat(MIME_TYPE,
width, height);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate); //
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, framerate); // frame rate
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, iFramerate);
mediaCodec.configure(mediaFormat, null, null,
MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
并发送数据 从 Camera.onPreviewFrame(byte[] data, Camera camera) 调用
try {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
if (inputBuffer.capacity() < input.length) {
byte[] temp = new byte[input.length];
System.arraycopy(input, 0, temp, 0, temp.length);
inputBuffer.put(temp);
} else {
inputBuffer.put(input);
}
mediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length,
0, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,
0);
while (outputBufferIndex >= 0) {
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
input(byte[]) 来自相机预览。我遵循 API-DOC 中的代码。 但是当我运行这段代码时,我只能成功获得一帧。 这意味着 outputBufferIndex 无论运行多长时间都只会 >=0 一次。 问题出在哪里?
【问题讨论】:
-
您可以在 bigflake (bigflake.com/mediacodec) 和 Grafika (github.com/google/grafika) 中找到一些信息和示例。
-
是的。我在 bigflake.com/mediacodec 中发现了一些非常有用的东西。谢谢
-
我有同样的问题,你能解释一下你从 bigflake.com/mediacodec @Denzww 找到了什么吗?
标签: android h.264 android-mediacodec