加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

来自IP cam C#的流

发布时间:2020-12-16 02:03:38 所属栏目:百科 来源:网络整理
导读:我有以下代码无效.我的camUrl链接可以正常工作,如果我加载到Firefox并从我的摄像头流,但在运行时我的图片框中没有显示任何内容.有什么想法吗? public Thread _camThread; private string camUrl = "http://my-domain-ip:2080/videostream.cgi?user=adminpwd
我有以下代码无效.我的camUrl链接可以正常工作,如果我加载到Firefox并从我的摄像头流,但在运行时我的图片框中没有显示任何内容.有什么想法吗?

public Thread _camThread;
        private string camUrl = "http://my-domain-ip:2080/videostream.cgi?user=admin&pwd=password";
        public HttpWebRequest webReq;
        public WebResponse webRes;
        public Stream sr;

        private void btnStart_Click(object sender,EventArgs e)
        {
            if (_camThread == null) _camThread = new Thread(new ThreadStart(RunCam));
            _camThread.Start();
        }

        private void RunCam()
        {
            try
            {
                webReq = (HttpWebRequest)WebRequest.Create(camUrl);
                webReq.AllowWriteStreamBuffering = true;
                webReq.Timeout = 20000;
                using (webRes = webReq.GetResponse())
                {
                    while ((sr = webRes.GetResponseStream()) != null)
                    {
                        image.Image = Image.FromStream(sr);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnStop_Click(object sender,EventArgs e)
        {
            if (_camThread.IsAlive)
            {
                _camThread.Abort();
                _camThread = null;
            }
        }

解决方法

看起来您从响应流中读取的循环不正确.您只能从响应中获取一个流,并且它上面会有多个图像.

您可能无法直接将响应流传递给Image.FromStream – 图像可能以多部分响应进行编码,该响应将图像与文本分隔符分开.您可以在RFC2046了解有关多部分响应格式的更多信息.

using (webRes = webReq.GetResponse())
{
    using (sr = webRes.GetResponseStream())
    {
        // continuously read images from the response stream until error
        while (true)
        {
            try
            {
                // note: the line below probably won't work,you may need to parse
                // the next image from the multi-part response stream manually
                image.Image = Image.FromStream(sr);


                // if the above doesn't work,then do something like this:
                // var imageBytes = ParseNextImage(sr);
                // var memoryStream = new MemoryStream(imageBytes);
                // image.Image = Image.FromStream(memoryStream);
            }
            catch(Exception e)
            {
                Console.WriteLine("Aborting read from response stream due to error {0}",e);
                break;
            }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读