Există o instanță ffmpeg care rulează ca server pe un VPS, care convertește videoclipul RTSP în HLS și îl servește pe web (folosind Apache). Videoclipul RTSP vine de la un computer de undeva altundeva (în alt oraș în acest caz), la care am conectată o cameră IP. Computerul preia datele RTSP DE LA camera IP și le retraduce ÎN VPS.
Aceasta este comanda ffmpeg pe care o folosesc pe computerul respectiv (re-streamer-ul, pot spune):
ffmpeg \
-rtsp_transport tcp \
-i rtsp://[adresa IP a camerei]:554/live\
-c:v copie \
-f rtsp \
-rtsp_transport tcp \
rtsp://[adresa IP a VPS-ului]:4445/live.sdp
Și aceasta este comanda pe care o folosesc pe VPS:
ffmpeg \
-rtsp_flags asculta \
-listen_timeout 5 \
-timeout 5000000 \
-rtsp_transport tcp \
-i rtsp://[adresa IP a VPS-ului]:4445/live.sdp \
-harta 0 \
-steaguri +antet_global \
-fflags +igndts \
-c:v copie \
-g 0 \
-b:v 125k \
-maxrate 250k \
-bufsize 500k \
-hls_time 1 \
-hls_list_size 15 \
-hls_wrap 15 \
-y /dev/shm/hls/video.m3u8
Totul funcționează bine până acum: pot citi fluxul HLS în browser și este destul de stabil și rapid. Problema apare atunci când conexiunea dintre re-streamer și VPS scade: trebuie să intru în VPS și să repornesc manual instanța ffmpeg. Este posibil să-i spuneți lui ffmpeg să „se blocheze” (sau pur și simplu să oprească procesul) atunci când nu vine nicio intrare pe -i
adresa (pe partea VPS-ului)? Folosesc un script bash care repornește automat procesul, așa că am avut grijă de asta.
Doar pentru a evita orice confuzie:
Conform documentația oficială a ffmpeg cel pauză
flag ia ca valoare MICROSECUNDE și listen_timeout
durează SECONDE. Am văzut o mulțime de postări în care oamenii se certau despre asta :)