2011-09-29 81 views
5

He utilizado la biblioteca AForge para hacer este pequeño programa, que muestra información en tiempo real desde una cámara web en un PictureBox.¿Cómo obtener una secuencia de cámara IP en C#?

private FilterInfoCollection VideoCaptureDevices; 
private VideoCaptureDevice FinalVideoDevice; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); 
    try 
    { 
     foreach (FilterInfo VidCapDev in VideoCaptureDevices) 
     { 
     comboBox1.Items.Add(VidCapDev.Name); 
     comboBox1.SelectedIndex = 0; 
     } 
     FinalVideoDevice = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString); 
     FinalVideoDevice.NewFrame += new NewFrameEventHandler(FinalVideoDevice_NewFrame); 
     FinalVideoDevice.Start(); 
    } 
    catch 
    { 
     MessageBox.Show("No camera found. Please connect your camera and click RESET."); 
    } 
} 

     ////////////////////////////////////////////////////////////////////////////////////////// 

void FinalVideoDevice_NewFrame(object sender, NewFrameEventArgs e) 
{ 
    try 
    { 
     pictureBox1.Image = (Bitmap)e.Frame.Clone(); 
    } 
    catch { } 
} 

Pero también necesito obtener un flujo de una cámara IP. ¿Alguna idea de cuál sería la mejor manera de obtenerla?

Respuesta

2

Las cámaras IP no tienen interfaces/interfaces multimedia específicas en Windows, solo son dispositivos en LAN. También hay cientos y miles de modelos y no comparten interfaces de acceso común (incluso cerca).

Por lo tanto, antes que nada, debe ser específico sobre el modelo que le interesa.

También algunos proveedores ofrecen "controladores" adicionales que exponen las cámaras IP como dispositivos multimedia, como "controlador DirectShow para cámara IP". En la mayoría de los casos, estos son específicos del proveedor y no funcionarán con otras cámaras.

La próxima oportunidad es que la cámara implementa un protocolo de transmisión conocido, en cuyo caso, un controlador genérico también podría funcionar bien.

O, siempre que sea C# chico, puede verificar la API HTTP/CGI de la cámara IP e implementar la transmisión en código, enviando y recibiendo datos a través de una conexión HTTP/TCP/UDP con el dispositivo.

2

Una vez trabajé con el directShow.net library. Le da acceso a la mayoría de las funciones de DirectShow y una de ellas es Capturar. Si puede usar la cámara web ip con DirectShow, también puede usarla en su programa.

+0

1 como lo uso en software comercial que se encarga de todo tipo de dispositivos de captura - webcams se encuentran entre ellos. –

12

lo resolvió con MJPEGStream de la misma AForge.net :)

MJPEGStream stream = new MJPEGStream("http://192.168.2.5:8080/videofeed"); 
      stream.NewFrame += new NewFrameEventHandler(video_NewFrame); 
      stream.Start(); 
+4

¿muestra el flujo en un PictureBox Control? –

2

El mismo problema estaba conmigo como tú, y esa fue mi proyecto final de año para desarrollar o personalizar las soluciones para cámaras IP utilizando C#. Pero perdí mucho tiempo haciendo búsquedas para obtener cualquier código escrito en C# que pueda acceder fácilmente a la transmisión de la cámara IP, y muy pronto encontré Ozeeki SDK. Pero esta es la versión de prueba y expira cerca de una semana y tampoco funcionará. O tal vez Ozeeki quiera solo Backlinks para su sitio. Antes que nada, debe limitarse a seleccionar una de las cámaras. En mi caso, tengo una cámara de red HIkvision. sólo tiene que descargar el SDK de dispositivos de red para la cámara de Hikvision desde aquí: http://www.hikvision.com/en/us/download_more.asp?id=1482

extraerlo y es posible que se encuentran en la carpeta SDK, 4 subcarpetas. Dentro de la carpeta "doc", encontrará "Device Network SDK Programming Manual" Ábralo y expanda el árbol "Guía de programación". Haga clic en la Referencia de la API de procedimiento principal o en el procedimiento de Módulo de vista previa. Aquí encontrará toda la hoja de ruta qué pasos debe seguir para llamar a las funciones y obtener una transmisión en vivo desde la cámara. La declaración de todas las funciones está dentro del árbol de "Definición de interfaz básica", amplíelo y léalas todas una a una. El juego no ha terminado aquí, pero acaba de empezar; La SDk con todas las funciones está escrita en C/C++ base de código no administrado. Y no se puede agregar en una solución de proyecto Manged C# Referencias. Así que debes crear un contenedor para todos los que se usan para obtener una transmisión de la cámara, y llamarlos desde C#. Solo revisa el manual de documentación sobre qué funciones son. sígueme en twitter: https://twitter.com/CodingVampire le deseo mejor de la suerte

+0

¿Cómo se las arregló para obtener un documento SDK legible? – sivabudh

Cuestiones relacionadas