Mentor49
myCSharp.de-Mitglied
Dabei seit: 18.03.2009
Beiträge: 35
 |
|
Hey, ich bin zurzeit mit dem Projekt "Watch another Screen" beschäftigt.
Dabei handelt es sich um eine Art "Remote Desktop", nur ohne Steuerung.
Also simpel gesagt:
> Server-Applikation auf einem Computer wartet auf Client
> Client verbindet sich zum Server
> Server sendet nun den aktuellen Desktop-Screen und alle darauffolgenden Veränderungen
> Client empängt diese Daten und stellt sich das Bild zusammen
So kann man halt vom Client-Computer aus sehen, was grade beim Server-Computer los ist.
Ich habe schon viel rumprobiert.
1. Versuch: Server macht ein Screen und verkleinert die Auflösung zu 800x600. Der Screen wird in 60 Teile/Spalten/Balken aufgeteilt (60*(10px(y)*800(x)). Jeder "Balken" wird in einer Schleife durchgegangen, sobald auch nur ein Pixel anders ist, als beim lezten Durchgang, wird der komplette Balken als Byte-Array an den Client gesendet.
Im Schema:
| Zitat: |
| Index-Byte(0-59), Pixel1-Color-R, Pixel1-Color-G, Pixel1-Color-B, Pixel2-Color-R, Pixel2-Color-G, Pixel2-Color-B, ... , ... |
Die X und Y Koordinaten kann der Client sich durch den Index-Byte selbst zusammenrechnen.
Bei diesem Versuch allerdings, wurde das ganze wirklich "balkenmäßig" beim Client angezeigt..also man hat tatsächlich gesehen dass Balken für Balken erneuert wurde..und das auch nicht wikrlich schnell.
2. Versuch: Server macht alle 300 Millisekunden (0,3s) ein verkleinerten Screen (800x600) und versendet ihn komplett zum Client. Das lief sogar sehr gut, allerdings nur lokal auf meinem Computer. Würde man das ganze durchs Internet machen, bräuchte man einen Upload von 5-6 MB pro Sekunde. (Und das auch noch bei einem schlechten FPS-Verhältnis)
3. Versuch: Server macht ein Screen und verkleinert die Auflösung zu 800x600. Server verschickt den kompletten Screen zum Client. Der Client speichert das Bild und zeigt es an. Nun wird in einer Schleife immer wieder ein Screen gemacht und jeder einzelene Pixel wird auf Veränderung überprüft. Ist ein Pixel anders, wird dieser in einem 5-Byte-Paket im Schema [Pixel-X, Pixel-Y, Pixel-Color-R, Pixel-Color-G, Pixel-Color-B] versendet.
Der Client empängt den Pixel er wird nun also im Bild ausgetauscht.
Das läuft aber soooooooooo langsam, dass man tatsächlich jeden einzelne Pixel-Veränderung beobachten kann.
Bei allen Versuchen:
- wird als Format für das Bild Bitmap benutzt
- wird zur Darstellung beim Client eine Picturebox benutzt
- eine TCP-Verbindung benutzt
- wie schon gesagt, eine Auflösung von 800x600 Pixel benutzt
Was ich nun bräuchte, wären nur theoretische Vorschläge wie man mein Anliegen bewältigen könnte.
Was ich halt gerne hätte:
- Eine Auflösung von 800x600 Pixel
- Das Bild sollte sich flüssig ändern beim Client
Ich bin für jeden Verbesserungsvorschlag/Ratschlag/Tipp wirklich dankbar!
Solltet ihr irgendwas nicht verstanden haben, bitte umbedingt nachfragen.
(Da ich weiß, dass ich nicht der beste Erklärbär bin)
Lieber Gruß. Chris ;)
|
|