IDD-push: Spiel-Capture fürs Streaming ohne Desktop Duplication oder WGC
Die meisten Self-Hosted-Streaming-Hosts erfassen deinen Bildschirm mit Desktop Duplication (DDA) oder Windows.Graphics.Capture (WGC) — und erben deren blinde Flecken. punktfunk erfasst anders: Der Treiber des virtuellen Displays schiebt fertige Frames direkt in den Encoder.
Jeder Game-Streaming-Host muss zuerst eine Frage beantworten: Wie bekommst du die Frames des Spiels von der GPU in den Encoder? Die meisten Self-Hosted-Hosts — Sunshine, Apollo, Parsec — beantworten sie mit Desktop Duplication (DDA) oder Windows.Graphics.Capture (WGC). punktfunk macht es anders — und beseitigt damit eine ganze Klasse von Problemen.
Wie alle anderen erfassen: DDA und WGC
DDA (DXGI Desktop Duplication) und WGC ziehen beide das fertige Desktop-Bild aus dem Windows-Compositor, nachdem es gezeichnet wurde. Sie funktionieren, haben aber bekannte blinde Flecken — weshalb Sunshine-Setups oft ein Hilfsprogramm laufen lassen, das je nach Bildinhalt zwischen WGC und DDA umschaltet:
- WGC sieht weder Sperrbildschirm noch UAC-Abfragen — sie erscheinen als schwarzes oder eingefrorenes Bild, du kannst dich also nicht aus der Ferne anmelden oder eine Rechteerhöhung bestätigen.
- DDA kommt mit modernen HDR-/Overlay-Pfaden ins Stolpern — befördert Windows Inhalte auf Hardware-Overlay-Ebenen (HDR-Animationen, manche Frame-Generation-Pfade), liefert DDA ein eingefrorenes Bild oder bricht mit
ACCESS_LOST-Fehlern ab und baut sich immer wieder neu auf. - Beide kosten GPU-Arbeit — die Erfassung ist ein zusätzliches Lesen und Kopieren des fertigen Frames, auf einer GPU, die ohnehin das Spiel rendert.
Wie punktfunk erfasst: IDD-push
punktfunk streamt auf sein eigenes virtuelles Display, erzeugt von einem Display-Treiber, den wir selbst geschrieben haben. Weil uns der Treiber gehört, müssen wir die Frames gar nicht aus Windows zurückziehen — der Treiber schiebt jeden fertigen Frame direkt zum Host. Der zusammengesetzte Frame landet in einem kleinen Shared-Memory-Ring aus GPU-Texturen, und der Host übergibt diese Texturen direkt an den Hardware-Encoder (NVENC), ohne zusätzliche Kopie. Wir nennen es IDD-push, nach dem Indirect-Display-Driver-Modell von Windows.
Was dir das bringt
- Sperrbildschirm und UAC funktionieren einfach. Der Treiber sieht den zusammengesetzten Desktop auch am Windows-Anmelde-/Sperr-/UAC-Bildschirm — du kannst dich also über den Stream anmelden und Rechteabfragen bestätigen, ohne Umschalten der Capture-Methode, ohne schwarze Frames.
- Kein DDA↔WGC-Tanz. Ein einziger Capture-Pfad deckt alles ab — nichts muss automatisch umgeschaltet werden und nichts bricht, wenn ein Overlay oder eine HDR-Animation auftaucht.
- Zero-Copy und pipelined. Frames gehen Treiber → Shared-Ring → Encoder, ohne Umweg über den Systemspeicher; das Konvertieren eines Frames überlappt mit dem Encodieren des vorherigen und hält die Zeit pro Frame niedrig.
- HDR-sicher. Derselbe Pfad trägt 10-Bit-HDR (P010 / BT.2020 PQ) — siehe HDR-Game-Streaming, das wie HDR aussieht.
Läuft der Host einmal auf einem PC ohne unseren Treiber, fällt er automatisch auf WGC/DDA zurück — IDD-push ist der schnelle Pfad, nicht der einzige.
Warum das zählt
Bildschirmerfassung klingt nach einem gelösten Problem, aber die Standardwerkzeuge wurden für Screenshots und Videocalls gebaut, nicht fürs Streamen eines gesperrten, HDR-fähigen, overlay-lastigen Gaming-Desktops bei hohen Bildraten. Weil uns der Display-Treiber gehört, überspringt punktfunk diese ganze Schicht. Zur Treiber-Seite der Geschichte siehe warum wir unseren eigenen Treiber für virtuelle Displays geschrieben haben.