Bonjour,
Je cherche à faire une application qui récupère un flux jpeg et l'affiche à l'écran.
Cette application je l'ai faite en tant qu'application Java standard d'abord et c'est OK.
Maintenant je cherche à la faire sous Android et j'ai un souci de latence "énorme" et je pense que ça vient de mon traitement sous Android, je m'explique ...
Les images arrivent au format jpeg, elles font entre 30ko et 50ko, ça tourne a 20 FPS, (jusque là ça va)
Maintenant pour les afficher dans un ImageView il faut utiliser un Bitmap ou dérivé.
Je convertis donc mon image en Bitmap en la mettant dans un Bitmap avec Bitmapfactory.decodestream(); //Quelque chose du genre
Et là surprise (ou pas), quand je vois la taille de l'image stockée dans un Bitmap, ça passe à 1.3 Mo (+/-), se qui est normal puisque en bmp la taille c'est 4 * largeur * hauteur, (4*640*480)
Donc j'aurais tendance à dire que là où je perds du temps c'est sur le traitement, plus précisément sur le fait que l'application se retrouve à devoir manier autant d'octets pour une conversion que je ne souhaite pas vraiment alors que le flux de jpeg continue d'arriver.
Mais voilà, pour moi on a pas le choix avec ImageView, on est obligé de passer par des Bitmap ou dérivés, donc la conversion se fera systématiquement. Me trompe-je ?
Je me demande donc s'il existe un autre viewer qui prend directement les JPEG ? Ca éviterait toute conversion inutile en bmp.
Je pense que le ImageView ne prend que les Bitmap et dérivés, est-ce réellement le cas ? Là-dessus il me semble que oui donc c'est "mort".
Voyez vous une autre façon de procéder ? J'avais pensé directement à parser l'image jpeg moi même et l'afficher moi même pixel par pixel sur un canvas ou dérivé mais cette solution reste fastidieuse à programmer.
Sinon, on m'a proposé quelque chose et je vais regarder de ce coté "GLSurfaceView".
Sinon on m'avait indiqué une autre solution, je ne l'ai pas encore testée mais a priori elle ne me plaît pas trop. Celle-ci consiste à utiliser un bitmap mais en diminuant ça qualité et donc ça taille. En gros ça voudrait dire: Récupérer un jpeg "correct" le convertir en Bmp, réduire la qualité du bmp (au point que ce soit pire que le jpeg d'arrivée) pour avoir un poids toujours plus haut que le jpeg d'arrivée...
Quelqu'un saurait-il m'indiquer comment procéder au mieux ?
Merci d'avance pour votre aide.
Partager