IP-Kameras sind von unterschiedlicher Qualität, einige verhalten sich meiner Erfahrung nach erratisch. Der Umgang mit ihren RTSP-Streams erfordert ein gewisses Maß an Fehlertoleranz.
Das Live555-Projekt bietet eine relativ fehlertolerante RTSP-Client-Implementierung, openRTSP, zum Abrufen von RTSP-Audio-/Videoströmen über CLI: http://www.live555.com/openRTSP/
Um beispielsweise das RTSP-Audio/Video einer Kamera in Dateien im QuickTime-Format (AVI und MP4 sind ebenfalls verfügbar) zu speichern, eine Datei alle 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
Diese Optionen bedeuten:
-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
Das Entfernen der Option -t bewirkt, dass openRTSP stattdessen UDP verwendet, was den Netzwerkverkehr ein wenig reduzieren kann. Sie werden mit den Optionen spielen müssen, um die für Sie passende Kombination zu finden.
Ehrlich gesagt, sind die Kameras selbst manchmal unzuverlässig oder einfach anders implementiert - wie das unerwartete Schließen des Sockets ist nicht so ungewöhnlich.
Manchmal fängt der openRTSP-Client diese Pannen nicht ab. Deshalb habe ich mich entschieden, einen Controller in Python zu programmieren, der das Modul ‘subprocesses’ verwendet, um das stdout jeder openRTSP-Client-Instanz aufzurufen und zu überwachen, und auch zu überprüfen, ob die Dateien weiter wachsen.
Dies scheint ein Nebenprodukt der CCTV-Industrie zu sein, die mit Standards spielt, wobei RTSP und ONVIF die beiden am häufigsten missbrauchten sind.
Glücklicherweise können Sie diese Probleme normalerweise umgehen. Sofern Ihre IP-Kameras und Ihr Controller nicht so konzipiert sind, dass sie gut zusammenspielen, sollten Sie ONVIF nur für die einmalige Erkennung und Verwaltung der Einstellungen verwenden.
Ich verwende openRTSP auf ein paar Raspberry Pi B+ mit Raspbian. Jeder 1280x1024-Stream beansprucht etwa 8-10% der CPU-Zeit, und ich habe erfolgreich bis zu acht Kameras pro RPi betrieben und die Dateien auf einen NAS-Speicher geschrieben. Ein anderer RPi verarbeitet die fertigen Dateien mit ffmpeg, sucht nach Bewegung und erzeugt Index-PNGs dieser Bilder, um bei der Erkennung von Einbrechern zu helfen.
Es gibt ein Open-Source-Projekt namens ZoneMinder, das diesen letzten Teil übernimmt, aber ich konnte es mit meinen Kameras nicht zum Laufen bringen. Die ONVIF-Unterstützung in ZM ist neu und im Entstehen begriffen, und es scheint nicht gut mit den sporadischen RTSP-Streams zurechtzukommen, die von meiner Menagerie von IP-Kameras unter 100 Dollar produziert werden.