gpt4 book ai didi

android - 媒体编解码器 : MediaFormat setting KEY_I_FRAME_INTERVAL value is ignored

转载 作者:行者123 更新时间:2023-12-03 14:56:21 26 4
gpt4 key购买 nike

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

我在这里遇到了问题:在 nexus 10、nexus 7、小米红米 2、华硕 zenphone 5、galaxy a5 上一切正常。但是 lenovo 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();

最佳答案

此答案较晚且基于意见,但可能会有所帮助。
至于Android中的许多其他东西,我认为这是KEY_I_FRAME_INTERVAL与其说是严格的设置,不如说是对编码器的一种“善意推荐”。此 API 背后可能有数百个硬件编码器实现,并且一些更“刚性”且可能是旧的可能无法使用此设置,这可能是您遇到问题的设备的情况。不过,这纯属猜测。
如果您的问题是增加编码流中的 I 帧频率,您可以考虑 PARAMETER_KEY_REQUEST_SYNC_FRAME 设置定期提交给 MediaCodec 实例。如果编码器能够使用其他中间模式,而不仅仅是 I 帧之间的“零秒”和“一秒”间隔,这可能是实现更频繁的 I 帧(尽管不一定是它们的精确频率)的一种方式。
还值得注意的是,自 Android 7.1 KEY_I_FRAME_INTERVAL接受浮点值。

关于android - 媒体编解码器 : MediaFormat setting KEY_I_FRAME_INTERVAL value is ignored,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com