2011-09-24 3 views
0

je dois obtenir le streaming de 2 webcams sur le même ordinateur, et le mélanger comme une fausse webcam (alors je peux utiliser la fausse webcam sur un logiciel). J'ai vu que camcamx est pour mac, webcamstudio est pour Linux, mais j'ai besoin d'une solution pour Windows et je ne peux pas le trouver, alors je pensais écrire ma propre petite application. Je peux programmer avec C#, Java et Lazarus, mais les exemples ou la bibliothèque ou quoi que ce soit dans n'importe quelle langue seront utiles de toute façon.mélanger 2 webcam réelle dans une fausse webcam

Je vais devoir faire une fausse webcam qui peut être utilisée comme une webcam (détectée sur mon ordinateur comme une webcam USB), et du code pour saisir le flux de deux webcam réelle et mélanger tout ensemble (il y aura comme une webcam primaire qui sera plus grande et une webcam secondaire qui sera plus petite, sur un coin de la grande image)

Quelqu'un peut-il m'aider?

Répondre

0

Je pense que votre question est trop loin de la portée de ce site. Vous parlez de milliers et de milliers de lignes de code et d'une connaissance intime des pilotes, du décodage vidéo, du mixage, etc., etc. si vous voulez écrire ce logiciel par vous-même. Avec cela dit, il ya probablement logiciel pour cela pour Windows. Je commence ici:

2

Ce n'est pas un exercice trivial mais cela peut être fait. Je le sais parce que je l'ai déjà fait. :)

J'ai implémenté cela en C++.

Ce que vous devez faire est de créer ce qu'on appelle un serveur de mémoire partagée. Un serveur de mémoire partagée est une région de RAM à laquelle plus d'un processus peut accéder. Voici comment créer un à l'aide nommée mémoire partagée sous Windows:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx

Dans votre application qui mélange la vidéo des deux caméras, vous devez créer un filtre de rendu DirectShow (CBaseRenderer) qui écrit la trame vidéo mixte dans cette mémoire partagée. De l'autre côté, vous devez créer un projet DLL Visual Studio distinct qui implémentera un filtre de capture DirectShow (CSource et CSourceStream) qui lira les bitmaps vidéo que votre application principale écrit dans ce tampon. Ce projet VS doit être une DLL enregistrable qui peut être appelée pour l'enregistrer en tant que périphérique de capture DirectShow pour Windows.

Votre application principale va créer et maintenir ce tampon de mémoire partagée lorsqu'il fonctionne. Si une autre application (comme un programme de vidéoconférence) accède à l'appareil de capture, tout ce qui viendra de l'appareil sera un tampon vide jusqu'à ce que les étoiles de l'application principale alimentent de véritables images vidéo.Astuce n ° 1: Comme il s'agit d'une opération multithread, vous aurez besoin d'un handle d'événement pour signaler au filtre de capture qu'une trame est prête. Vous aurez également besoin d'un mutex pour contrôler l'accès au buffer par le thread "rendu" dans votre application et le thread "capture" dans le périphérique de capture. Conseil n ° 2: Vous n'avez pas besoin d'appeler UnmapViewOfFile ou CloseHandle sur les pointeurs de mémoire tant que les filtres de rendu ou de capture ne sont pas éliminés.

Il y a beaucoup de code dont vous aurez besoin, donc tous les exemples utiles dépasseront le cadre de cette discussion. Cela devrait vous aider à aller dans la bonne direction. Bonne chance!

+0

Je viens de vérifier mon ancien code pour cela. Il a fallu un total de 1500 lignes de code pour implémenter le tout (filtre de rendu, filtre de capture et DLL) - pas "des milliers et des milliers" de lignes de code. – Escovado