Как я могу транслировать видео с веб-камеры с помощью C#?
Я хочу создать простое серверное приложение, где люди могут подключаться с помощью клиентского браузера (который я сделаю позже) для просмотра потокового видео. И я хочу использовать C#.
Что мне нужно для захвата видео или быстрых изображений через веб-камеру и отправки их по сети?
6 ответов
Если вам нужен компонент "capture/streamer in a box", то есть несколько, как уже упоминали другие.
Если вы хотите перейти к низкоуровневому контролю над всем этим, вам нужно использовать DirectShow, как указывает thealliedhacker. Лучший способ использовать DirectShow в C# - использовать библиотеку DirectShow.Net - она объединяет все API-интерфейсы DirectShow COM и включает в себя множество полезных функций быстрого доступа для вас.
Помимо захвата и потоковой передачи, вы также можете делать записи, конвертировать аудио и видео форматы, живые фильтры аудио и видео и многое другое.
Microsoft утверждает, что DirectShow уходит, но им еще предстоит выпустить новую библиотеку или API, которые делают все, что обеспечивает DirectShow. Я подозреваю, что многие из последних вещей, которые они выпустили, все еще находятся под капотом DirectShow. Из-за его статуса в Microsoft, там не так много книг или ссылок, кроме MSDN и того, что вы можете найти на форумах. В прошлом году, когда мы начали проект с его использованием, лучшая книга на эту тему - " Программирование Microsoft DirectShow" - вышла из печати и стоила около 350 долларов за использованную копию!
Обычный 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, чтобы применить кодек сжатия, чтобы уменьшить задержку, затем вы можете получить поток и передать его. Вы можете рассмотреть возможность использования многоадресной рассылки для уменьшения нагрузки на сеть.
Вы можете просто использовать VideoLAN. VideoLAN будет работать как сервер (или вы можете обернуть свое собственное приложение C# для большего контроля). Существуют также.NET-оболочки для средства просмотра, которые вы можете использовать и таким образом встраивать в ваш клиент C#.
Я использовал VideoCapX для нашего проекта. Он будет воспроизводиться как поток MMS/ASF, который может быть открыт медиаплеером. Затем вы можете встроить медиаплеер на свою веб-страницу.
Если вам не нужно много контроля, или если вы хотите попробовать VideoCapX без написания кода, попробуйте U-Broadcast, они используют VideoCapX за сценой.
Еще одна опция для потоковой передачи изображений с веб-камеры в браузер - через mjpeg. Это всего лишь серия изображений JPEG, которые большинство современных браузеров поддерживают как часть тега. Вот пример сервера, написанного на C#:
https://www.codeproject.com/articles/371955/motion-jpeg-streaming-server
Это хорошо работает в локальной сети, но не так хорошо, как в Интернете, так как mjpeg не так эффективен, как другие видеокодеки (h264, VP8 и т. Д.)
Если вы хотите записать видео из веб-браузера, я думаю, что ваш единственный вариант - Flash. Мы хотим сделать то же самое. Мы также являемся в первую очередь домом.NET, и я не вижу способа использовать.NET для захвата веб-камеры _from_within_the_browser_. Все другие решения, упомянутые здесь, вероятно, будут работать отлично, если вы будете довольны настольным приложением