Поток через сеть с C # - PullRequest
       0

Поток через сеть с C #

1 голос
/ 04 августа 2011

Я хочу спросить, как я могу передавать изображения с помощью 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?адрес, который я вижу на сайтах WhatsMyIp?

Большое спасибо!

1 Ответ

2 голосов
/ 10 августа 2011

Веб-камеры со встроенной сетью обычно передают изображения обратно, используя MJPEG / MIME multipart .

Если у вас есть камера со встроенной сетью, она, скорее всего, уже поддерживает потоковую передачу потока MJPEG по сети.Чтобы получить доступ к камере из-за пределов локальной сети, необходимо настроить домашний маршрутизатор для передачи внешних запросов (вероятно, через порт 80) на IP-адрес камеры (это называется конфигурацией NAT).Точный процесс для этого будет зависеть от вашего маршрутизатора, но его должно быть довольно легко настроить.

Если у вас есть камера без встроенной сети, вы можете создать «прокси» на своем домашнем компьютере, который будетпрослушивайте сетевые запросы от внешних клиентов, извлекайте изображения с камеры и отправляйте изображения обратно как части в потоке ответов.После написания прокси-сервера он будет похож на сетевую камеру с точки зрения внешнего доступа - вам необходимо настроить маршрутизатор для разрешения внешнего доступа.

HttpListener будет хорошим выбором для реализации прокси,Основная работа здесь - форматирование response.OutputStream в соответствии с соглашением MJPEG / MIME.Здесь я бы рекомендовал использовать StreamWriter (для текстовых частей) и Image.Save для изображений.Помните, что ответ MJPEG содержит комбинацию текстовых данных (для MIME / многокомпонентных заголовков и границ) и двоичных данных (для фактических изображений JPEG), содержащихся в MIME / многочастном теле.Если вам необходимо поддерживать потоковую передачу на несколько клиентов одновременно, вам также необходимо использовать многопоточность.

Поскольку IP-адрес для использования HttpListener поддерживает нотацию + или *, что позволяет избежать необходимости указывать любой IP-адрес.Например: http://+/Stream/ См. MSDN для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...