QT большая задержка в RTSP стриме при использовании стандарта H264
Написал небольшой код для отображения видео с камер и столкнулся с проблемой задержек при трансляции, растующих в арифметической прогрессии. На камере используется стандарт H264 для кодирования, в случае MJPEG проблема отсутствует Во время работы ПО отслеживается 90-100% нагрузка на процессор.
_player.setMedia(QUrl(URI));
QVideoWidget* videoWidget = new QVideoWidget();
_ui->videoLayout->addWidget(videoWidget);
_player.setVideoOutput(videoWidget);
_player.play();
Player - объект класса QMediaPlayer. При просмотре потока в других ПО, эта задержка так же отсутствует. Как я понял, на разных системах используется разный бэк для работы в аудио или видео. Мной используется система elementary
Ответы (1 шт):
Есть два источника задержек, которые вносит сама технология H264.
- Задержка, связянная с частотой появления в потоке ключевых кадров - отобрачать поток можно начать только с ключевого кадра, так что декодер будет всегда ждать его появления.
- Задержка, вызванная буферизацией данных, причем иногда возможность конфигурирования этого буфера запрятана очень глубоко.
Очевидно, что оба этих источника поддаются коррекции путем настройки.
Есть еще одна беда, которая может все испортить - это недостаток системных ресурсов. Судя по вашим симптомам (прогрессирование проблемы со временем и полная загрузка процессора) - это ваш кейс.
Вероятно, другой софт, который не тормозит, использует аппаратное декодирование видео.
Беглый поиск показывает, что в Qt по этой теме все более-менее может заработать на QML, а для обычного приложения придется использовать gstreamer / libavcodec.