Я пытаюсь создать приложение потокового видео в реальном времени на C ++ на основе кодека H265. Моему приложению очень важна производительность в реальном времени, и я построил однопоточную программу для тестирования кодеков H265. Программа имеет простой конвейер:
- Схватить один кадр;
- Подача на энкодер;
- Подача закодированных данных в декодер;
- Показать декодированный результат или уведомление о выходе, если нет декодированного кадра.
Я попробовал комбинацию X265/DE265
и кодер и декодер AV_CODEC_ID_HEVC
в комбинации avcodec
, и я обнаружил явление, при котором декодер не будет декодировать "сразу" после поступления данных первого кадра, и у него есть ждать около 30 кадров данных, прежде чем начать вывод декодированного результата. Ситуация выглядит так:
**encoding** **decoding**
frame 1: succeeded -> no frame decoded
frame 2: succeeded -> no frame decoded
frame 3: succeeded -> no frame decoded
...
frame 30: succeeded -> no frame decoded
frame 31: succeeded -> frame 1 outputted
frame 32: succeeded -> frame 2 outputted
...
Это приведет к задержке от 1 до 2 секунд от датчика. Мне интересно, почему и если есть способ избежать этого.
Спасибо!