我使用Android的MediaCodec API使用以下代码创建了一个编码器:
MediaFormat mMediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
Log.i(TAG, "Starting encoder");
encoder = MediaCodec.createByCodecName(Utils.selectCodec("video/avc").getName());
encoder.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Surface surface = encoder.createInputSurface();
encoder.start();
我正在使用createInputSurface()
将输入传递给编码器。问题是我想在后续调用dequeueOutputBuffer()
时想要RGB颜色格式帧,但是因为我已经将颜色格式设置为MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface
所以我想我没有得到RGB帧。我需要将这些帧传递给OpenCv进行图像处理。
有没有办法从dequeueOutputBuffer()
获得RGB帧?
注意:在配置编码器时我无法将RGB设置为颜色格式,因为它不受支持。
答案 0 :(得分:1)
编码器的输出是AVC编码的帧。它不是RGB或YUV,而是AVC。
颜色格式指定了进入编码器的帧的格式,而不是来自 out 的帧,因此它不会影响你从{ {1}}。
如果您需要操作原始帧,则应在将它们传递到编码器之前执行此操作。