我有一个屏幕录制应用程序,使用MediaCodec编码器对视频帧进行编码。以下是我检索视频编码器的一种方法:
videoCodec = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
我会尝试确定该编码器所支持的最佳比特率模式,首选是"恒定质量"模式,其次是可变比特率模式和恒定比特率模式。我尝试这样做:
MediaCodecInfo.CodecCapabilities capabilities = videoCodec.getCodecInfo().getCapabilitiesForType(MediaFormat.MIMETYPE_VIDEO_AVC);
MediaCodecInfo.EncoderCapabilities encoderCapabilities = capabilities.getEncoderCapabilities();
if (encoderCapabilities.isBitrateModeSupported(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CQ)) {
Timber.i("Setting bitrate mode to constant quality");
videoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CQ);
} else if (encoderCapabilities.isBitrateModeSupported(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR)) {
Timber.w("Setting bitrate mode to variable bitrate");
videoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR);
} else if (encoderCapabilities.isBitrateModeSupported(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR)) {
Timber.w("Setting bitrate mode to constant bitrate");
videoFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR);
}
在我的三星Galaxy S7上运行此操作会选择VBR模式,即似乎不支持固定质量模式。但是,如果我将BITRATE_MODE设置为恒定品质,它不仅可以工作,而且实际上比VBR模式产生更好的视频质量。
因此,如果此编码器显然支持恒定品质模式,那么为什么isBitrateModeSupported()会给我错误的负面反馈?我错过了什么吗?