MediaCodec:MediaFormat KEY_I_FRAME_INTERVAL不适用于H264codec

时间:2019-07-18 18:17:03

标签: android mediacodec android-mediacodec

我正在将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();

1 个答案:

答案 0 :(得分:0)

您确定输入缓冲区的时间戳使用正确的单位(微秒),并且平均每秒进给15帧吗?错误单位中的时间戳可能是最常见的原因。这也将导致输出流的比特率偏离您的要求。

如果您将MediaFormat.KEY_I_FRAME_INTERVAL提升为2而不是1,关键帧间隔是否从66提升至132秒?那将指示一个单位错误。如果它完全没有反应,则表明编码器根本不接受该参数。