Android从4.1系统开始,引进了MediaCodec API,支持对图像进行硬编码,但很多读者刚开始使用这套API遇到很多问题,特别是不知道如何正确设置编码器的参数。设置MediaCodec编码器涉及如下几个重要的参数:码率模式(固定码率、可变码率),码率,帧率、I帧间隔,H264的Profile和Level,下面是一段初始化参数的代码:
public AvcEncode(int width, int height, int framerate, int bitrate, int i_frame_interval) {
this.width = width;
this.height = height;
yuv420 = new byte[width * height * 3 / 2];
m_FrameRate = framerate;
m_Bitrate = bitrate;
try{
mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = null;
mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mediaFormat.setInteger(MediaFormat.KEY_BITRATE_MODE, MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, framerate);