使用c#在网络上进行流传输

本文关键字:传输 网络 使用 | 更新日期: 2023-09-27 18:04:24

我想问一下如何使用c#将图像流式传输到非本地的客户端。

这个想法是让其他电脑的用户通过在他们的网络浏览器中输入我电脑的IP地址,就可以看到连接到我电脑的网络摄像头发出的图像。

我已经成功地使它在本地-当我访问我的计算机上的127.0.0.1地址时,它工作。我试过使用WCF,还有TcpListener:

listener = new HttpListener();
listener.Start();
HttpListenerContext context = listener.GetContext();
HttpListenerResponse response = context.Response;
System.IO.Stream output = response.OutputStream;
...

但是,当我试图从本地网络外使其工作时-我失败了。

我的问题是:

-你知道c#中的任何库可以很容易地让我听请求并通过流回答它们吗?(我试图让浏览器访问我发送给他们的图像流。它在本地工作得很好…)

-也许你知道一种不同的方法可以简化任务?

-此外,当我试图向外界广播时,我应该听哪个地址?127.0.0.1吗?我在whatsmip网站上看到的地址?

非常感谢!

使用c#在网络上进行流传输

内置网络的网络摄像头通常使用MJPEG/MIME multipart流图像。

如果你有一个内置网络的相机,那么它很可能已经支持通过网络流式传输MJPEG流。要想从本地网络外部访问摄像机,需要配置家庭路由器,将外部请求(可能在端口80上)传递到摄像机的IP地址(这被称为NAT配置)。具体的配置过程取决于你的路由器,但应该很容易配置。

如果你有一个没有内置网络的相机,你可以在你的家用电脑上建立一个"代理",它将监听来自外部客户端的网络请求,从相机中获取图像,并将图像作为响应流的一部分发送回来。一旦你写好了代理,它就像网络摄像机在外部访问方面一样——你需要配置你的路由器以允许外部访问。

HttpListener将是实现代理的好选择。这里的主要工作是格式化响应。根据MJPEG/MIME多部分约定输出流。在这里,我建议使用StreamWriter(用于文本部分)和Image。保存图像。请记住,MJPEG响应包含MIME/多部分正文中包含的文本数据(用于MIME/多部分报头和边界)和二进制数据(用于实际的JPEG图像)的组合。如果你需要同时支持流到多个客户端,你还需要使用线程。

就使用HttpListener的IP地址而言,支持+或*符号,从而避免了指定任何IP地址的需要。例如:http://+/Stream/详细信息请参见MSDN