Я пытаюсь кодировать h264 в поток в режиме низкой латентности в режиме реального времени с помощью MediaCodec для Android6.0. Есть около 6 кадров латентности от кодера, который я хочу знать, как уменьшитьКак уменьшить задержку кодирования MediaCodec H264
Код от screenrecord.cpp
части коды:
while (true) {
encoder->dequeueOutputBuffer(&bufIndex);
}
энкодера питаются от поверхности экрана в 320x480 60 fps, и он выводит данные потока с помощью dequeueOutputBuffer(). Есть около 6 кадров для кодировщика, данные которого не возвращаются немедленно с помощью dequeueOutputBuffer(). Другими словами, когда N-й кадр подается, выходные данные энкодера (N-6) -го кадра.
Вопрос 1 - Как уменьшить фреймы, буферизированные в кодере? Можно ли выводить N-й кадр сразу после подачи N-го кадра в кодировщик?
PS: Вопрос 1 тот же, что и для this question. (Пока нет хорошего решения).
Когда поверхностное графическое содержимое внезапно становится статическим, больше кадров не подаются в кодировщик. Странно, что последние 6 кадров данных не могут выводиться на «обычной скорости», они медленно выводятся примерно через 10 секунд.
Вопрос 2 - Как уменьшить латентность выходных данных последних кадров, когда при подаче данных в кодировщик нет данных?