我在项目中使用MediaCodec对摄像机中的视频进行编码。由于某些原因,我需要将KEY_I_FRAME_INTERVAL设置为0,这意味着录制的mp4视频中的每个帧都将是关键帧(关键帧包含整个图像,而不仅仅是与前一帧的增量差异)。

在这里我遇到了问题:在nexus 10,nexus 7,小米redmi 2,华硕zenphone 5,银河a5上一切正常。但是联想振动s1仅在关键帧间隔等于1秒的情况下进行记录。无论在mediaFormat中设置了什么值,我在mediaCodec.configure()中使用的是什么。我尝试设置0、1、5、10,但视频中的关键帧始终每30帧出现一次。

任何想法如何解决这个问题?

有关更多信息,这是我的mediaCodec编码器的设置:

    videoCodec = MediaCodec.createEncoderByType(MIME_VIDEO_CODEC_H264);

    MediaFormat videoFormat = MediaFormat.createVideoFormat(MIME_VIDEO_CODEC_H264, 1280, 720);
    videoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 3800000);
    videoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
    videoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
    videoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 0);
    videoCodec.configure(videoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    //using input surface to get input data from camera
    inputSurface = new CodecInputSurface(videoCodec.createInputSurface());
    videoCodec.start();

最佳答案

您应在将每个请求帧呈现到编解码器之前对每个帧使用请求同步。

10-08 04:52