Etape 11 : Caméra IP (partie 2) - logiciels
Le programme c# peuvent Envoyer des commandes à la caméra et d’afficher le flux vidéo. Par défaut, les fonctions de l’appareil sont désactivées sur le démarrage de l’application. Ceci permet d’éviter les plantages du programme si la caméra n’est pas disponible.
La caméra reçoit les commandes via http. Par exemple, au flux vidéo en résolution 640 x 480, la commande est :
http://192.168.1.10/Videostream.cgi?User=Admin&pwd=&Resolution=32&rate=0
Reportez-vous à la documentation du SDK de votre caméra IP ou manuel de l’utilisateur pour la structure de commandement. J’ai joint la documentation pour mon appareil photo à cette étape. Ces commandes peuvent également être saisis directement dans une barre d’adresse de navigateur Internet.
Une fois la caméra obtient la commande ci-dessus, il commencera envoie un flux vidéo MJPEG. Mon programme traite ce flux et l’affiche dans l’interface GUI. Je n’étais pas en mesure de trouver toutes les bibliothèques qui traitent le flux, donc j’ai fait ma propre fonction de le faire. La fonction fonctionne en analysant le contenu du flux. Quand il trouve le octets de « Début d’Image » JPEG (octets 0,1 : 0xFF, 0xD8), il va commencer à enregistrer le flux de données dans un tableau d’octets séparés. Il va continuer à ajouter le contenu de flux dans le tableau jusqu'à ce qu’il trouve le octets de « Fin de l’Image » JPEG (0xFF, 0xD9). Ce tableau d’octets est ensuite transformé en « memorystream », puis un fichier bitmap, avant d’être finalement affichées sur l’interface graphique.
Le programme offre deux résolutions de streaming vidéo. La plus haute résolution (640 x 480) offre la meilleure clarté, mais a une cadence sensiblement plus bas. La plus basse résolution (320 x 240) n’est pas bonne pour la qualité de l’image, mais la cadence supérieure rend le meilleur choix si vous conduisez la voiture de caméra.
Il y a également un bouton pour afficher une image fixe. Cette fonctionnalité s’appuie sur un code que j’ai trouvé sur un site Web (http://www.codeproject.com/Articles/15537/Camera-Vision-video-surveillance-on-C). Au départ, je l’ai seulement utilisé pour le débogage, lors de ma vidéo en streaming de fonctions. J’allais pour l’enlever, mais a décidé de le laisser en.
Puisque la caméra a mouvement pan/tilt construit en, j’ai aussi ajouté ces fonctionnalités dans le programme c#. Le stick analogique droit sur le contrôleur de Xbox a reçu pour le contrôle de la position de la caméra (cette mission de contrôle est généralement attribuée à "regard libre" dans XBox jeux de course). La caméra reçoit ses instructions panoramique/inclinaison des commandes http. Par exemple, pour déplacer la caméra vers le haut, la commande est :
http://192.168.1.10/decoder_control.cgi?Command=0&User=Admin&pwd=
Il y a des commandes http distinct pour moteur start et stop. Pour convertir un mouvement en mesurables « étapes », j’ai utilisé des retards, afin que lorsque le joystick est déplacé au sein d’un seul contrôleur « frame », la caméra bouge juste une étape. Cependant, les moteurs sont loin d’être précis, ces étapes sont très incompatibles dans la taille. Je voulais initialement disposent d’une fonction « retour vers le centre » pour la caméra, mais constaté qu’en raison de la taille d’étape bancal, la caméra revient rarement en position centrale. (La fonction est toujours là dans le code source, mais ne l’utilisez pas).