Существует экземпляр ffmpeg, работающий как сервер на VPS, который преобразует видео RTSP в HLS и передает его в Интернет (с использованием Apache). Видео RTSP поступает с компьютера где-то еще (в данном случае в другом городе), к которому у меня подключена IP-камера. Компьютер берет данные RTSP ОТ IP-камеры и ретранслирует их НА VPS.
Это команда ffmpeg, которую я использую на этом компьютере (можно сказать, рестример):
ffmpeg \
-rtsp_transport tcp \
-i rtsp://[IP-адрес камеры]:554/live \
-c:v копировать \
-f ртсп \
-rtsp_transport tcp \
rtsp://[IP-адрес VPS]:4445/live.sdp
И это команда, которую я использую на VPS:
ffmpeg \
-rtsp_flags слушать \
-listen_timeout 5 \
-таймаут 5000000\
-rtsp_transport tcp \
-i rtsp://[ip-адрес VPS]:4445/live.sdp \
-карта 0 \
-flags +global_header \
-fflags +igndts \
-c:v копировать \
-г 0 \
-b:v 125к\
-максимальная скорость 250к\
-буфсайз 500к\
-hls_время 1 \
-hls_list_size 15 \
-hls_wrap 15 \
-y /dev/shm/hls/video.m3u8
Пока все работает нормально: я могу читать поток HLS в браузере, он довольно стабилен и быстр. Проблема возникает, когда соединение между рестримером и VPS обрывается: мне нужно подключиться к VPS по ssh и вручную перезапустить экземпляр ffmpeg. Можно ли сказать ffmpeg «сбой» (или просто остановить его процесс), когда на -я
адрес (на стороне VPS)? Я использую сценарий bash, который автоматически перезапускает процесс, так что об этом позаботились.
Просто чтобы не было путаницы:
Согласно с официальная документация ffmpeg в тайм-аут
флаг принимает МИКРОСЕКУНДЫ в качестве значения и listen_timeout
занимает СЕКУНДЫ. Я видел много постов, где люди спорили об этом :)