如何使用C#stream式传输摄像头video?

我想制作一个简单的服务器应用程序,用户可以使用基于浏览器的客户端(稍后我将介绍)观看stream式video。 我想用C#。

我需要通过networking摄像头捕获video或快速图像并通过networking发送?

如果你想要一个“捕获/stream光挂箱”的组件,那么就有其他几个已经提到过的。

如果你想对所有的低层次的控制,你需要使用DirectShow作为所有的黑客指出。 在C#中使用DirectShow的最好方法是通过DirectShow.Net库 – 它包装了所有的DirectShow COM API,并包含许多有用的快捷方式function。

除了捕捉和stream媒体外,您还可以进行录制,audio和video格式转换,audio和video实时滤镜以及大量的内容。

微软声称DirectShow正在消失,但他们还没有发布一个新的库或API来完成DirectShow提供的所有function。 我怀疑他们发布的许多最新的东西仍然是DirectShow的底层。 由于其在微软的地位,除了MSDN以外,没有太多的书籍和参考资料可以在论坛上find。 去年当我们开始使用它的一个项目时,这本书的最好的书已经绝版了,大约350美元的旧版本!

这里是这本书: 编程Microsoft DirectShow 。 您可以以299美元的价格获得新的副本(截至发布时间),或在亚马逊网站上获得149美元的二手副本!

替代文字http://www.lmet.fr/www.lmet.fr/icons/Scans13/Big/9780/73/56/18/213.gif

通常的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

要获得stream媒体部分,您可能需要使用DirectShow来应用压缩编解码器以减less延迟,然后您可以获取Stream并将其传输。 您可以考虑使用多播来减lessnetworking负载。

你可以使用VideoLAN 。 VideoLAN将作为一个服务器(或者你可以包装自己的C#应用​​程序,以获得更多的控制权)。 还有一些.NET包装器可以用于查看器,并embedded到C#客户端中。

我已经使用VideoCapX作为我们的项目。 它将作为可以由媒体播放器打开的MMS / ASFstream而stream出。 然后,您可以将媒体播放器embedded到您的网页中。

如果您不需要太多的控制,或者如果您想在不编写代码的情况下尝试VideoCapX,请尝试U-Broadcast ,在场景后面使用VideoCapX。

如果你想从networking浏览器录制video,我认为你唯一的select是Flash。 我们正在寻找做同样的事情。 我们也主要是一个.NET的房子,我没有看到使用.NET捕捉摄像头_from_within_the_browser_的方式。 所有在这里提到的其他解决scheme可能会很好,如果你很乐意解决桌面应用程序

将图像从networking摄像头传输到浏览器的另一种select是通过mjpeg。 这只是大多数现代浏览器支持的一系列jpeg图像作为标记的一部分。 以下是用c#编写的示例服务器:

https://www.codeproject.com/articles/371955/motion-jpeg-streaming-server

这在局域网上运行得很好,但是不像互联网那样,因为mjpeg不如其他video编解码器(h264,VP8等)高效。