Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IP摄像机流错误_C# - Fatal编程技术网

C# IP摄像机流错误

C# IP摄像机流错误,c#,C#,我有一个三星IP摄像头,我想把它传输到我的c#程序中,但当我运行该程序时,我得到了“无效参数”错误 private void button1_Click(object sender, EventArgs e) { while (true) { string sourceURL = url; byte[] buffer = new byte[100000]; int read, total = 0; // create HTTP re

我有一个三星IP摄像头,我想把它传输到我的c#程序中,但当我运行该程序时,我得到了“无效参数”错误

 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;
    }
}
可能是什么问题?

我猜(因为您没有指出错误)图像已经超过100000字节,您的代码根本无法处理。相反,我会:

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;
}

您没有构建正确的缓冲区,每次有新数据时,您都会用新缓冲区覆盖旧缓冲区,请注意:

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));
List fullData=new List();
而((read=stream.read(buffer,0,buffer.Length))>0)//也>0不==0,因为它可以是-1
{
fullData.AddRange(新列表(缓冲区).GetRange(0,读取));//仅添加实际读取的数据
}
字节[]dataRead=fullData.ToArray();
位图bmp=(位图)Bitmap.FromStream(新内存流(dataRead,0,dataRead.Lenght));

相对于问题的时间,回答有点晚;然而,由于我正在寻找类似的问题,而这显然还没有得到回答,我正在添加我的两分钱

在我看来,这里有两个问题:

第一:

您不希望将按钮单击的事件处理程序放入无休止的循环中。这可能是某种类型的线程,以便事件处理程序可以返回

第二:

正如在另一条评论中提到的,您的代码期望响应是某种类型的原始图像,很可能不是。你的相机最终可能会发送MJPG,但这并不意味着它是原始的。有时,您必须向相机发送其他命令,然后当您实际开始获取MJPG流时,您必须在将图像部分发送到某个picturebox之前对其进行解析并提取标题。您可能会从相机(就像我一样)获得某种html响应,当您尝试将该数据传递给希望数据是某种图像格式(可能是JPEG)的方法时,您会得到无效参数错误


不能说我知道如何解决这个问题,因为这取决于相机。如果这些相机有某种标准接口,我肯定想知道它是什么!无论如何,嗯…

抛出异常的那一行到底在哪里?情报检查:我们怎么知道你是从哪里得到错误的?魔术用我们的咖啡杯看书?请说出发生错误的确切线路。我们喜欢一个好的拼图。像
//create HTTP request
这样的注释确实帮助我们解决了您的紧急谜题。很抱歉,没有确定这行是错误行Bitmap bmp=(Bitmap)Bitmap.FromStream(new MemoryStream(buffer,0,total));我仍然在位图bmp=(位图)Bitmap.FromStream(newmemoryStream(buffer,0,total))中得到相同的错误;(参数无效。)您是否尝试了我发布的代码
Bitmap bmp=(Bitmap)Bitmap.FromStream(newmemoryStream(dataRead,0,dataRead.Lenght))?是的,我犯了同样的错误。你有什么样的代码来从ip摄像机中传输视频吗?你能把这个ip摄像机屏幕放到你的测试应用程序中吗?188.132.175.170:1024/home/monitoring.cgi如果您能在这一点上帮助我,我将非常感激,否则我将被解雇:(用户名:admin pass:4321Bitmap bmp=(Bitmap)Bitmap.FromStream(ms);相同的错误消息(参数无效)在那行中,我不知道它是什么格式。我只是想把ip摄像头屏幕放到我的应用程序中。你有什么样的代码来做吗?@user885382如果你不知道它的格式是什么,你凭什么认为你可以将它加载到
位图
?这就像说“我有一个文件;加载到Excel中!”。你需要知道数据格式。对于初学者,什么是MIME类型?(内容类型标题)谢谢我做了一些关于MIME的研究。我的类型是mjpeg。我还没有解决这个问题problem@user885382我对mjpeg了解不多(除了我从维基百科上收集到的信息)。但是,如果我们假设每个请求都有一帧,您可以尝试: