2011-09-29 18 views
5

Ho usato la libreria di AForge per realizzare questo piccolo programma, che mostra i feed dal vivo da una webcam in un PictureBox.Come ottenere un flusso di telecamere IP in 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 { } 
} 

Ma ho anche bisogno di ottenere un flusso da una telecamera IP. Qualche idea quale sarebbe il modo migliore per ottenerlo?

risposta

2

Le telecamere IP non hanno interfacce/API multimediali specifiche in Windows, sono solo dispositivi su LAN. Inoltre ci sono centinaia e migliaia di modelli e non condividono le interfacce di accesso comuni (anche vicino).

Quindi, prima di tutto, devi essere specifico sul modello di tuo interesse.

Anche alcuni fornitori forniscono "driver" aggiuntivi che espongono le telecamere IP come dispositivi multimediali, come "Driver DirectShow per telecamera IP". Nella maggior parte dei casi questi sono specifici del fornitore e non funzioneranno con altre fotocamere.

La prossima possibilità è che la fotocamera implementa un protocollo di streaming ben noto, nel qual caso alcuni driver generici potrebbero funzionare bene pure.

Oppure, finché sei C# guy, puoi controllare l'API HTTP/CGI della telecamera IP e implementare lo streaming te stesso nel codice, inviare e ricevere dati tramite connessione HTTP/TCP/UDP con il dispositivo.

2

Una volta ho lavorato con lo directShow.net library. Ti dà accesso alla maggior parte delle funzioni di DirectShow e una di queste è Cattura. Se è possibile utilizzare la webcam ip con DirectShow, è possibile utilizzarlo anche nel programma.

+0

uno come io lo uso in software commerciale che gestisce tutti i tipi di dispositivi di cattura - webcam che sono in mezzo a loro. –

12

risolto con MJPEGStream dalla stessa AForge.net :)

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

Visualizzi il flusso in un controllo PictureBox? –

2

Lo stesso problema era con me come te, e che è stato il mio ultimo anno di progetto per sviluppare o personalizzare le soluzioni per telecamere IP utilizzando C#. Ma ho sprecato molto tempo facendo la navigazione per ottenere qualsiasi pezzo di codice scritto in C# che possa facilmente accedere allo streaming della telecamera IP, e ho trovato molto presto la terza parte di Ozeeki sdk. Ma questo è il processo e scade vicino a una settimana e non funzionerà anche. O forse Ozeeki vuole solo un backlink per il loro sito. Prima di tutto devi limitarti a selezionare una delle telecamere. Nel mio caso ho una telecamera di rete HIkvision. Basta scaricare l'SDK dispositivo di rete per la macchina fotografica Hikvision da qui: http://www.hikvision.com/en/us/download_more.asp?id=1482

estrarlo e si può trovare nella cartella SDK, 4 sottocartelle. All'interno della cartella "doc", troverete "Device Network SDK Programming Manual" Aprirlo ed espandere la struttura "Programming Guideline". Fare clic su Riferimento dell'API della procedura principale o Procedura del modulo di anteprima. Qui troverai tutte le mappe stradali per sapere quali passaggi devi seguire per chiamare le funzioni per ottenere streaming dal vivo dalla telecamera. La dichiarazione di tutte le funzioni si trova all'interno dell'albero "Definizione interfaccia di base" espanderla e leggerle tutte una alla volta. Il gioco non è finito qui, ma ha appena avuto un inizio; L'SDK con tutte le funzioni è scritto in codice C/C++. Codice non gestito. E non può essere aggiunto in una soluzione di progetto Manged C# Riferimenti. Quindi devi creare un wrapper per tutti quelli che vengono utilizzati per ottenere un flusso dalla videocamera e chiamarli da C#. Basta consultare il manuale della documentazione su quali funzioni sono. seguirmi su Twitter: https://twitter.com/CodingVampire si desidera Buona fortuna

+0

Come sei riuscito a ottenere un documento SDK leggibile? – sivabudh