Подтвердить что ты не робот

Как я могу транслировать видео с веб-камеры с помощью С#?

Я хочу создать простое серверное приложение, где люди могут подключаться с помощью клиентского браузера (который я сделаю позже) для просмотра потокового видео. И я хочу использовать С#.

Что мне нужно для захвата видео или быстрых изображений через веб-камеру и отправки их по сети?

4b9b3361

Ответ 1

Если вам нужен компонент "захват/стример в коробке", есть несколько других, о которых говорили другие.

Если вы хотите перейти к управлению низким уровнем над всем этим, вам нужно будет использовать DirectShow, как указывает thealliedhacker. Лучший способ использовать DirectShow в С# через библиотеку DirectShow.Net - он обертывает все API-интерфейсы DirectShow COM и включает множество полезных функций быстрого доступа для вы.

В дополнение к захвату и потоковой передаче вы также можете конвертировать записи, аудио и видео форматы, аудио-и видео-фильтры в реальном времени и многое другое.

Microsoft утверждает, что DirectShow уходит, но они еще не выпустили новую библиотеку или API, которые делают все, что предоставляет DirectShow. Я подозреваю, что многие из последних вещей, которые они выпустили, по-прежнему являются DirectShow под капотом. Из-за своего статуса в Microsoft на нем не так много книг или ссылок, кроме MSDN, и что вы можете найти на форумах. В прошлом году, когда мы начали использовать этот проект, лучшая книга по этому вопросу была непечатаемой и собиралась около 350 долларов за использованную копию!

Вот книга: Программирование Microsoft DirectShow. Вы можете получить новую копию (на момент публикации) за 299 долларов США или использованную копию за 149 долларов США на Amazon!

alt text http://www.lmet.fr/www.lmet.fr/icons/Scans13/Big/9780/73/56/18/213.gif

Ответ 2

Обычный API для этого - DirectShow.

Вы можете использовать P/Invoke для импорта С++ API, но я думаю, что есть уже несколько проектов, которые сделали это.

http://channel9.msdn.com/forums/TechOff/93476-Programatically-Using-A-Webcam-In-C/

http://www.codeproject.com/KB/directx/DirXVidStrm.aspx

Для получения потоковой части вы, вероятно, захотите использовать DirectShow для применения кодека сжатия для уменьшения запаздывания, тогда вы можете получить Stream и передать его. Вы можете рассмотреть возможность использования многоадресной рассылки для снижения сетевой нагрузки.

Ответ 3

Вы можете просто использовать VideoLAN. VideoLAN будет работать как сервер (или вы можете обернуть свое собственное приложение С# вокруг него для большего контроля). Существуют также .NET-оболочки для зрителя, которые вы можете использовать и тем самым внедрять в свой клиент С#.

Ответ 4

Я использовал VideoCapX для нашего проекта. Он будет транслироваться как поток MMS/ASF, который может быть открыт медиаплеером. Затем вы можете вставлять медиаплеер на свою веб-страницу.

Если вам не потребуется много контроля или если вы хотите попробовать VideoCapX без написания кода, попробуйте U-Broadcast, они используют VideoCapX за сценой.

Ответ 5

Если вы хотите записывать видео из веб-браузера, я думаю, что ваш единственный вариант - Flash. Мы ищем то же самое. Мы также в основном являемся .NET-house, и я не вижу способа использовать .NET для захвата веб-камеры _from_within_the_browser_. Все другие решения, упомянутые здесь, вероятно, будут работать отлично, если вы с удовольствием соглашаетесь на настольное приложение.

Ответ 6

Еще одна опция для потоковой передачи изображений с веб-камеры в браузер - через mjpeg. Это всего лишь серия jpeg-изображений, которые большинство современных браузеров поддерживают как часть тега. Здесь пример сервера, написанный в С#:

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

Это хорошо работает по локальной сети, но не по интернету, поскольку mjpeg не так эффективен, как другие видеокодеки (h264, VP8 и т.д.)