2010-08-20 5 views
1

J'essaye de faire un "visionneur de bureau à distance". Pour cela je dois envoyer le bureau de l'utilisateur - et c'est beaucoup d'informations pour les sockets ... (surtout si la résolution est élevée et l'information peut approcher 5.3MB (1680X1050))haute compression Image

J'ai donc commencé à compresser avec Le flux GZIP et les 5.3Mo devinrent 500KB, puis j'ajoutai mon propre algorithme de compression (je pense qu'il s'appelait RLE) - en prenant des pixels proches et les écrivais en format 1) 256 × 3 = 32 couleurs (pour le rouge, bleu, vert chaque) et écrire combien de pixels dans une rangée ont la même couleur. + GZIP.

qui a la compression à en moyenne 60 ~ 65KB - jusqu'à 200 Ko et il peut être aussi sous 5000 si l'écran est totalement blanc. Maintenant, je pensais (et je n'ai pas encore implémenté) sur le passage de la différence entre chaque image - pour chaque ligne que j'écris où la différence (entre les pixels) commence et combien de temps est la différence. Eh bien, cela peut aider - peut-être que je pourrais obtenir 30 Ko pour chaque image en moyenne. mais pour les prises, c'est beaucoup.

quelqu'un a jamais réussir à s'adapter à ce problème? (Et comment bien sûr ...)

+1

Avez-vous envisagé d'utiliser RDP ou VNC? Ce sont les deux protocoles qui font ** exactement ** ce que vous essayez de faire. – Borealid

+0

Les gens ont mis au point des algorithmes de compression beaucoup plus sophistiqués et beaucoup plus complexes que le gzip ou l'encodage simple. C'est un sujet de recherche entier. La visualisation à distance est particulièrement intéressante car vous pouvez économiser de la bande passante en encodant uniquement les différences entre les écrans successifs, et non l'intégralité de l'écran. La plupart des logiciels actuels le font déjà, bien que le Remote Desktop et le VNC soient franchement très loin de la recherche actuelle. – Timwi

Répondre

1

Il existe des algorithmes standards de compression d'images: par exemple JPEG. Une autre optimisation consiste à savoir quelque chose sur l'image: par exemple sur un bureau, des éléments tels que le bouton Démarrer de Windows et diverses icônes d'application et widgets dans la barre de titre sont standard: donc au lieu d'envoyer leurs valeurs de pixels , vous pouvez envoyer leurs identifiants logiques.

personnes Oui ont réussi à ce problème: les gens qui écrivent des logiciels de bureau à distance, y compris la VNC open source.

+0

merci beaucoup, d'ailleurs, oui, j'ai essayé JPG (et gif) ... il devient ~ 60KB quand la qualité est 0 et alors l'image n'est pas claire du tout. merci, je vais regarder sur ce "VNC" d'ailleurs - l'idée d'envoyer seulement les pixels changés est à peu près comme vous l'avez dit - je ne vais pas leur envoyer chaque image. Merci encore. – Ohad

+0

@Ohad JPG est une compression "avec perte"; il existe des algorithmes sans perte, y compris je pense par exemple. GIF et PNG. – ChrisW

+0

GIF perd plus de données que JPG ... PNG est peut-être bon (je n'ai pas vérifié PNG) mais il ne compresse pas assez. – Ohad

0

Vous pouvez revoir le code source d'un VNC.

La plupart des serveurs VNC mettre en œuvre plusieurs formes différentes de compression.

Questions connexes