Partage
  • Partager sur Facebook
  • Partager sur Twitter

Optimiser l'envoie d'une image via sockets ?

Sujet résolu
    14 décembre 2011 à 15:53:11

    Bonjour,

    je suis sous java , je développe une application client/serveur demande beaucoup de trafic , alors je cherche comment optimiser mon programme....
    j'explique le principe :
    le serveur construit une image Gif de taille 120Ko (aux max) , ensuite il envoie cette image vers le client a chaque n ms..... , je me demande si je transforme l'image a une matrice des pixels et je l'envoie ça sera beaucoup plus mieux ??

    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      14 décembre 2011 à 15:54:44

      J'ai le même problème que toi, je poste pour suivre le topic.
      • Partager sur Facebook
      • Partager sur Twitter
      Pour ceux qui souhaiteraient apprendre à développer en Rust, un tuto en français est dispo ici. Pour voir mes projets : github.
        14 décembre 2011 à 16:09:56

        Je ne vois pas comment envoyer une matrice de pixels pourrait être plus optimisé qu'envoyer la même chose mais compressée.

        D'autre part, je ne vois pas pour quelle raison bizarre tu as besoin d'envoyer une image toutes les n ms.

        Tu peux nous en dire plus sur l'architecture de ton programme ? J'ai l'impression que s'il y a une amélioration, c'est là qu'il faut la chercher.
        • Partager sur Facebook
        • Partager sur Twitter
          14 décembre 2011 à 16:15:57

          A priori, ça sera plus lourd si tu stockes l'image dans un tableau de w*h pixels...
          Vu qu'ici, c'est compressé... Ton tableau ne le sera pas du tout.

          C'est ici qu'intervient la compression... Ici, vu que c'est un flux, tu peux espérer n'avoir à stocker que les différences entre les images, mais encore faut-il les calculer.

          Il fait un "teamviewer" si mes souvenirs sont bons.
          • Partager sur Facebook
          • Partager sur Twitter
            14 décembre 2011 à 16:25:09

            Hum donc la seule solution serait de compresser des images déjà compressées ? Bizarre mais je présume que c'est faisable, reste plus qu'à trouver comment.
            • Partager sur Facebook
            • Partager sur Twitter
            Pour ceux qui souhaiteraient apprendre à développer en Rust, un tuto en français est dispo ici. Pour voir mes projets : github.
              14 décembre 2011 à 16:33:40

              Cherches pas, tu n'arriveras pas à faire mieux que les algos de compression actuels. C'est des équipes de chercheurs qu'il y a derrière.

              Non, c'est un problème d'architecture de ton programme.
              Tu peux commencer par essayer de :
              • Transmettre seulement les parties d'écran qui ont changé (image transmise = plus petit rectangle qui contient tous les pixels modifiés + coordonnées d'un coin pour pouvoir la replacer)
              • Transmettre seulement les pixels qui ont changé : pour chaque pixel, comparaison avec l'ancienne image --> si identiques alors transparent dans la nouvelle --> compression de l'image obtenue --> transmission --> affichage
              • Réduire le nombre de couleurs de l'image à transmettre
              • Utiliser un format de compression plus adapté que le GIF : le PNG, JPEG, WEBP ...

              Quoiqu'il en soit, si c'est vraiment un teamview, ce genre d'appli nécessite par construction une grosse bande passante. Tu ne feras pas de miracles.
              • Partager sur Facebook
              • Partager sur Twitter
                14 décembre 2011 à 16:40:04

                Mon programme est différent du sien, je n'envoie l'image qu'une fois à la demande d'un client quand il ouvre une fenêtre, tout ce que je voulais faire c'était optimiser l'envoi/réception pour que le transfert soit le plus court possible.
                • Partager sur Facebook
                • Partager sur Twitter
                Pour ceux qui souhaiteraient apprendre à développer en Rust, un tuto en français est dispo ici. Pour voir mes projets : github.
                  14 décembre 2011 à 16:44:07

                  J'utilise le jpg, mais ma question tournait surtout autour de la possibilité de compresser encore ces données. Mais si ce n'est pas possible tant pis...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Pour ceux qui souhaiteraient apprendre à développer en Rust, un tuto en français est dispo ici. Pour voir mes projets : github.
                    14 décembre 2011 à 16:49:59

                    Bah tu peux hein, mais la qualité risque d'être immonde.
                    C'est quoi comme type d'images ?

                    Si c'est des trucs genre screenshot, avec plein de grands à-plats et des détails très ponctuels (texte), le PNG est beaucoup plus indiqué et sera plus léger (en plus tu peux diminuer les couleurs).
                    Si c'est des photos, regarde du côté de JPEG2000.
                    Y'a WEBP aussi, je ne sais pas ce que ça vaut.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 décembre 2011 à 16:57:26

                      Je m'en sers comme photo de profil donc c'est un peu tout... JPEG2000 ? J'vais regarder ça !
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Pour ceux qui souhaiteraient apprendre à développer en Rust, un tuto en français est dispo ici. Pour voir mes projets : github.
                        14 décembre 2011 à 18:46:03

                        Citation : imperio

                        Hum donc la seule solution serait de compresser des images déjà compressées ? Bizarre mais je présume que c'est faisable, reste plus qu'à trouver comment.


                        C'est en fait de la 2e solution de SpaceFox que je parlais.
                        Mais ça ne s'applique effectivement pas à toi vu que tu ne veux qu'une image.
                        Bah toi, la seule solution est effectivement de trouver le meilleur compromis bande passante/qualité.
                        De ce que j'ai vu, JPEG2000 semble effectivement être bien.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 décembre 2011 à 20:58:41

                          bonsoir,
                          dommage, j'ai cru que ça peut-être une bonne idée...

                          Citation : SpaceFox

                          Cherches pas, tu n'arriveras pas à faire mieux que les algos de compression actuels. C'est des équipes de chercheurs qu'il y a derrière.


                          Transmettre seulement les pixels qui ont changé : pour chaque pixel, comparaison avec l'ancienne image --> si identiques alors transparent dans la nouvelle --> compression de l'image obtenue --> transmission --> affichage




                          j'ai contacté un développeur dans la w3c j'ai lui raconté mon problème il m'a dit que il existe une technique trés courante elle s'appel 'Clipping ' utilisable sous windows,linux... et les algorithmes ne sont pas difficiles..
                          je crois que ça ne sert a rien , en effet il n'ya pas de différence entre un pixel transparent, et un pixel avec couleur...
                          les deux sont caractérisée par 3 valeurs RGB ....

                          finalement j'ai pensé a utiliser une librairie(SDL normalement suffis) pour utiliser la carte graphique , c'est plus rapide pour le traitement d'image .... voila
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 décembre 2011 à 21:11:03

                            Ma première remarque s'adressait à imperio ; je lui disais qu'il était inutile de chercher à recompresser des images déjà compressées (à condition d'avoir choisi le bon algo au départ).

                            La transparence permet de donner la même valeur à tous les pixels non modifiés, ce qui ce compresse en général beaucoup mieux.
                            La carte graphique n'a rien à voir avec les problématiques réseau que tu exposes au début.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 décembre 2011 à 0:05:14

                              Bonsoir a tous ,

                              Citation : SpaceFox

                              La carte graphique n'a rien à voir avec les problématiques réseau que tu exposes au début.


                              non tu na pas compris mon intérêt,, j'utilise la carte graphique pour le calcul de la différence entre les images(compression) ainsi pour l'affichage chez le client, ça accélère la procédure....

                              je me demande matlab ne fera pas l'affaire ? :euh:
                              merci
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 février 2012 à 17:58:30

                                Bonjour a tous,
                                je suis de retour j'aimerai partager la solution avec ceux qui ont le même problème que moi , a propos mon projet il est suspendu vue que mes études m’empêche... mais voila je fait de recherches de temps en temps..
                                j'ai trouvé les API du protocol RFB dans le site de RealVNC, Enfin :
                                http://libvncserver.sourceforge.net/
                                http://libvncserver.sourceforge.net/do [...] rver_doc.html
                                http://libvncserver.sourceforge.net/do [...] iewer_8c.html
                                (entre parenthèse j'ai trouvé des difficultés de trouver ces liens peut-être qu'il est n'est pas très utilisé...)

                                @SpaceFox:

                                Citation : marwen109

                                finalement j'ai pensé à utiliser une librairie(SDL normalement suffis) pour utiliser la carte graphique , c'est plus rapide pour le traitement d'image .... voila




                                Citation : SpaceFox

                                La carte graphique n'a rien à voir avec les problématiques réseau que tu exposes au début.



                                Je ne sais pas si tu a bien remarqué dans les liens, RFB utilise SDL en claire :) j'ai déjà pensé qu'il faut l'utiliser ^^.
                                voila finalement avec RFB je m'en sors très bien enfin..
                                Merci quand même pour ceux qui ont m'aidé.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Optimiser l'envoie d'une image via sockets ?

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown