IP camera’s zijn van wisselende kwaliteit, sommige gedragen zich onregelmatig naar mijn ervaring. Het omgaan met hun RTSP streams vereist een dosis fout-tolerantie.
Het Live555 project biedt een relatief fouttolerante RTSP client implementatie, openRTSP, voor het ophalen van RTSP audio/video streams via CLI: http://www.live555.com/openRTSP/
Bijvoorbeeld, om de RTSP audio/video van een camera op te slaan in bestanden in QuickTime formaat (AVI en MP4 zijn ook beschikbaar), één bestand elke 15 minuten:
$ 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
Deze opties betekenen:
-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
Het verwijderen van de -t optie zorgt ervoor dat openRTSP standaard op UDP overschakelt, wat het netwerkverkeer een beetje kan verminderen. U zal met de opties moeten spelen om de combinatie te vinden die u bevalt.
Eerlijk gezegd zijn de camera’s zelf soms onbetrouwbaar, of gewoon anders geïmplementeerd -zoals het onverwacht sluiten van de socket is niet zo ongewoon.
Soms vangt de openRTSP client deze glitches niet op. Dus heb ik ervoor gekozen om een controller in Python te coderen die de ‘subprocesses’ module gebruikt om de stdout van elke openRTSP client instantie aan te roepen en te monitoren, en ook te controleren of de bestanden in grootte blijven groeien.
Dit lijkt een bijproduct te zijn van de low-end van de CCTV-industrie die snel en losjes met standaarden speelt, waarbij RTSP en ONVIF de twee meest misbruikte zijn.
Gelukkig kun je meestal om deze problemen heen werken. Tenzij uw IP-camera’s en controller allemaal ontworpen zijn om prettig samen te werken, gebruikt u ONVIF alleen voor eenmalige ontdekking en instellingenbeheer.
Ik gebruik openRTSP op een paar Raspberry Pi B+ met Raspbian. Elke 1280x1024 stream neemt ongeveer 8-10% van de tijd van de CPU in beslag, en ik heb met succes tot acht camera’s per RPi gedraaid, waarbij de bestanden naar NAS opslag werden geschreven. Een andere RPi verwerkt de voltooide bestanden met ffmpeg, zoekt naar beweging en produceert index PNGs van die frames, om te helpen bij het opsporen van inbrekers.
Er is een open-source initiatief genaamd ZoneMinder dat dit laatste deel doet, maar ik was niet in staat om het werkend te krijgen met mijn camera’s. ONVIF ondersteuning is nieuw en ontluikend in ZM, en het lijkt niet goed overweg te kunnen met de vlekkerige RTSP streams die geproduceerd worden door mijn menagerie van onder de $100 IP camera’s.