Le telecamere IP sono di qualità variabile, alcune si comportano in modo irregolare nella mia esperienza. Gestire i loro flussi RTSP richiede una dose di tolleranza agli errori.
Il progetto Live555 fornisce un'implementazione del client RTSP relativamente tollerante ai guasti, openRTSP, per estrarre i flussi audio/video RTSP via CLI: http://www.live555.com/openRTSP/
Ad esempio, per salvare l'audio/video RTSP di una telecamera in file in formato QuickTime (disponibili anche AVI e MP4), un file ogni 15 minuti:
$ openRTSP -D 1 -c -B 10000000 -b 10000000 -q -Q -F cam_eight -d 28800 -P 900 -t -u admin 123456 rtsp://192.168.1.108:554/11
Queste opzioni significano:
-D 1 # Quit if no packets for 1 second or more
-c # Continuously record, after completion of -d timeframe
-B 10000000 # Input buffer of 10 MB
-b 10000000 # Output buffer 10MB (to file)
-q # Produce files in QuickTime format
-Q # Display QOS statistics
-F cam_eight # Prefix output filenames with this text
-d 28800 # Run openRTSP this many seconds
-P 900 # Start a new output file every -P seconds
-t # Request camera end stream over TCP, not UDP
-u admin 123456 # Username and password expected by camera
rtsp://192.168.1.108:554/11 # Camera's RTSP URL
Rimuovendo l'opzione -t, openRTSP passa di default a UDP, il che può ridurre un po’ il traffico di rete. Dovrete giocare con le opzioni per trovare la combinazione che fa per voi.
Francamente, le telecamere stesse sono a volte inaffidabili, o semplicemente implementate diversamente - come la chiusura inaspettata del socket non è poi così insolita.
A volte il client openRTSP non cattura questi inconvenienti. Così ho optato per codificare un controller in Python usando il modulo ‘subprocessi’ per invocare e monitorare lo stdout di ogni istanza del client openRTSP, e anche controllare che i file continuino a crescere di dimensione.
Questo sembra essere un sottoprodotto della fascia bassa dell'industria CCTV che gioca veloce e sciolto con gli standard, RTSP e ONVIF sono i due più frequentemente abusati.
Fortunatamente, di solito è possibile aggirare questi problemi. A meno che le vostre telecamere IP e il controller siano progettati per giocare bene insieme, usate ONVIF solo per la scoperta e la gestione delle impostazioni una volta sola.
Io uso openRTSP su alcuni Raspberry Pi B+ con Raspbian. Ogni flusso 1280x1024 occupa circa l'8-10% del tempo della CPU, e ho eseguito con successo fino a otto telecamere per RPi, scrivendo i file su NAS. Un altro RPi elabora i file completati con ffmpeg, cercando il movimento e producendo indici PNG di quei fotogrammi, per aiutare a individuare le effrazioni.
C'è uno sforzo open-source chiamato ZoneMinder che fa quest'ultima parte, ma non sono riuscito a farlo funzionare con le mie telecamere. Il supporto ONVIF è nuovo e nascente in ZM, e non sembra affrontare bene i flussi RTSP discontinui prodotti dal mio serraglio di telecamere IP sotto i 100 dollari.