当前位置: 首页 > 知识库问答 >
问题:

mediacodec:忽略MediaFormat设置KEY_I_FRAME_INTERVAL值

郜联
2023-03-14

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

而在这里我遇到了问题:在nexus 10、nexus 7、小米红米2、华硕zenphone 5、galaxy a5上一切都OK。但联想vibe 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();

共有1个答案

桑璞
2023-03-14

在将每个帧呈现给编解码器之前,您应该对其使用请求同步

 类似资料:
  • 问题内容: 我安装了OSX ,并随同安装了: 在将其设置为1.6时显示1.6,而在将其设置为1.7时显示1.7: …但是Maven忽略了我的设置: 我发现了这个问题],这个家伙只需要在内部对其进行硬编码,但是我不希望自己进行硬编码(因此!),而且我也没有或。 它使用的版本似乎来自输出中的第一个版本,因此在短期内,通过调整1.7的文件),我能够再次获得1.6 ,但这仅意味着我获得了1.6而不是1.7

  • 我安装了带有的OSX,并且刚刚安装了以及: 正在执行其任务,始终工作,当我将其设置为1.6时显示1.6,当我将其设置为1.7时显示1.7: ...但maven忽略了我的设置: 我发现了这样一个问题,那家伙只需要在中硬编码他的,但我不希望我的!,而且我没有,也没有。 它所使用的版本似乎是从输出的第一个版本开始的,所以在短期内,通过调整1.7的文件(从这篇so文章),我可以重新获得1.6,但这仅仅意味

  • 问题内容: 我正在使用Golang和GitLab CI,并且我有一个GitLab CI配置,它可以完美地用于12个项目,但不适用于第13个项目。 我遇到的问题是我正在尝试一些私有存储库,这些存储库试图在已关闭的HTTPS上运行。 在其他存储库中有效的解决方案是: 但是,在这个项目的运行程序中,在具有相同配置(服务名称除外)的同一GitLab上,会发生以下情况: 为什么突然尝试通过HTTPS克隆?它

  • 问题内容: IE浏览器忽略缩放设置不起作用,我的代码如下,为什么它不起作用?我收到了错误消息(selenium.common.exceptions.SessionNotCreatedException:消息:启动Internet Explorer时发生意外错误。浏览器缩放级别设置为125%。应将其设置为100%) 问题答案: 不 ,在使用 InternetExplorerDriver时, 您不应忽

  • 我有一个基于Micronaut的网络应用程序,我在认证方面遇到了一些问题。这个问题特别与浏览器正在经历的变化有关,其中SameSite默认为Lax,如果您使用SameSite:none,那么cookie必须是安全的。我正在使用所有最新的稳定版本,例如Micronaut2.0.1。 Chrome给了我以下例外: set-cookie:JWT=EYJHBGCIOIJUB2..U5ODYXNZA2MX0

  • 我的问题是下一个:我知道mediaformat.key_i_frame_interval是I帧将要出现的时间间隔(以秒为单位)(整数)。 因此,如果我将值设为1,帧速率为15,GOP大小将为15,如果帧速率为30,GOP大小将为30。 因此,在参数mediaformat.key_i_frame_interval是一个整数的情况下(不能给出值0.5作为使用30帧率的15帧gopsize),是否有任何