2008-09-15 6 views
2

J'utilise Windows Media Format SDK pour capturer le bureau en temps réel et l'enregistrer dans un fichier WMV (en fait c'est une simplification excessive de mon projet, mais c'est la partie pertinente). Pour l'encodage, j'utilise le codec Windows Media Video 9 Screen car il est très efficace pour les captures d'écran et parce qu'il est disponible pour pratiquement tout le monde sans avoir besoin d'installer quoi que ce soit, car le codec est inclus avec Windows Media Player 9 (inclus dans Windows XP SP1) .Capture du bureau avec Windows Media Format (WMF)

Je réalise des captures d'écran BITMAP en utilisant les fonctions GDI et j'aligne ces BITMAP au codeur. Comme vous pouvez le deviner, prendre des captures d'écran avec GDI est lent, et je n'obtiens pas le curseur de l'écran, que je dois ajouter manuellement aux BITMAP. Les BITMAP que je reçois initialement sont des DDB, et j'ai besoin de les convertir en DIB pour que l'encodeur comprenne (entrée RVB), et cela prend plus de temps. Le déclenchement d'un profileur indique qu'environ 50% du temps est passé dans WMVCORE.DLL, le codeur. C'est à prévoir, bien sûr, car l'encodage est intensif en CPU. En réalité, il existe un élément appelé SDK (Windows Media Encoder) qui permet de réaliser une capture d'écran en utilisant le codec souhaité de manière plus simple et plus conviviale.

Le WME est basé sur WMF. C'est une librairie de leviers supérieure et aussi des bindings .NET. Je ne peux pas l'utiliser dans mon projet car cela entraîne des dépendances indésirables que je dois éviter.

Je pose des questions sur la méthode utilisée par WME pour transmettre des données d'échantillons au codeur WMV. L'encodage a lieu avec WME exactement comme il se passe avec mon application qui utilise WMF. WME est plus efficace que mon application car il dispose d'un moyen beaucoup plus efficace de fournir des données vidéo à l'encodeur. Il ne repose pas sur des fonctions GDI lentes et des conversions DDB-> DIB.

Comment cela se fait-il?

Répondre

0

Il y a longtemps que je l'ai fait tout codage Win32, mais autant que je sache, WMF comme format est essentiellement une liste des commandes GDI et leurs paramètres qui expliquerait pourquoi il est de coder beaucoup plus efficace ...

Vous devrez probablement vous connecter au contexte GDI de niveau supérieur (tout comme le Remote Desktop, je suppose) et capturer les commandes GDI comme elles sont appelées. Il me semble me souvenir qu'il existe un moyen de créer un contexte GDI de sortie WMF, ce qui signifie que vous pouvez simplement lui déléguer des appels d'une manière ou d'une autre.

Je suppose ici, mais vous pouvez trouver un exemple de code pour ce qui précède dans les projets TightVNC/QuickVNC pour Windows car ils devraient faire quelque chose comme ça pour capturer les changements à l'écran de manière efficace.

+0

Je pense que vous pensez à Windows Metafiles, ce qui n'est pas la même chose que Windows Media Format (un encodeur audio/vidéo). – jeffm

1

La source de CamStudio, une application de screencasting GPL qui a été autour depuis des années (commercialement, puis open-srcd plus tard) pourrait être utile?

http://sourceforge.net/project/showfiles.php?group_id=131922

Je vous suggère de regarder les entrailles des clients VNC aussi, mais ils sont probablement très simpliste (je pense juste saisir des captures d'écran jpg'ing alors les tuiles qui ont changé depuis la dernière capture).

Vous pouvez envisager de ne pas utiliser WMV9 comme encodeur pour l'encodage à la volée si celui-ci est trop gourmand en ressources. Peut-être utiliser un compresseur plus ancien et moins efficace (comme MS RLE) utilisé par HyperCam, puis compresser en WMV par la suite?MS RLE est une installation par défaut depuis au moins Win2000 je crois: http://wiki.multimedia.cx/index.php?title=Microsoft_RLE

codec sans perte de CamStudio est GPL (même lien que ci-dessus), qui offre une assez bonne compression (bien que vous auriez besoin de regrouper le dll dans votre installateur) et pourrait être utilisé à la volée, il fonctionne bien avec une compression élevée sur tous les systèmes modernes.

0

Avez-vous vérifié la bibliothèque BB FlashBack?

Je suis sur une chasse similaire, et je viens de commencer à évaluer la bibliothèque BB FlashBack.

Je ne suis pas sûr des dépendances externes ou installer l'empreinte. Il semble avoir un codec propriétaire qui doit être installé, mais l'installation du codec peut être gérée par l'API BB FlashBack exposée.

Prenez garde, il y a des restrictions de licences (réglage d'exécution des clés de licence, ...)

Je peux vous envoyer le CHM à partir du SDK par e-mail si vous souhaitez évaluer l'API avant de vous engager à une licence Télécharger.

choses que je suis au milieu de l'évaluation: captures appropriées de WPF vues curseur de la souris suivi Taille du film stocké Comment afficher les films enregistrés sans codec propriétaire (à savoir l'exportation SWF)

--Batgar

Questions connexes