Paso 11: La cámara IP (parte 2) - Software
El programa de C# puede enviar comandos a la cámara y mostrar su flujo de video. Por defecto, las funciones de la cámara son desactivados en el inicio de la aplicación. Esto es para evitar accidentes de programa si la cámara no está disponible.
La cámara recibe órdenes a través de http. Por ejemplo, en secuencia de video en resolución 640 x 480, el comando es:
http://192.168.1.10/Videostream.cgi?User=Admin&pwd=&Resolution=32&Rate=0
Consulte la documentación del SDK de su cámara IP o manual de usuario para la estructura de mando. He unido la documentación para mi cámara para este paso. Estos comandos también se pueden introducir directamente en una barra de direcciones del navegador de Internet.
Una vez que la cámara obtiene el comando mostrado arriba, se iniciará enviando una secuencia de vídeo MJPEG. Mi programa procesa este arroyo y lo muestra en la interfaz gráfica. Fui capaz de encontrar las bibliotecas que procesan el flujo, así que me hizo mi propia función para hacerlo. La función funciona escaneando el contenido de la secuencia. Cuando encuentre el bytes de "Inicio de imagen" JPEG (bytes 0,1: 0xFF, 0xD8), comenzará a guardar la secuencia en una matriz de bytes independientes. Se sigue añadiendo el contenido de la secuencia en la matriz hasta que encuentra el bytes de "Fin de la imagen" JPEG (0xFF, 0xD9). Esta matriz de bytes se convierte entonces en un "memorystream", luego un mapa de bits, antes de finalmente se muestra en la interfaz gráfica.
El programa ofrece dos resoluciones de vídeo streaming. La mayor resolución (640 x 480) ofrece la mejor claridad, pero tiene una velocidad perceptiblemente más baja. La baja resolución (320 x 240) no es buena calidad de imagen, pero la mayor velocidad de fotogramas, es la mejor opción si conduciendo el coche por la cámara.
También hay un botón para mostrar una imagen fija. Esta funcionalidad se basa en un código que encontré en una página web (http://www.codeproject.com/Articles/15537/Camera-Vision-video-surveillance-on-C). Inicialmente, sólo la usé para depuración, haciendo mi funciones de streaming de video. Iba a sacarlo, pero decidió dejarlo en.
Puesto que la cámara tiene movimiento de pan/tilt en, también he añadido estas capacidades en el programa C#. El stick derecho en el controlador de Xbox ha sido asignado al control de la posición de la cámara (esta tarea de control es normalmente asignada a "free look" en XBox juegos de carreras). La cámara obtiene sus instrucciones de pan/tilt mediante comandos http. Por ejemplo, para mover la cámara hacia arriba, el comando es:
http://192.168.1.10/decoder_control.cgi?Command=0&User=Admin&pwd=
Hay comandos http separados para el motor arranque y parada. Para convertir movimiento en medibles "pasos", usé retrasos, por lo que cuando el stick se mueve dentro de un único controlador "marco", la cámara apenas mueve un paso. Sin embargo, los motores están lejos de exacto, así que estos pasos son muy inconsistentes en tamaño. Inicialmente quería incluyen una función de "regreso al centro" para la cámara, pero que debido a los tamaños de paso flojo, la cámara rara vez volvió a la posición central. (La función está todavía allí en el código fuente, pero no en uso).