уменьшить частоту кадров энкодера

Я пытаюсь ограничить частоту кадров до 5-10 кадров в секунду. Закодированный кадр отправляется через соединение через веб-сокет, и моя цель - ограничить пропускную способность до 1 Мбит / с, имея при этом хорошее качество для большего разрешения.

моя текущая попытка:

          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)

Надоело и ставить частоту кадров в формате и на поверхности но все равно не ограничивает. на основе этого обсуждения MediaCodecKEY_FRAME_RATE кажется игнорируемым

Полоса пропускания соответствует битрейту, установленному в формате, но не частоте кадров, поэтому качество плохое.

так как уменьшить частоту кадров? желательно таким образом, чтобы поддерживать более старую версию Android.

0 ответов

Другие вопросы по тегам