Come posso trasmettere video in webcam con C #?

Voglio creare una semplice applicazione server in cui le persone possano connettersi utilizzando un client basato su browser (che farò in seguito) per guardare video in streaming. E voglio usare C #.

Di cosa ho bisogno per acquisire video o immagini rapide tramite una webcam e inviarli tramite la rete?

Se vuoi un componente “cattura / streamer in una scatola”, ce ne sono diversi là fuori come altri hanno menzionato.

Se vuoi ottenere il controllo di basso livello su tutto, dovrai usare DirectShow come indicato da thealliedhacker. Il modo migliore per utilizzare DirectShow in C # è attraverso la libreria DirectShow.Net : include tutte le API COM di DirectShow e include molte utili funzioni di collegamento.

Oltre all’acquisizione e allo streaming, puoi anche effettuare conversioni in formato di registrazione, audio e video, filtri live audio e video e un sacco di cose.

Microsoft afferma che DirectShow sta andando via, ma devono ancora rilasciare una nuova libreria o API che fa tutto ciò che fornisce DirectShow. Sospetto che molte delle ultime cose che hanno pubblicato siano ancora DirectShow sotto il cofano. A causa del suo stato in Microsoft, non ci sono un sacco di libri o riferimenti su di esso oltre a MSDN e cosa puoi trovare nei forum. L’anno scorso, quando abbiamo iniziato un progetto che lo utilizzava, il miglior libro sull’argomento – Programmazione di Microsoft DirectShow – era esaurito e costava circa $ 350 per una copia usata!

La solita API per questo è DirectShow.

Puoi usare P / Invoke per importare le API C ++, ma penso che ci siano già alcuni progetti che hanno fatto questo.

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

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

Per ottenere la parte di streaming, probabilmente si desidera utilizzare DirectShow per applicare un codec di compressione per ridurre il ritardo, quindi è ansible ottenere un stream e trasmetterlo. Potresti considerare l’utilizzo del multicast per ridurre il carico di rete.

Potresti semplicemente usare VideoLAN . VideoLAN funzionerà come un server (oppure puoi avvolgere la tua applicazione C # attorno per un maggiore controllo). Esistono anche wrapper .NET per il visualizzatore che puoi utilizzare e quindi incorporare nel tuo client C #.

Ho usato VideoCapX per il nostro progetto. Scorrerà come stream MMS / ASF che può essere aperto dal lettore multimediale. È quindi ansible incorporare il lettore multimediale nella pagina Web.

Se non hai bisogno di molto controllo, o se vuoi provare VideoCapX senza scrivere un codice, prova U-Broadcast , usano VideoCapX dietro la scena.

Se vuoi registrare video da un browser web, penso che la tua unica opzione sia Flash. Stiamo cercando di fare la stessa cosa. Siamo anche principalmente una casa .NET e non vedo un modo per utilizzare .NET per catturare la webcam _from_within_the_browser_. Tutte le altre soluzioni menzionate qui probabilmente funzionerebbero alla grande se si è felici di accontentarsi di un’app desktop

Un’altra opzione per lo streaming di immagini da una webcam a un browser è tramite mjpeg. Questa è solo una serie di immagini jpeg supportate dalla maggior parte dei browser moderni come parte del tag. Ecco un esempio di server scritto in C #:

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

Funziona bene su una LAN, ma non altrettanto bene su internet dato che mjpeg non è così efficiente come altri codec video (h264, VP8 ecc.)