Ich verwende Windows Media Format SDK, um den Desktop in Echtzeit zu erfassen und in einer WMV-Datei zu speichern (eigentlich ist dies eine zu starke Vereinfachung meines Projekts, aber das ist der relevante Teil). Zum Codieren verwende ich den Codec Codec Windows Media Video 9 Screen, weil er sehr effizient für Bildschirmaufnahmen ist und praktisch jedem zur Verfügung steht, ohne dass etwas installiert werden muss, da der Codec in der Windows Media Player 9-Laufzeit enthalten ist (in Windows XP SP1 enthalten). .Erfassen des Desktops mit Windows Media Format (WMF)
Ich mache BITMAP-Screenshots mit den GDI-Funktionen und füttere diese BITMAPs dem Encoder. Wie Sie sich denken können, ist das Aufnehmen von Screenshots mit GDI langsam und ich bekomme den Bildschirmcursor nicht, den ich den BITMAPs manuell hinzufügen muss. Die BITMAPs, die ich anfänglich bekomme, sind DDBs, und ich muss diese in DIBs umwandeln, damit der Encoder sie versteht (RGB-Eingang), und das braucht mehr Zeit.
Das Starten eines Profilers zeigt, dass etwa 50% der Zeit in WMVCORE.DLL, dem Encoder, verbracht wird. Dies ist natürlich zu erwarten, da die Kodierung CPU-intensiv ist.
Die Sache ist, es gibt etwas namens Windows Media Encoder, das mit einem SDK kommt, und kann Screen Capture mit dem gewünschten Codec auf eine einfachere und CPU-freundliche Weise tun.
Das WME basiert auf WMF. Es ist eine höhere Hebelbibliothek und hat auch .NET-Bindungen. Ich kann es nicht in meinem Projekt verwenden, da dies unerwünschte Abhängigkeiten mit sich bringt, die ich vermeiden muss.
Ich frage nach der Methode, die WME zur Einspeisung von Probendaten in den WMV-Encoder verwendet. Die Kodierung erfolgt mit WME genau so, wie es bei meiner Anwendung mit WMF geschieht. WME ist effizienter als meine Anwendung, weil es eine viel effizientere Art der Übertragung von Videodaten an den Encoder bietet. Es ist nicht auf langsame GDI-Funktionen und DDB-> DIB-Konvertierungen angewiesen.
Wie wird es gemacht?
Ich denke, Sie denken an Windows Metafiles, das ist nicht das gleiche wie Windows Media Format (ein Audio/Video-Encoder.) – jeffm