AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bildübertragung bei VNC-ähnlichem Tool
Thema durchsuchen
Ansicht
Themen-Optionen

Bildübertragung bei VNC-ähnlichem Tool

Ein Thema von meisteralex · begonnen am 21. Dez 2005 · letzter Beitrag vom 27. Dez 2005
Antwort Antwort
Seite 2 von 2     12   
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#11

Re: Bildübertragung bei VNC-ähnlichem Tool

  Alt 23. Dez 2005, 15:52
So werd jetzt erstmal ein paar Test fahren bevor ich weiterprogrammieren
Die Test sollen folgendes umfassen:
Komprimierungszeiten, sowie Komprimierungsgrößen in abhängigkeit von der Größe des Bitmaps, sowie der Beschaffenheit des bitmaps (pixelgrafik oder vektorgrafik(art)).
dann werde ich die mal grafisch aufbereiten und hier posten.
danach wollte ich dann verschiedene komprimierungsalgos + methoden implementieren und anhand einer aufgenommenen arbeitssequenz am computer die datenraten testen.
puh, wird viel arbeit *g*
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Bildübertragung bei VNC-ähnlichem Tool

  Alt 23. Dez 2005, 20:22
Zitat von negaH:
Diese Metadaten schiebst du dann noch durch eine Huffman Komprimierung.
Vorsicht: Der klassische Huffman ist ineffizient und packt nicht sonderlich gut. Der Adaptive Huffman ist sehr gut, aber leider langsam. Meines Wissens nach ist LZW, der im z.B. im GIF-Format zu Einsatz kommt, ein guter Kompromiss zwischen Geschwindigkeit und Packgröße. Natürlich ist es nicht der beste Algorithmus, aber wie gesagt, sauschnell.

Der Rest Deines Vorschlages deckt sich (wie üblich) mit Meinen weiter oben erwähnten Ideen (oder umgekehrt). Die rekursive Herangehensweise ist interessant, wird aber nicht sonderlich performant sein, da Du vor dem rekursiven Abstieg wissen musst, ob sich überhaupt etwas im aktuellen Quadranten geändert hat. Wenn ja, unterteilst Du den Quadranten und analysierst das Ganze doch nochmal...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: Bildübertragung bei VNC-ähnlichem Tool

  Alt 25. Dez 2005, 07:35
Zitat:
Der Rest Deines Vorschlages deckt sich (wie üblich) mit Meinen weiter oben erwähnten Ideen (oder umgekehrt). Die rekursive Herangehensweise ist interessant, wird aber nicht sonderlich performant sein, da Du vor dem rekursiven Abstieg wissen musst, ob sich überhaupt etwas im aktuellen Quadranten geändert hat. Wenn ja, unterteilst Du den Quadranten und analysierst das Ganze doch nochmal...

der Gedankenansatz ist rekursiv aber NICHT die Implementierung !

Der Denkansatz ist deshalb rekursiv und eine Exponentation zur Basis 2 weil so die geringste Komplexität von O(ln2(n)^2) rauskommt, also schon eine ziemlich gute Komplexität.
Das heist aber nicht das man rekursiv nun das ganze implementiert. Umgedreht sollte es implementiert werden. Beim Auftreten einer Menge von geänderten Pixeln werden diese Pixel solange zu Rechtecken a 2^i Breite und Höhe zusamengefasst wie sich das entstehende Komprimierungsverhältnis noch als schlecht herausstellt. Sobald das Komprimierungsverhältnis also besser 2 oder 3 etc.pp wird hört man mit der Zusammenfassung dieser Rechtecke auf.

Da wir in unserem Datenstrom nun eine reine RLE Codierung benutzen (übrigens eine der einfachsten und effizientesten Komprimierung von sequientiellen Bitmapdatenströmen) würde man anschließend auf diesen RLE Datenstrom mit LZW arbeiten. Man entfernt mit LZW also redunante RLE Codeketten. Danach kann man effektiv nur noch Huffman darauf anwenden.

Aber ich glaube das LZW/Huffman im Grunde garnicht notwendig ist, wenn man das zeitliche Updateinterval hoch wählt. Das heist man überträgt immer sehr schnell die wenigen rechecktigen Änderungen zwischen den Bitmaps. Und das wird möglich weil in einem Fensterorientierten Betriebsystem die Änderungen an den Bitmaps ebenfalls sehr wahrscheinlich immer rechteckig sind.

Eines steht fest: diese Art der Komprimierung wird als verlustfreie Komprimierung JEDE normale Komprimierung wie GIF, BMP, PNG outperformen müssen. Einfach weil wir schon in advance uns spezielles Wissen über die Häufigkeit und Art der Änderungen Gedanken gemacht haben und diese in unserer Komprimierung einfließen lassen.

Nur noch verlustbehaftete Algorithmen wie MPEG in Videos kann das übertreffen.

Ausser man macht es wie zb. Windows und hookt alle GDI Operationen. Man fängt also alle Grafikoperationen der Prozesse auf dem Desktop ab und überträgt wie in einem Metafile nur die auszuführenden Operationen als Befehlssequenzen. Statt also das Resultat von zb. DrawText(100,200, 'Test') als Pixels zu übertragen wird direkt der Befehl "zeiche an 100,200 den Text 'Test'" übertragen. Das ist Informationstheoretisch am besten und ermöglicht die beste Komprimierung !

Gruß Hagen
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#14

Re: Bildübertragung bei VNC-ähnlichem Tool

  Alt 27. Dez 2005, 15:43
wie kann ich die hooks den abfangen ?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: Bildübertragung bei VNC-ähnlichem Tool

  Alt 27. Dez 2005, 18:47
Schau mal in der Win32-Hilfe, wie und was man 'hooken' kann.

Man muss bei den Überlegungen die Übertragungsrate mit berücksichtigen. Ich arbeite z.B. per VPN und gedeckelter Bandbreite (leider). Ich verwende NetOp, das GDI hookt sowie Dameware, das nur über Bitmaps arbeitet. Bei Bandbreiten von < 6kb ist eine farbreduzierte Übertragung per Bitmapdifferenzen erträglich, bei höheren Bandbreiten macht sich die ziemlich gute GDI-Performance bemerkbar. Aber optimal ist das echt Alles nicht, insofern wäre es sehr interessant, die Ergebnisse hier mal zu erfahren.

Eine Optimierung hinsichtlich der Geschwindigkeit ist eine ziemlich komplexe Angelegenheit, denn hier muss nicht nur die CPU beider Seiten, sondern auch die Bandbreite berücksichtigt werden. Nicht schlecht!

Meine Erfahrungen in einem 10/100mbit Netzwerk sind ernüchternd. Nur NetOp mit GDI-Übertragen kommt in Ansätzen dem flüssigen Arbeiten nahe, ansonsten ist das alles eine Krücke.

Mit den MS Terminal Services hatte ich nur 1x was zu tun.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz