从 IP 摄像头流式传输 C#

2023-12-08

我有以下代码不起作用。我的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;
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 IP 摄像头流式传输 C# 的相关文章

随机推荐

  • 在 tkinter 中的两个框架之间切换?

    我已经构建了我的前几个脚本 上面有一个漂亮的小 GUI 正如教程所示 但它们都没有解决如何处理更复杂的程序 如果您有一个带有 开始菜单 的东西 用于您的打开屏幕 并且根据用户选择 您移动到程序的不同部分并适当地重绘屏幕 那么执行此操作的优雅
  • AttributeError:“模块”对象没有属性“audio_fadein”

    我已经使用 cx freeze 将 python 项目构建到带有 exe 及其依赖项的单个文件夹中 但是当我运行 exe 时 出现错误 AttributeError module moviepy audio fx all has no at
  • 与 C 语言相比,C++ 有哪些限制? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 以下是C 的好处 C 提供了他们询问的具体功能 他们的 C 编译器几乎肯定是 C 编译器 因此不存在软件成本问题 C 与 C 一样可移植 C 代码可以与 C 一样高效 或者更高 或者更低
  • printf 的参数数量错误会导致奇怪的结果

    include
  • 如何在MySQL中生成数据?

    这是我的 SQL SELECT COUNT id CONCAT YEAR created at MONTH created at DAY created at FROM my table GROUP BY YEAR created at M
  • 如何使用 python 建立 ssh 连接?

    任何人都可以推荐一些在 python 中建立 ssh 连接的东西吗 我需要它与任何操作系统兼容 我已经尝试过 pyssh 只是为了得到 SIGCHLD 错误 我读过这是因为 Windows 缺少这个 我尝试过让 paramiko 工作 但
  • 如果没有活动事务,CreateQuery 无效

    我正在尝试使用 Spring Transactional 注释 但是当该方法时我遇到问题findAll被调用 我有这个错误 org hibernate HibernateException createQuery is not valid
  • C#使用命名空间语句排序

    我想我在某处读到 排序你的 using 语句并删除未使用的语句会带来某种性能优势 但我似乎找不到任何证据或资源来支持这一点 这有什么道理吗 No the using用于设置命名空间的语句没有性能成本 无论语句的顺序如何 生成的 IL 代码都
  • 查找距离 get.shortest.paths() 的路线距离

    我正在使用igraph在 R 中封装来做一些相当简单的事情 计算网络中两个节点之间的最短距离 有没有一种直接的方法来提取通过计算得出的路径的距离get shortest paths 这是一些可重现的代码 说明了我的问题 reproducib
  • Android 2.2 上的振动设置

    我正在制作一个振动切换小部件 事实上 它的第一个版本已经在市场上 但我在 Android 2 2 的振动设置方面遇到了一些问题 直到 Android 2 1 我都没有问题 当我想禁用振动时我会这样做 am setVibrateSetting
  • 如何获取当前 Subversion 内部版本号?

    如何在 Subversion 中自动导入最新的内部版本 修订号 目标是让该数字像 SO 一样在您的网页页脚上可见 让您的构建过程调用svn版本命令 并将其输出嵌入到生成的 source binaries 中 这不仅会给出当前修订版 就像这里
  • agda 程序一定会终止吗?

    有几个地方指出所有 agda 程序都会终止 不过我可以构造一个这样的函数 stall n stall 0 0 stall x stall x 语法荧光笔似乎不喜欢它 但没有编译错误 计算范式stall 0结果是0 计算结果stall 1导致
  • 将 Windows 窗体中的 DataGridView 绑定到列表>

    我有一个格式为 List of List of T 的自定义对象集合 即自定义对象列表的列表 我需要将此集合绑定到Windows窗体中的datagridview控件 并且页面数应等于外部列表中的内部列表的数量 每个页面都应该绑定到内部Lis
  • Sweave 中的自定义图形设备

    My 在Sweave文档中插入带有特殊字符的pdf图形的问题已通过在 Sweave 本身之外创建 pdf 图然后导入它来解决 根据 Sweave 文档 我编写了一个自定义图形设备 它应该以完全相同的方式构建 pdf 图形 然而它不起作用 您
  • javascript 只允许在文本字段中使用字母数字和连字符 - 值

    我有一个文本字段 我正在读取其值 我只想允许字母数字字符和连字符 值 如果我输入 abc d 或 w2w 2 或 we 23 等值 到目前为止我的正则表达式似乎不会触发 var someName document getElementByI
  • 打开新标签页时,Google Chrome 到底会做什么?

    今天 我观察到一个有趣的行为 我使用的是 Windows XP sp3 操作系统 当我在 Google Chrome 中打开新选项卡并查看任务管理器时 会创建一个新进程 但是 一段时间后 这个过程就会终止 为什么它会表现出这样的行为 是不是
  • libspotify 导致苹果应用商店拒绝

    看来 Apple 从 5 月 1 日起收紧了应用程序商店提交 我有一个使用 Spotify 的应用程序 并且已多次被 App Store 接受 在最近的更新中 该应用程序因以下原因被拒绝 非公开API使用 应用程序不允许访问UDID 并且不
  • codeigniter $this->db->query() 或 $this->db->e​​scape() 是否可以防止 SQL 注入?

    我想问一下这2个方法 this gt db gt escape and this gt db gt query 那些可以防止SQL注入吗 首先 你应该清楚什么是db gt escape and db gt query does db gt
  • 将布尔值转换为整数会返回 -1 表示 true?

    我正在和一些人一起工作VB NET代码似乎使用以下方法将布尔值转换为整数CInt myBoolean 发生的奇怪的事情是 如果值为 true 它会返回 1 例如 CInt True returns 1 CInt False returns
  • 从 IP 摄像头流式传输 C#

    我有以下代码不起作用 我的camUrl如果我加载到 Firefox 并从我的摄像头进行流传输 则链接有效 但在运行时我的图片框中没有显示任何内容 有什么想法吗 public Thread camThread private string c