Как я могу транслировать видео с веб-камеры с помощью C #? - PullRequest
53 голосов
/ 05 декабря 2008

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

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

Ответы [ 6 ]

21 голосов
/ 06 декабря 2008

Если вам нужен компонент «capture / streamer in a box», есть несколько таких, о которых упоминали другие.

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

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

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

7 голосов
/ 06 декабря 2008

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

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

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

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

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

4 голосов
/ 04 февраля 2009

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

3 голосов
/ 05 декабря 2008

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

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

1 голос
/ 28 марта 2012

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

0 голосов
/ 06 декабря 2016

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

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

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

...