Schritt 11: IP-Kamera (Teil 2) - Software
Das c#-Programm können Senden von Befehlen an die Kamera und zeigt ihre video-Stream. Standardmäßig sind die Funktionen der Kamera am Start der Anwendung deaktiviert. Dies soll Programmabstürze zu verhindern, wenn die Kamera nicht verfügbar ist.
Die Kamera erhält Befehle über http. Beispielsweise ist bei einer Auflösung von 640 x 480 video-Stream, der Befehl:
http://192.168.1.10/Videostream.CGI?User=Admin&pwd=&Resolution=32&Rate=0
Finden Sie Ihre IP-Kamera-SDK-Dokumentation oder Benutzerhandbuch für die Kommandostruktur. Ich habe die Dokumentation für meine Kamera zu dieser Schritt beigefügt. Diese Befehle können auch direkt in eine Internet-Browser-Adressleiste eingegeben werden.
Sobald die Kamera den Befehl oben gezeigt wird, wird es anfangen, eine MJPEG-video-Stream aussenden. Mein Programm verarbeitet diesen Stream und zeigt es in der GUI. Ich war nicht in der Lage, alle Bibliotheken zu finden, die den Stream so verarbeiten ich machte meine eigene Funktion zu tun. Die Funktion arbeitet durch Scannen den Inhalt des Streams. Wenn es findet die JPEG "Start des Bildes" Byte (Byte 0,1: 0xFF, 0xD8), es startet den Stream in einem separaten Byte-Array speichern. Es werden laufend hinzufügen den Stream-Inhalt in das Array bis es findet die JPEG "Am Ende des Bildes" Bytes (0xFF, 0xD9). Dieses Byte-Array wird dann in eine "Memorystream", dann ein Bitmap umgewandelt, bevor Sie schließlich auf der grafischen Benutzeroberfläche angezeigt werden.
Das Programm bietet zwei video-Streaming-Lösungen. Je höhere die Auflösung (640 x 480) bietet die bessere Klarheit, sondern hat eine deutlich niedrigere Framerate. Die geringere Auflösung (320 x 240) ist nicht gut für die Bildqualität, aber die höhere Bildrate macht es die bessere Wahl, wenn das Auto von Kamera zu fahren.
Außerdem gibt es eine Taste, um ein Standbild zu zeigen. Diese Funktionalität basiert auf Code fand ich auf einer Website (http://www.codeproject.com/Articles/15537/Camera-Vision-video-surveillance-on-C). Anfangs habe ich es nur für debugging-Zwecke, wenn Sie mein Video-Streaming-Funktionen. Ich wollte es zu entfernen, aber beschlossen, es zu verlassen.
Da die Kamera Schwenk/Neige -Bewegung gebaut hat, habe ich auch diese Funktionen in c#-Programm. Den rechten Analogstick auf dem Xbox-Controller wurde die Kontrolle über die Position der Kamera versehen (diese Kontrolle-Zuordnung ist in der Regel "freien Blick" XBox zugewiesen in Rennspielen). Die Kamera bekommt seine Schwenk/Neige-Anweisungen per HTTP-Befehle. Zum Beispiel, wenn die Kamera wechseln möchten, ist der Befehl:
http://192.168.1.10/decoder_control.CGI?Command=0&User=Admin&pwd=
Es gibt separate HTTP-Befehle für motor starten und stoppen. Um Bewegung in messbare "Schritte" zu konvertieren, benutzte ich Verzögerungen, so dass wenn der Analogstick innerhalb einer einzigen Controller "Frame" verschoben wird, nur einen Schritt bewegt sich die Kamera. Allerdings sind die Motoren weit präzise, so dass diese Schritte in der Größe sehr uneinheitlich sind. Zunächst wollte ich auch eine "return to Center" Funktion für die Kamera, aber festgestellt, dass aufgrund der wonky Schrittweiten die Kamera selten in die Mittelstellung zurück. (Die Funktion ist immer noch da in den Source-Code, aber nicht in Gebrauch).