Вопрос или проблема
У меня следующая ошибка в логах FFmpeg. Она появляется после более 24 часов работы.
rtsp://admin:passwd@myip:554/live1.sdp: Connection timed out
Я использую следующую команду:
nohup ./ffmpeg -i rtsp://admin:passwd@myip:554/live1.sdp -vcodec libx264 -vb 450000 -g 60 -vprofile baseline -level 2.1 -acodec aac -ab 64000 -ar 48000 -ac 2 -vbsf h264_mp4toannexb -strict experimental -f mpegts udp://serverip:10013?pkt_size=1316 &
Буду благодарен за любую помощь.
Это очень распространенная проблема со всеми “внешними” источниками ввода, например с сетевыми входами, которые могут остановиться на некоторое время из-за проблем с подключением сети.
Кажется, что опция вывода -shortest является самым жизнеспособным вариантом в этом случае – и у вас есть cronjob, который постоянно проверяет, если процесс завершился, и перезапускает его, если необходимо.
Надеюсь, есть какой-то более лучший вариант, но после обширного поиска мне не удалось его найти.
С уважением.
Ответ или решение
Ошибка «FFmpeg: Connection timed out» может быть вызвана различными факторами, связанными с подключением и стабильностью сети. Рассмотрим более подробно возможные причины проблемы и соответствующие решения.
Причины возникновения ошибки
- Проблемы с сетью: Поскольку вы используете протокол RTSP для подключения, временное отключение сети или колебания могут привести к потере связи с источником потока.
- Ограничения брандмауэра: Проверьте, что ваш брандмауэр или маршрутизатор не блокирует необходимые порты или не вмешивается в RTSP-трафик.
- Истекшее время ожидания (timeout): Истекшее время ожидания соединения с источником потока – частая причина подобных проблем. Это может быть связано с задержками в отклике сервера или самим FFmpeg-клиентом.
Решения
-
Настройка таймера повторного соединения (reconnect): В FFmpeg можно установить параметр автоматического повтороподключения.
-rtsp_transport tcp -stimeout 5000000
Этот параметр задает максимальное время ожидания в микросекундах перед разрывом соединения. Попробуйте увеличить значение
-stimeout
. -
Использование скрипта для мониторинга и перезапуска: Поскольку проблема возникает через 24+ часа, возможно, стоить написать скрипт, который будет проверять состояние процесса FFmpeg и перезапускать его при обнаружении сбоя. Это может быть осуществлено с помощью cronjob на Unix-системах.
-
Оптимизация параметров FFmpeg: Проследите за корректностью и оптимальностью используемых параметров, таких как
-vcodec
,-vb
,-acodec
. Возможно, стоит протестировать работу с разными параметрами кодека, чтобы уменьшить нагрузку на сеть.
Дополнительные рекомендации
- Убедитесь, что RTSP-сервер стабильно работает и не подвергается перегрузкам. Возможно, ему требуется обновление прошивки или дополнительная настройка.
- Попробуйте подключаться к RTSP-серверу с другими клиентами, чтобы исключить проблему на стороне сетевого оборудования.
В результате этих действий у вас появится лучшее понимание причин возникновения проблемы и способов её устранения. Если проблема сохранится, возможно, стоит обратиться за консультацией к специалистам по сетевой безопасности или интернет-провайдеру.