【问题标题】:Generate a video stream from Basler camera grabbing loop从 Basler 相机抓取循环生成视频流
【发布时间】:2018-04-22 05:16:43
【问题描述】:
我是视频流和处理的初学者。
我需要从 Basler GiGE 相机获取流并将其显示在 Web 容器中。
我正在使用Basler.Pylon C# API 来访问相机并一张一张地抓取图像。从返回的IGrabResult 对象中,我可以访问各种参数,例如宽度、高度、步幅,当然还有字节缓冲区。
在我的 PC 上,我可以轻松地在图像窗口中显示它,但我需要做什么才能在 ASP.NET Web 应用程序中显示它?
编辑
我不是在寻找代码,而是在寻找指南,如果有人可以解释视频流的一般工作原理,那也可以
【问题讨论】:
标签:
c#
asp.net
video
camera
live-streaming
【解决方案1】:
视频流非常专业,一般来说,如果您想通过互联网将高质量视频流式传输给多个最终用户,使用专用视频流服务器而不是尝试自己构建一个最容易。
可以通过托管服务(例如 Vimeo)提供专用视频流服务器,可以是您安装和运行的商业服务器(例如 Wowza),也可以是您安装和运行的免费软件流服务器(例如 GStreamer),因此您可以选择.
一般来说,流媒体服务器会将您的视频分成多个块,并为您的视频创建多个比特率副本。这允许客户端使用自适应比特率流 (ABR) 并逐块下载视频,根据当前设备和网络条件为下一个块选择比特率版本。 HLS 和 MPEG-DASH 是 ABR 流协议的示例。
然后,在网页上,您需要一个 HTNML5 播放器,它可以理解这种流式传输协议 - 还有许多示例,例如免费软件 Shaka 和 Dash.js 播放器。将这些集成到网页中非常简单。
您可以在 Netflix 和 YouTube 等服务上观察到这些服务的使用情况,这些服务通常会以较低的比特率开始以确保快速启动,然后“逐步提升”到更高的比特率,直到适合当前网络条件和设备的最佳比特率到达了。有关在观看 YouTube 时如何查看此图表的信息,请参阅此处,例如:
说了以上所有内容,您的案例似乎正在处理静止图像流,这毫无价值。虽然所有的视频实际上都是隐藏的静止图像流,但可能是您的图像变化不频繁,因此您可能不需要上面的一些技术 - 很多视频流技术都是为了处理非常大量数据以每秒 30 或 60 个高质量帧从服务器流向客户端。
例如,如果您的图像流是每 30 秒一个,那么正如 Nisus 所说,在您的网页中显示图像并让网页或应用程序每 30 次轮询一次服务器可能同样容易秒(在您的情况下使用 ASP.NET AJAX)下载新图像。
【解决方案2】:
您至少有两个选择 - 第一个是每隔几秒钟生成一系列 jpeg 图像,并使用标记和简单的 javascript 代码在客户端上逐个显示它们。第二种选择是生成和流式传输 mp4 视频,并使用一些 COM-windows 媒体播放器或 html5 控件在客户端上显示。