如何使用KEY_I_FRAME_INTERVAL参数在MediaCodec中配置特定的GOP大小?

问题描述 投票:0回答:1

我的问题是下一个:我知道MediaFormat.KEY_I_FRAME_INTERVAL是I帧将要出现的时间间隔(以秒为单位)(整数)。

因此,如果我将值设为1,并且我的帧速率为15,则GOP大小将为15,如果帧速率为30,则GOP大小将为30。

因此,在参数MediaFormat.KEY_I_FRAME_INTERVAL是一个整数的情况下(无法使用30的帧率将值0.5设为gopsize 15帧,是否有解决方案将其配置为特定的GOP?大小?

android frame mediacodec
1个回答
2
投票

如您在问题中指出的那样,关键帧每KEY_I_FRAME_INTERVAL * KEY_FRAME_RATE个帧出现一次。因此,如果您希望GOP大小为15,请指定间隔1和15的帧频,然后以30fps的速度发送视频。

这引出了一个问题:关于帧速率的说谎对编解码器满足比特率目标的能力有什么影响?我知道有些设备会根据presentation time stamps而不是每秒固定的帧数来调整质量,这将使一切工作正常。似乎并非所有设备都以这种方式工作。

不幸的是,MediaCodec没有提供更灵活的方法来指定GOP大小。


0
投票

我在使用NDK / C ++ Api时为此而苦苦挣扎。最后,我发现可以使用“ AMediaFormat_setFloat(format_video,AMEDIAFORMAT_KEY_I_FRAME_INTERVAL,0.15)”代替“ AMediaFormat_setInt32(format_video,AMEDIAFORMAT_KEY_I_FRAME_INTERVAL,1)”。我不知道这是否也适用于Java,但也许您可以尝试...

© www.soinside.com 2019 - 2024. All rights reserved.