我正在将MediaFormat.KEY_I_FRAME_INTERVAL值设置为1(在给定代码下方),但它不会每秒生成关键帧,而是每66秒生成一次。我正在使用Libstreaming库。 谁能帮忙为什么不起作用?
mMediaCodec = MediaCodec.createByCodecName(debugger.getEncoderName());
MediaFormat mediaFormat =MediaFormat.createVideoFormat("video/avc",
640,480);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 1000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
debugger.getEncoderColorFormat());
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1); //here
mMediaCodec.configure(mediaFormat, null, null,
MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();
答案 0 :(得分:0)
您确定输入缓冲区的时间戳使用正确的单位(微秒),并且平均每秒进给15帧吗?错误单位中的时间戳可能是最常见的原因。这也将导致输出流的比特率偏离您的要求。
如果您将MediaFormat.KEY_I_FRAME_INTERVAL
提升为2而不是1,关键帧间隔是否从66提升至132秒?那将指示一个单位错误。如果它完全没有反应,则表明编码器根本不接受该参数。