我想制作一个简单的服务器应用程序,人们可以使用基于浏览器的客户端(我稍后会制作)连接以观看流式视频。我想使用 C#。
我需要什么才能通过网络摄像头捕捉视频或快速图像并通过网络发送?
如果您想要一个“盒子中的捕获/流媒体”组件,正如其他人所提到的那样,那里有几个。
如果您想对这一切进行低级控制,则需要使用 DirectShow,正如 thealliedhacker 指出的那样。在 C# 中使用 DirectShow 的最佳方式是通过DirectShow.Net库 - 它包含所有 DirectShow COM API 并包含许多有用的快捷功能。
除了捕获和流式传输之外,您还可以进行录制、音频和视频格式转换、音频和视频实时过滤器以及很多东西。
微软声称 DirectShow 正在消失,但他们还没有发布一个新的库或 API 来完成 DirectShow 提供的所有功能。我怀疑他们发布的许多最新内容仍然是 DirectShow。由于它在 Microsoft 的地位,除了 MSDN 和您可以在论坛上找到的内容之外,没有太多关于它的书籍或参考资料。去年,当我们使用它开始一个项目时,关于这个主题的最好的书 -微软 DirectShow 编程- 已经绝版,二手书的价格约为 350 美元!
通常的 API 是 DirectShow。
您可以使用 P/Invoke 导入 C++ API,但我认为已经有一些项目可以做到这一点。
http://channel9.msdn.com/forums/TechOff/93476-Programatically-Using-A-Webcam-In-C/
http://www.codeproject.com/KB/directx/DirXVidStrm.aspx
要获得流式传输部分,您可能希望使用 DirectShow 应用压缩编解码器以减少延迟,然后您可以获得 Stream 并传输它。您可以考虑使用多播来减少网络负载。
你可以只使用VideoLAN。VideoLAN 将用作服务器(或者您可以将自己的 C# 应用程序包装在它周围以获得更多控制)。您还可以使用查看器的 .NET 包装器,从而将其嵌入到 C# 客户端中。
我在我们的项目中使用了VideoCapX。它将以 MMS/ASF 流的形式流出,可由媒体播放器打开。然后,您可以将媒体播放器嵌入到您的网页中。
如果您不需要太多控制,或者如果您想在不编写代码的情况下尝试 VideoCapX,请尝试U-Broadcast,他们在幕后使用 VideoCapX。
将图像从网络摄像头流式传输到浏览器的另一种选择是通过 mjpeg。这只是大多数现代浏览器支持作为标签一部分的一系列 jpeg 图像。这是一个用 c# 编写的示例服务器:
https://www.codeproject.com/articles/371955/motion-jpeg-streaming-server
This works well over a LAN, but not as well over the internet as mjpeg is not as effcient as other video codecs (h264, VP8 etc..)
如果您想从网络浏览器中录制视频,我认为您唯一的选择是 Flash。我们正在寻求做同样的事情。我们也主要是 .NET 公司,我看不到使用 .NET 捕获网络摄像头 _from_within_the_browser_ 的方法。如果您乐于使用桌面应用程序,这里提到的所有其他解决方案都可能会很好用