2011-09-29 124 views
5

我已經使用AForge庫來製作這個小程序,它顯示了從網絡攝像頭到PictureBox的實時饋送。如何將IP攝像機流導入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 { } 
} 

但我還需要從IP攝像頭獲取流。任何想法什麼是最好的方式來獲得它?

回答

2

IP攝像機在Windows中沒有特定的媒體接口/ API,它們只是局域網上的設備。還有成千上萬的模型,它們不共享通用訪問接口(甚至關閉)。

所以首先,你必須具體關注你感興趣的模型。

另外一些供應商提供了將IP攝像機作爲多媒體設備(如「IP攝像機的DirectShow驅動程序」)提供的附加「驅動程序」。在大多數情況下,這些都是特定於供應商的,並不適用於其他相機。

下一個機會是,相機實現了一個衆所周知的流協議,在這種情況下,一些通用驅動程序也可能工作得很好。或者,只要你是C#人員,你可以檢查IP攝像機的HTTP/CGI API,並實現自己的代碼流式傳輸,通過與設備的HTTP/TCP/UDP連接發送和接收數據。

2

我曾與directShow.net library合作。它使您能夠訪問DirectShow的大部分功能,其中之一就是捕獲。如果您可以使用帶有DirectShow的ip攝像頭,則也可以在您的程序中使用它。

+0

+1的,因爲我在處理各種採集設備的商業軟件使用它 - 網絡攝像頭在他們之中。 –

12

與MJPEGStream解決它從同AForge.net :)

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

您是否將流顯示爲PictureBox控件? –

2

同樣的問題是與我喜歡你,那是我最後一年的項目開發或使用C#自定義IP攝像機解決方案。但是我通過瀏覽獲得任何用C#編寫的代碼,很容易訪問IP攝像機流,並且很快發現了第三方Ozeeki sdk,從而浪費了我大量的時間。但這一個是審判,並在一個星期內過期,也不會工作。或者Ozeeki只想爲他們的網站反向鏈接。 首先,您必須限制自己選擇相機之一。在我的情況下,我有一個HIkvision網絡攝像機。 只需從這裏下載海康威視攝像頭的設備網絡SDK: http://www.hikvision.com/en/us/download_more.asp?id=1482

提取它,你可以在SDK文件夾,4個個子文件夾中找到。 在「doc」文件夾中,您會看到「Device Network SDK編程手冊」 打開它並展開「編程指南」樹。 單擊主過程API參考或預覽模塊過程。在這裏你可以找到所有的路線圖你必須採取什麼步驟才能調用功能從相機獲取實時流。 所有功能的聲明都在「基本接口定義」樹中展開並逐一閱讀。 遊戲並沒有結束,但剛剛起步; 帶有所有功能的SDk都是用C/C++非託管代碼庫編寫的,並且不能添加到Manged C#項目解決方案參考中。所以你必須爲所有這些包裝器製作一個包裝器,用於從相機獲取流,並從c#中調用它們。只需通過文檔手冊瞭解它們的功能。 我在Twitter: https://twitter.com/CodingVampire 祝你祝您好運

+0

你是如何設法獲得可讀的SDK文檔的? – sivabudh