2011-08-09 112 views
0

我有一個三星IP攝像頭,我想將它流入我的c#程序,但是當我運行該程序時,出現'無效參數'錯誤。IP攝像頭流式傳輸錯誤

private void button1_Click(object sender, EventArgs e) { while (true) {  

     string sourceURL = url; byte[] buffer = new byte[100000]; 
     int read, total = 0; 
     // create HTTP request 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sourceURL); 
     req.Credentials = new NetworkCredential("admin", "4321"); 
     // get response 
     WebResponse resp = req.GetResponse(); 
     // get response stream 
     Stream stream = resp.GetResponseStream(); 
     // read data from stream 
     while ((read = stream.Read(buffer, total, 1000)) != 0) 
     { 
      total += read; 
     } 

     Bitmap bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer, 0, total)); 
     pictureBox1.Image = bmp; 
    } 
} 

可能是什麼問題?

+0

準確地拋出異常的線在哪裏? –

+2

智能檢查:我們如何知道你在哪裏得到錯誤?魔法?從我們的咖啡杯讀書?請指出錯誤發生的確切位置。 – TomTom

+0

我們喜歡一個很好的謎題。像'//創建HTTP請求'這樣的評論確實幫助我們解決了您的緊急謎題。 – Filburt

回答

0

猜測(因爲你不指示錯誤)是圖像已經超過10萬個字節,其中你的代碼不處理的。我想,而不是:

byte[] buffer = new byte[10 * 1024]; 
... 
using(var ms = new MemoryStream()) 
{ 
    // read everything in the stream into ms 
    while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     ms.Write(buffer, 0, read); 
    } 
    // rewind and load the bitmap 
    ms.Position = 0; 
    Bitmap bmp = (Bitmap)Bitmap.FromStream(ms); 
    pictureBox1.Image = bmp; 
} 
+0

位圖bmp =(位圖)Bitmap.FromStream(ms);相同的錯誤消息(參數無效)在該行中 – user885382

+0

@user數據的格式是什麼?它是否被指定? –

+0

即時通訊不知道它是什麼格式。我只是想讓我的應用程序的IP攝像頭屏幕。你有沒有任何示例代碼來做到這一點? – user885382

1

您還沒有建立正確的緩衝區,你每次都重寫舊緩衝區以新的緩衝區,而有新的數據,想法解決它:

List<byte> fullData = new List<Byte>(); 

while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)//also > 0 not == 0 because of it can be -1 
{ 
    fullData.AddRange(new List<Byte>(buffer).GetRange(0, read));//only add the actual data read 
} 

byte[] dataRead = fullData.ToArray(); 

Bitmap bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(dataRead , 0, dataRead.Lenght)); 
+0

我仍然在位圖中得到相同的錯誤bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer,0,total));(參數無效) – user885382

+0

您是否嘗試過我貼出的代碼Bitmap bmp =(Bitmap)Bitmap.FromStream(new MemoryStream(dataRead, 0,dataRead.Lenght));'? –

+0

是的,我做了同樣的錯誤,你有任何示例代碼來從IP攝像機流視頻嗎? – user885382

0

還挺相對於問題時間的晚回答;然而,因爲我追捕類似的問題,這顯然沒有得到答覆,我將我的兩分錢......

這裏有兩個問題,我看到它:

第一:

您不希望將按鈕單擊的事件處理程序放入無限循環中。這應該可能是某種類型的線程,以便事件處理程序可以返回。

二:

正如另一條評論中提到,你的代碼期待的迴應是某種類型的原始圖像,並且最有可能並非如此。您的相機可能最終會發送MJPG,但這並不意味着它會生。有時你必須將其他命令發送到相機,然後當你真正開始獲取MJPG流時,必須先解析它並提取標題,然後才能將圖像的一部分發送到某個picturebox。你可能會得到某種來自相機的html響應(就像我),並且當你試圖將數據傳遞給期望數據爲某種圖像格式(可能爲JPEG)的方法時,則會得到無效參數錯誤。

不能說我知道如何解決問題,因爲它取決於相機。如果這些相機有某種標準接口,我一定會想知道它是什麼!無論如何,HTH ......

相關問題