如何使用C#捕获ip camera

时间:2014-01-31 02:13:15

标签: c# httpwebrequest ip-camera

下面是我试图捕获Wanscam ip摄像头的代码,但是现在无法正常工作会引发一些例外情况,并且根本不知道我真的不知道发生了什么

远程服务器返回错误:(401)未经授权。 有时这是例外,但很多时候甚至不知道发生了什么样的例外。

任何人都可以发现一些事情,因为现在谢谢大家。

表单中只有一个按钮,只要此按钮显示停止循环就会更新图片框。

相机是Wanscam AJ-C2WA-C198 我知道这不是世界上最伟大的相机。

我的管理员名称和密码匹配正确。

EDIT :: 我注意到在VLC上我看到该图像后再次输入管理员和密码,但我已经在URL上做了很奇怪的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace cam01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        public Thread _cameraThread;
        private string metaUrl = "http://home-ip-camera.dyndns-server.com/videostream.asf?user=<USER_NAME>&pwd=<PASSWORD>resolution=64&rate=0";

        public HttpWebRequest req;

        public WebResponse res;

        public System.IO.Stream stream;
        private void button1_Click(object sender, EventArgs e)
        {
            if (btnMain.Text.Equals("Start"))
            {
                if (_cameraThread == null)
                    _cameraThread = new Thread(new ThreadStart(Run));

                _cameraThread.Start();
                btnMain.Text = "Stop";
            }
            else
            {
                btnMain.Text = "Start";
                _cameraThread.Abort();
                _cameraThread = null;
            }
        }

        private void Run()
        {
            while (btnMain.Text.Equals("Stop"))
            {
                try
                {

                    req = (HttpWebRequest)HttpWebRequest.Create(metaUrl);

                    req.AllowWriteStreamBuffering = true;

                    req.Timeout = 20000;

                    res = req.GetResponse();

                    stream = res.GetResponseStream();

                    pictureBox1.Image = Image.FromStream(stream);

                    res.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception: {0}", e.ToString());
                }
            }
        }

    }
}
`

2 个答案:

答案 0 :(得分:1)

您可以检查,http端口设置是否正确。 (在DDNS上路由或在get-query中指定)。默认端口是99,而不是80!

此外,您可以尝试使用/videostream.cgi?user=<USENAME>&pwd=<PASSWORD> - 它会为您提供MJPEG流而非FFMPEG,由videostream.asf提供

最后,尝试在您的请求中指定信用额度:

req.Credentials = new NetworkCredential("<USENAME>", "<PASSWORD>");

并尝试其他查询参数:loginuse=<USENAME>&loginpass=<PASSWORD>

答案 1 :(得分:0)

尝试在CD或公司网站上找到相机的sdk(软件开发套件)。最近,出于性能原因,Cameras SDK是用c / c ++编写的。试着用C#包装它们。 强烈建议不要在c#中使用指针,但仅仅因为Microsoft Backward兼容非托管代码而包括在内。