IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Android stream JPEG et surtout affichage


Sujet :

Android

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Android stream JPEG et surtout affichage
    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.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    J'ai une application qui fait le même genre de chose (réception d'un flux jpeg via socket et affichage sur des imageview) , et j'ai pas l'impression d'avoir une grosse latence.
    Perso je reçois un tableau byte que je passe ensuite dans BitmapFactory#decodeByteArray();J'ai entre 4 et 12 thread qui affiche sur des imageview sans gros problèmes.

    Ce que je comprends dans ton explication c'est que tu as bien un flux à 20 fps mais que tu es en retard sur le flux "live". Est ce que ça pourrait pas simplement être un problème de réseau (genre wifi) , as tu essayé depuis un émulateur pour voir si la latence diminue ?
    Il faudrait identifier où se trouve le ralentissement en ajoutant par exemple un timestamp à tes images et en le comparant au temps actuel quand les images arrives.

    En gros ça peux venir :
    - du réseau
    - du décodage
    - du passage thread réseau vers thread ui
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Salut,

    J'ai déjà affiché du jpg, jamais observé ce problème (à moins que je me trompe).
    Je regarderais prochainement

    Oui le decodestream me dit qqch.
    Si la réponse vous a aidé, pensez à cliquer sur +1

Discussions similaires

  1. [QuickReport] Affichage Image JPEG
    Par DragonHeart dans le forum Delphi
    Réponses: 5
    Dernier message: 17/04/2007, 16h47
  2. Problème d'affichage de jpeg
    Par niko.nik2 dans le forum Delphi
    Réponses: 10
    Dernier message: 12/06/2006, 09h43
  3. [Struts] Probleme d'affichage d'un JSP et surtout un fom
    Par adilou1981 dans le forum Struts 1
    Réponses: 7
    Dernier message: 21/04/2006, 12h20
  4. Affichage d'un JPEG, déjà en mémoire.
    Par jcs2 dans le forum Langage
    Réponses: 2
    Dernier message: 19/02/2006, 15h48
  5. [SGBD] affichage d'image jpeg depuis une base mysql
    Par eric_300 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/09/2005, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo