【问题标题】:Webcam streaming - Stream Images to Image Control at variable intervals?网络摄像头流 - 以可变间隔将图像流式传输到图像控件?
【发布时间】:2026-02-16 12:50:02
【问题描述】:

我遇到了一个问题,即连接速度较慢的用户无法正确获取我的图片。

我使用 Ajax 计时器每秒将新图像发送到 Ajax 更新面板内的图片框。

因此,如果他们的连接速度真的很慢,则在下一张图片进入之前,一张图片不会完全加载,因此他们永远无法获得完整的图片...

有什么想法吗?

【问题讨论】:

    标签: c# image video-streaming webcam


    【解决方案1】:

    在 JavaScript 中使用图像 OnLoad 事件。换句话说,在最后一张图片未完全加载之前不要加载新图片。

    您可能不应该使用更新面板。图像标签(包括其大小、外观和位置)保持不变;它是改变的来源。我建议不要更新所有内容,而是在客户端

    1. 一开始,加载第一张图片(没有更新面板)。
    2. OnLoad 事件的侦听器添加到客户端的<img />
    3. 当图片完全加载后,通过向服务器查询更新的图片来重新加载它。例如,您可以考虑拥有一个 ASP.NET 页面Camera.aspx,它提供从相机抓取的最新图片。为确保页面确实被查询,请将<img /> 元素的src 属性更改为Camera.aspx?t=1Camera.aspx?t=2 等。

    在服务器端(所以这里没有 JavaScript),抓取的图像存储在数据库中,所以Camera.aspx 将查询最后存储的记录,检索它并直接发送到客户端(指定适当的Response.ContentType 并使用Response.OutputStream)。

    为了获得更好的视觉响应,您可能还需要考虑并行使用两个图像元素:当第一个加载时,显示第二个,反之亦然。 可能会更好,但我不确定,所以在选择合适的方法之前进行测试。

    【讨论】:

    • 这听起来是个好主意!虽然我对 javascript 不太了解...那么如何在 OnLoad 事件中从数据库中获取下一个图像 url?
    • @Faizan Kazi:查看修改后的答案。最好的问候。
    • 谢谢!!对于迟到的回复,我感到很抱歉,但您的回答非常完美..我只是有一个小细节需要澄清......我如何将 Camera.aspx 中的图像分配给图像?这有点像网络服务,对吧?
    • @Faizan Kazi:如果我理解正确您的问题,您可以简单地执行以下操作:<img src="Camera.aspx" alt="..." />
    • 宁可使用this.Response.OutputStream获取Camera.aspx的流,然后直接通过写入这个输出流来流式传输内容。不要忘记将this.Response.BufferOutput 设置为false