Ich habe die Bewegungserkennung bei der 6012 getestet:
- einen Bereich definiert
- diesen aktiv geschaltet
- eingestellt, daß Video-Sequenzen bei Bewegungserkennung auf die SD-Karte gespeichert werden sollen
Zunächst funktioniert das: Bewegung wird erkannt, Video wird gespeichert. Insgesamt werden manchmal 4 Sekunden Video gespeichert; manchmal sind es auch über 10 Sekunden.
Spiele ich nun eines der aufgezeichneten AVIs mit VLC ab, sehe ich zunächst ca. 2 Sekunden „Dunkel“ - dann setzt auf einmal das Bild ein. Gerade bei schnellen Objekten im Sichtfeld ist das deutlich zu spät - oft sehe ich das Objekt dann gar nicht mehr, welches den Alarm ausgelöst hat…
Ich vermute, daß die Kamera bei einem Alarm einfach den aktuellen Videodatenstrom abgreift und speichert. Zufälligerweise kann die Alarmaufzeichnung zu einem Moment beginnen, an dem gerade ein Keyframe erzeugt wurde - es aber schon „vorbei“ ist (also nicht mehr zum Speichern zur Verfügung steht). Hat man die „Keyframe all XX Frames“ Einstellung dann z.B. auf den Werks-seitigen „50“, dauert es bei 25 fps bis zu 2 Sekunden, bis die Aufnahme brauchbar wird. Bei geringeren fps-Raten noch länger.
Der Prozess, welcher das H.264 Encoding macht - ich vermute, die Hardware (Hi 3510?) - weiß scheinbar nichts von einem Alarm - und macht deshalb auch kein zusätzliches Key Frame an den Anfang der Alarmaufzeichnung…
Sollte die Bewegungserkennung (zusätzlich zum H.264 Encoding) auch von der Hardware gemacht werden, halte ich dies für einen „Designfehler“ des SoC… Der „weiß“ intern ja vom Alarm … und müsste ein außerplanmäßiges Key Frame generieren.
Ich habe dann die Einstellung testweise auf „alle 5 Frames ein Key Frame“ gestellt … und… voilà: die Aufzeichnungen sind durchweg von Anfang an brauchbar.
Im Werks-Lieferzustand stehen übrigens alle 3 Video-Streams auf „Key frame alle 50 frames“. Sicherlich eine sinnvolle Einstellung - soll ja Bandbreite reduzieren. Insbesondere wenn man Areale überwacht, in denen Minuten/Stunden-lang keinerlei oder nur geringe Veränderungen im Bild sind, macht es keinen Sinn, alle 5 Frames ein Key-Frame zu generieren. Gerade hier soll ja H.264 seine Vorteile (nur Codierung der Differenz zwischen 2 Frames) im Vergleich zu MJPEG ausspielen.
Ein dauerndes Herabsetzen auf 5 oder noch weniger Frames pro Key Frame ist also keine Lösung.
Eine mögliche Lösung wäre: Eine Design-Änderung des SoC (sofern dieser die Bewegungserkennnung macht) oder der Kamera-Software (sofern dies die Bewegungen erkennt). Allerdings ist das eher ein Zukunftsthema (es sei denn, der SoC verfügt über eine Art ladbaren (Mikro-)Code und diese Designänderung wäre damit nachträglich möglich).
Eine schnellere Lösung könnte evtl. durch die Kamera-Software erfolgen:
Die puffert scheinbar den Video-Datenstrom … oder müsste ihn puffern … und wenn der SoC einen Alarm meldet (oder die Kamera-Software ihn selbst durch Bildanalyse feststellt), müsste einfach ein längerer Vorlauf aufgezeichnet werden.
Die Kamera-Software kennt ja die aktuellen Einstellungen bzgl. Key-Frames und Frame-Rate … Der Vorlauf muss dann einfach nach folgender Formel berechnet werden:
fps-Einstellung (Frames/Sekunde) / Key-frame-Einstellung = Sekunden Vorlauf (Minimum).
Dazu noch einen Sicherheitszuschlag von 10 Frames oder besser gleich 1-2 Sekunden …
—> Liege ich mit meiner Theorie zum Problem richtig?
Neo