Предотвращение задержки просмотра в ffplay при запуске окна в фоновом режиме на Ubuntu

Вопрос или проблема

Я использую ffplay для стриминга живого видео на Ubuntu 22.04 LTS на ноутбуке, который использует только CPU (без GPU). Вот команда, которую я выполняю:

$ ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \
    -strict experimental -vf "setpts=N/30/TB" -an -noframedrop \
    -i rtmp://localhost:1935/live

Я заметил, что когда окно ffplay отправляется в фоновый режим, возникает заметная задержка в стриме, и эта задержка сохраняется даже после того, как я возвращаю окно на передний план. Однако, если я оставляю окно на переднем плане с самого начала, стрим работает без каких-либо задержек.

Я подозреваю, что Ubuntu может снижать приоритет процесса, когда окно находится в фоновом режиме. В любом случае, существует ли способ предотвратить эту задержку, обеспечив плавную работу стрима независимо от того, находится ли окно на заднем или переднем плане?

Чтобы изменить приоритет любого запускаемого процесса в Linux, в том числе для таких целей, как попытка сделать стрим ffplay менее запаздывающим, вы можете изменить его niceness с помощью команды nice:

nice -n -20 command

где -20 – это самый высокий приоритет, а 19 – самый низкий, а command – это просто полная команда, которую вы хотите использовать.

Ответ или решение

Чтобы предотвратить задержку в отображении потока в ffplay, когда его окно находится в фоновом режиме на Ubuntu, вы можете попробовать несколько решений.

1. Изменение приоритета процесса

Как вы правильно отметили, Ubuntu может изменять приоритет вашего процесса, когда окно приложений переходит в фоновый режим. Для повышения приоритета вашего процесса можно использовать команду nice. Например, можно запустить вашу команду с приоритетом выше среднего:

nice -n -20 ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \
    -strict experimental -vf "setpts=N/30/TB" -an -noframedrop \
    -i rtmp://localhost:1935/live

Параметр -20 дает наивысший приоритет для вашего процесса, что может помочь в уменьшении задержки при переводе окна в фоновый режим.

2. Использование команды ionice

Кроме изменения приоритета в CPU, вы также можете попробовать использовать ionice, чтобы задать приоритет ввода-вывода для вашего процесса. Это может быть полезно, если ваша система испытывает конкуренцию за ресурсы ввода-вывода. Команда будет выглядеть так:

ionice -c 2 -n 0 nice -n -20 ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \
    -strict experimental -vf "setpts=N/30/TB" -an -noframedrop \
    -i rtmp://localhost:1935/live

Здесь -c 2 -n 0 задаёт "реальный" класс I/O с высоким приоритетом.

3. Использование других параметров ffplay

Вы также можете экспериментировать с другими параметрами ffplay. Например, попробовать убрать -an, если звуковая часть потока не нужна. Иногда поддержка аудио может создавать дополнительную нагрузку, особенно при использовании CPU.

ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \
    -strict experimental -vf "setpts=N/30/TB" -noframedrop \
    -i rtmp://localhost:1935/live

4. Установка tile режима в системе

В некоторых случаях, применение режима tile для потоковой передачи может помочь улучшить производительность в фоновом режиме. Данный режим позволяет приложению больше оптимизировать обновления экрана.

Заключение

Попробуйте предложенные решения, чтобы убедиться, что поток остаётся стабильным и не теряет производительности при переводе в фон. Поэкспериментируйте с различными параметрами nice и ionice, чтобы найти оптимальные настройки для вашего ноутбука, учитывая, что ваша система использует только CPU без использования GPU. Если вышеописанные методы не будут работать, рассмотрите возможность использования других программных решений для потоковой передачи, которые могут лучше поддерживать работу в фоновом режиме на вашей системе.

Оцените материал
Добавить комментарий

Капча загружается...