降低编码器帧速率

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

我想将帧速率限制为 5-10 fps。 编码帧通过网络套接字连接发送,我的目标是将带宽限制为 1Mbps,同时具有良好的质量以获得更大的分辨率。

我目前的尝试是:

    val format =
            MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_VP8, size.width, size.height)
        format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
            MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
        format.setInteger(MediaFormat.KEY_BIT_RATE, 1000000);
        format.setInteger(MediaFormat.KEY_BITRATE_MODE,  MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR_FD);
        format.setInteger(MediaFormat.KEY_FRAME_RATE, 1);
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
        format.setInteger(MediaFormat.KEY_MAX_FPS_TO_ENCODER, 1);
encoderInput = mEncoder!!.createInputSurface()
encoderInput.setFrameRate(1f,Surface.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,Surface.CHANGE_FRAME_RATE_ALWAYS)

我厌倦了在格式和表面上设置帧速率,但它仍然没有限制它。基于此讨论MediaCodec KEY_FRAME_RATE 似乎被忽略

带宽确实遵循格式中设置的比特率,但不遵循帧速率,因此质量很差。

那么如何降低帧率呢?最好以支持旧版本 Android 的方式。

android frame-rate android-mediacodec cameraapi2
1个回答
0
投票

用于配置编码器的帧速率值不会更改视频流。它主要是向播放器/解码器提示期望的帧速率。

为了实际更改视频流的帧速率,您必须执行一个称为“采样率转换”的过程。 降低视频帧速率的一种方法是丢弃每第 N 帧并更新流中剩余帧的时间戳。但这可能会导致“锯齿”。因此,为了获得良好的质量结果,您还需要实现

低通滤波器

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