Ich habe ein paar IP-Kameras, die einen RTSP-Stream (h264 mpeg4) ausgeben.
Lokaler Zugriff auf die URL über VLC: rtsp: //192.168.0.21: 554 / mpeg4
Ich kann die Kamera streamen und auf die Festplatte (auf meinem Desktop) kopieren. Ich möchte diese Dateien jedoch auf meinem NAS (FreeNAS) speichern. Ich habe nach Möglichkeiten gesucht, den RTSP-Stream zu erfassen und auf die Festplatte zu kopieren, aber ich kann nichts finden.
Ist es möglich, den Stream unter FreeBSD oder Linux (RaspberryPi) zu erfassen und den gestreamten Inhalt auf eine für Linux oder FreeBSD lokale Festplatte zu kopieren - vorzugsweise alle 30 Minuten?
BEARBEITEN: Das NAS ist kopflos (HP N55L oder so) und die RaspberryPi's sind auch kopflos.
Ich habe bereits in ZoneMinder gesucht, brauche aber etwas Kleines. Ich hatte gehofft, Motion verwenden zu können, um Bewegungen im Stream zu erkennen, aber das wird später kommen.
Antworten:
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:
Diese Optionen bedeuten:
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.
quelle
Ich dachte nur, ich würde meine zwei Cent hinzufügen und Björns Antwort ergänzen.
Anstatt einen Cron-Job auszuführen, um den VLC-Prozess regelmäßig abzubrechen, könnte man VLC anweisen, für eine bestimmte Zeitspanne auszuführen und anschließend zu schließen.
Dies ist der Befehl, den ich auf meiner Box ausführe:
Dadurch wird VLC für die angegebene Zeit ausgeführt und später beendet. Der Parameter vlc: // quit ist erforderlich, da VLC die Aufzeichnung beenden und geöffnet bleiben würde. Dieser Befehl muss in einer Schleife platziert werden.
Das einzige Problem, das ich bisher festgestellt habe, ist, dass es bei jedem Start einer neuen Aufnahme einige Sekunden dauern kann.
quelle
Wenn ich Ihrer Frage richtig folge, warum versuchen Sie nicht den folgenden Befehl auf einem Linux-System (RPi):
Dadurch sollte das Video in Abschnitten von 300 Sekunden gespeichert werden. (Beachten Sie, dass die Länge des Clips von Ihren Eingangs- und Ausgangsbildraten abhängt.)
quelle
VLC scheint ein idealer Kandidat für die Verarbeitung Ihres Streams zu sein. Grundlegende Methoden zum Erfassen eines Streams sind auf der Videolan-Website beschrieben. Ich habe die Ausgabe meiner D-Link DCS-5222-Netzwerkkamera mit dem folgenden Befehl erfolgreich aufgezeichnet:
In Ihrem Fall funktioniert dies möglicherweise, um die Ausgabe lokal zu speichern:
Ich würde vorschlagen, ein Skript auszuführen, das diesen vlc-Prozess beendet und alle 30 Minuten eine neue Instanz startet, da ich nicht sicher bin, ob VLC dazu in der Lage ist.
Wenn Sie auf einem NAS speichern möchten, hängen Sie ihn einfach in Ihr lokales Dateisystem ein.
quelle