以下是使用mediacodec编码的方法:
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, config.getWidth(), config.getHeight()); format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); format.setInteger(MediaFormat.KEY_BIT_RATE,config.getBitrate()); format.setInteger(MediaFormat.KEY_FRAME_RATE, config.getHumanFPS()); format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL); if (VERBOSE) Log.d(TAG, "format: " + format); mEncoder = MediaCodec.createEncoderByType(MIME_TYPE); mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); mInputSurface = mEncoder.createInputSurface(); mEncoder.start();
但是在VIVO X5 PRO D手机上在输出数据的时候,birate完全失效,编码出的bitrate跟设置的不一致。
最后经过调试发现是MediaFormat.KEY_FRAME_RATE 参数不能随意设置,必须设置成跟输入的fps一样才可以。