¿Cómo puedo transmitir video de webcam con C #?

Quiero hacer una aplicación de servidor simple donde las personas puedan conectarse utilizando un cliente basado en navegador (que haré más adelante) para ver la transmisión de video. Y quiero usar C #.

¿Qué necesito para capturar videos o imágenes rápidas a través de una cámara web y enviarlos a través de la red?

Si desea un componente de “captura / serpentina en una caja”, hay varios por ahí como otros han mencionado.

Si quieres pasar al control de bajo nivel sobre todo, necesitarás usar DirectShow como señala allhalliedhacker. La mejor manera de usar DirectShow en C # es a través de la biblioteca DirectShow.Net : envuelve todas las API de DirectShow COM e incluye muchas funciones de acceso directo útiles para usted.

Además de capturar y transmitir, también puede realizar grabaciones, conversiones de formatos de audio y video, filtros en vivo de audio y video, y un montón de cosas.

Microsoft afirma que DirectShow se va, pero todavía tienen que lanzar una nueva biblioteca o API que haga todo lo que proporciona DirectShow. Sospecho que muchas de las últimas novedades que lanzaron siguen siendo DirectShow bajo el capó. Debido a su estado en Microsoft, no hay muchos libros o referencias en él aparte de MSDN y lo que puede encontrar en los foros. El año pasado, cuando comenzamos un proyecto utilizándolo, el mejor libro sobre el tema – Progtwigción de Microsoft DirectShow – ¡estaba agotado y valía alrededor de $ 350 por una copia usada!

La API habitual para esto es DirectShow.

Puedes usar P / Invoke para importar las API de C ++, pero creo que ya hay algunos proyectos que lo han hecho.

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

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

Para obtener la parte de transmisión, probablemente desee utilizar DirectShow para aplicar un códec de compresión para reducir el retraso, luego puede obtener una transmisión y transmitirla. Podría considerar usar multicast para reducir la carga de la red.

Podrías usar VideoLAN . VideoLAN funcionará como un servidor (o puede envolver su propia aplicación C # alrededor para obtener más control). También hay contenedores .NET para el visor que puede usar y, por lo tanto, incrustar en su cliente C #.

He usado VideoCapX para nuestro proyecto. Se transmitirá como flujo MMS / ASF que se puede abrir con el reproductor multimedia. Luego puede incrustar el reproductor multimedia en su página web.

Si no necesita mucho control, o si desea probar VideoCapX sin escribir un código, pruebe U-Broadcast , use VideoCapX detrás de la escena.

Si desea grabar videos desde un navegador web, creo que su única opción es Flash. Estamos buscando hacer lo mismo. También somos principalmente una casa .NET y no veo una manera de usar .NET para capturar la cámara web _from_within_the_browser_. Todas las otras soluciones mencionadas aquí probablemente funcionarían de maravilla si está satisfecho de conformarse con una aplicación de escritorio

Otra opción para transmitir imágenes de una cámara web a un navegador es a través de mjpeg. Esta es solo una serie de imágenes JPEG que la mayoría de navegadores modernos admiten como parte de la etiqueta. Aquí hay un servidor de muestra escrito en c #:

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

Esto funciona bien en una LAN, pero no tan bien en Internet, ya que mjpeg no es tan eficiente como otros códecs de video (h264, VP8, etc.)