从 Basler 相机抓取循环生成视频流

Generate a video stream from Basler camera grabbing loop

我是视频流和处理的初学者。

我需要从 Basler GiGE 相机获取流并将其显示在网络容器中。

我正在使用 Basler.Pylon C# API 访问相机并一张一张地抓取图像。从返回的 IGrabResult 对象中,我可以访问各种参数,例如宽度、高度、步幅,当然还有字节缓冲区。

在我的 PC 上,我可以轻松地在图像中显示它 window,但是我需要做什么才能在 ASP.NET 网络应用程序中显示它?

编辑

我不是在寻找代码,而是在寻找指南,如果有人可以解释视频流的一般工作原理,那也可以

您至少有两个选择 - 第一个是每隔几秒生成一系列 jpeg 图像,然后使用标签和简单的 javascript 代码在客户端上一个一个地显示它们。第二种选择是生成和流式传输 mp4 视频,并使用一些 COM-windows 媒体播放器或 html5 控件在客户端上显示它。

视频流非常专业,一般来说,如果您想通过互联网将高质量视频流式传输给多个最终用户,最简单的方法是使用专用视频流服务器,而不是尝试自己构建一个。

可以通过托管服务(例如 Vimeo)提供专用视频流服务器,可以是您安装的商业服务器 运行(例如 Wowza),也可以是您安装的免费软件流服务器 运行 e(例如 GStreamer),所以你在那里有选择。

一般规则是,流媒体服务器会将您的视频分成块并创建视频的多个比特率副本。这允许客户端使用自适应比特率流 (ABR) 并逐块下载视频,根据当前设备和网络条件为下一个块选择比特率版本。 HLS 和 MPEG-DASH 是 ABR 流媒体协议的例子。

然后在网页上您需要一个可以理解此流式传输协议的 HTNML5 播放器 - 还有很多示例,例如免费软件 Shaka 和 Dash.js 播放器。将这些集成到网页中非常简单。

您可以观察这些在 Netflix 和 YouTube 等服务上的使用,它们通常会以较低的比特率开始以确保快速启动,然后 'step up' 到更高的比特率,直到达到当前网络的最佳比特率条件和设备达到。有关如何在观看 YouTube 时查看图表的信息,请参见此处,例如:

综上所述,您的案例似乎是在处理静止图像流,这毫无意义。尽管所有视频实际上都是隐藏在静止图像流中的,但您的图像可能不经常变化,因此您可能不需要上面的某些技术 - 视频流的很多技术都是为了处理非常每秒从服务器到客户端的大量数据流 30 或 60 个高质量帧。

例如,如果您的图像流是每 30 秒一个,那么就像 Nisus 所说的那样,只需在您的网页中显示图像并让网页或应用程序轮询服务器就很容易了每 30 秒(在您的情况下使用 ASP.NET AJAX)下载新图像。