IP-Kameras sind von unterschiedlicher Qualität, einige verhalten sich meiner Erfahrung nach unregelmäßig. Der Umgang mit ihren RTSP-Streams erfordert eine Dosis Fehlertoleranz.
Das Live555-Projekt bietet eine relativ fehlertolerante RTSP-Client-Implementierung, openRTSP, zum Abrufen von RTSP-Audio- / Videostreams über die CLI: http://www.live555.com/openRTSP/
Um beispielsweise das RTSP-Audio / Video einer Kamera in Dateien im QuickTime-Format (auch AVI und MP4 verfügbar) zu speichern, muss alle 15 Minuten eine Datei erstellt werden:
$ 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 führt dazu, dass openRTSP stattdessen standardmäßig UDP verwendet, was den Netzwerkverkehr etwas reduzieren kann. Sie müssen mit den Optionen spielen, 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 der Steckdose gar nicht so ungewöhnlich ist.
Manchmal erkennt der openRTSP-Client diese Störungen nicht. Daher habe ich mich dafür entschieden, einen Controller in Python mit dem Modul 'subprocesses' zu codieren, um die Standardausgabe jeder openRTSP-Clientinstanz aufzurufen und zu überwachen und um zu überprüfen, ob die Dateien weiterhin an Größe zunehmen.
Dies scheint ein Nebenprodukt des unteren Bereichs der Videoüberwachungsbranche zu sein, der schnell und locker mit Standards spielt, wobei RTSP und ONVIF die beiden am häufigsten missbrauchten sind.
Glücklicherweise können Sie diese Probleme normalerweise umgehen. Verwenden Sie ONVIF nur für die einmalige Erkennung und Verwaltung von Einstellungen, es sei denn, Ihre IP-Kameras und der Controller sind so konzipiert, dass sie gut zusammenspielen.
Ich benutze openRTSP auf ein paar Raspberry Pi B + mit Raspbian. Jeder 1280x1024-Stream belegt ungefähr 8-10% der CPU-Zeit, und ich habe erfolgreich bis zu acht Kameras pro RPi ausgeführt und die Dateien in den NAS-Speicher geschrieben. Ein anderes RPi verarbeitet fertige Dateien mit ffmpeg, sucht nach Bewegungen und erzeugt Index-PNGs dieser Frames, um das Erkennen von Einbrüchen zu unterstützen.
Es gibt einen Open-Source-Versuch namens ZoneMinder, der diesen letzteren Teil erledigt, aber ich konnte ihn nicht mit meinen Kameras zum Laufen bringen. Die ONVIF-Unterstützung ist neu und in ZM im Entstehen begriffen, und sie scheint mit den fleckigen RTSP-Streams, die meine Menagerie von IP-Kameras unter 100 US-Dollar produziert, nicht gut zurechtzukommen.