web-dev-qa-db-fra.com

Comment puis-je diffuser des vidéos webcam avec C #?

Je souhaite créer une application serveur simple où les utilisateurs peuvent se connecter à l'aide d'un client basé sur un navigateur (que je créerai ultérieurement) pour regarder des vidéos en streaming. Et je veux utiliser C #.

De quoi ai-je besoin pour capturer des images vidéo ou des images rapides via une webcam et les envoyer sur le réseau?

51
The.Anti.9

Si vous voulez un composant "capture/streamer dans une boîte", il en existe plusieurs comme d'autres l'ont mentionné.

Si vous souhaitez maîtriser tout ce qui se passe au bas niveau, vous devez utiliser DirectShow, comme le souligne thealliedhacker. La meilleure façon d'utiliser DirectShow en C # consiste à utiliser la bibliothèque DirectShow.Net : elle englobe toutes les API de DirectShow COM et inclut de nombreuses fonctions de raccourci utiles.

En plus de la capture et de la diffusion en continu, vous pouvez également effectuer des enregistrements, des conversions de formats audio et vidéo, des filtres en direct audio et vidéo et bien d'autres choses encore.

Microsoft affirme que DirectShow s'en va, mais ils n'ont pas encore publié de nouvelle bibliothèque ou API qui fait tout ce que DirectShow fournit. Je soupçonne que beaucoup des dernières nouveautés qu'ils ont publiées sont encore DirectShow sous le capot. En raison de son statut chez Microsoft, il ne contient pas beaucoup de livres ou de références autres que MSDN et tout ce que vous pouvez trouver sur les forums. L'année dernière, lorsque nous avons lancé un projet utilisant ce dernier, le meilleur livre sur le sujet - Programming Microsoft DirectShow - était épuisé et coûtait environ 350 $ pour un exemplaire usagé!

20
CMPalmer

L'API habituelle pour cela est DirectShow. 

Vous pouvez utiliser P/Invoke pour importer les API C++, mais je pense qu’il existe déjà quelques projets qui l’ont déjà fait. 

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

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

Pour obtenir la partie en streaming, vous souhaiterez probablement utiliser DirectShow pour appliquer un codec de compression afin de réduire le délai. Vous pouvez ensuite obtenir un flux et le transmettre. Vous pouvez envisager d'utiliser la multidiffusion pour réduire la charge du réseau.

7
Excel Kobayashi

Vous pouvez simplement utiliser VideoLAN . VideoLAN fonctionnera comme un serveur (ou vous pouvez envelopper votre propre application C # pour plus de contrôle). Il existe également des wrappers .NET pour le visualiseur que vous pouvez utiliser et ainsi intégrer dans votre client C #. 

4
Chris Holmes

J'ai utilisé VideoCapX pour notre projet. Il sera diffusé en tant que flux MMS/ASF pouvant être ouvert par le lecteur multimédia. Vous pouvez ensuite intégrer le lecteur multimédia à votre page Web.

Si vous n'avez pas besoin de beaucoup de contrôle ou si vous voulez essayer VideoCapX sans écrire de code, essayez U-Broadcast , ils utilisent VideoCapX en arrière-plan.

3
faulty

Si vous souhaitez enregistrer une vidéo à partir d'un navigateur Web, je pense que votre seule option est Flash. Nous cherchons à faire la même chose. Nous sommes également principalement une maison .NET et je ne vois pas comment utiliser .NET pour capturer la webcam _de_avec_le_browser_. Toutes les autres solutions mentionnées ici fonctionneraient probablement très bien si vous vous contentez d'une application de bureau.

1
gillonba

Une autre option pour diffuser des images d'une webcam vers un navigateur est via mjpeg. Ceci est juste une série d’images jpeg que la plupart des navigateurs modernes prennent en charge dans le cadre du tag. Voici un exemple de serveur écrit en c #:

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

Cela fonctionne bien sur un réseau local, mais pas aussi bien sur Internet que mjpeg n’est pas aussi efficace que d’autres codecs vidéo (h264, VP8, etc.)

0
mark gamache