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 :

Forcer la durée d'un morceau dans MediaPLayer


Sujet :

Android

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut Forcer la durée d'un morceau dans MediaPLayer
    Je suis en train de faire un lecteur audio qui lit les morceaux via un NAS à l'aide du protocol JSON-RPC, protocole qui n'autorise pas le streaming, ou alors j'ai pas bien cherché.

    Du coup je télécharge le morceau en local et quand le buffer est assez rempli je lance la lecture du morceau via le MediaPlayer Android. La méthode prepare() récupère la durée du morceau déjà bufferisé, disons 10 secondes par exemple. Cela n’empêche pas la lecture du morceau jusqu'au bout mais pose problème quand je déplace mon curseur sur la seekbar. Pour éviter ça j'utilise en fait un Mediaplayer à moi qui extends le Mediaplayer standard, et auquel je passe une "duration" approximative calculée en fonction du nombre de bits téléchargés, du nombre de bits total du morceau et de la durée déjà dispo.

    C'est approximatif car il suffit que le morceau soit en variable bitrate pour fausser le calcul, mais bon, ça marchotte.

    Du coup j'ai deux questions :
    1 - y a-t-il un moyen de forcer cette durée pour la mettre à la bonne valeur une fois que le morceau est complètement téléchargé?

    2 - Quand je lis un morceau en cours de téléchargement, je peux déplacer mon curseur sur la seekbar, la lecture se poursuit bien à l'endroit souhaité. Par exemple, pour un morceau d'une durée finale de 10000, si je fais un seekTo(7000), ça marche. Par contre si je le fais une deuxième fois, (exemple seekTo(5000)), j'ai une erreur dans le logcat : Attempt to seek to past end of the file : request 5000, EOF 1200. Alors j'imagine que 1200 correspond à la taille du morceau bufferisé au moment où j'ai instancié le Mediaplayer, mais pour quoi est-ce que ça a marché la première fois et que ça plante à la deuxième?

    Si vous avez des suggestions, même sur un autre moyen de solutionner mon problème, je suis plus que preneur.

    Un grand merci d'avoir lu tout ça, en espérant qu'une âme charitable et savante passe par ici.

    Jean

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Si vous avez des suggestions, même sur un autre moyen de solutionner mon problème, je suis plus que preneur.
    Pour la deuxième est ce que tu redéfinie le MediaPlayer lorsque tu as effectué un déplacement sur la Seek Bar ?
    Après tu peux toujours regarder l'état de ton MediaPlayer pour voir si il bouge entre temps :/

    y a-t-il un moyen de forcer cette durée pour la mettre à la bonne valeur une fois que le morceau est complètement téléchargé
    Je ne pense pas , tout ce que tu peux c'est de travailler sur le flux. Le Flux te donnera la durée, mais pas l'inverse.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    Bonjour et merci pour ces réponses,

    Je ne redéfinis pas mon MediaPlayer quand je touche à la seekBar, j'appelle juste un seekTo, c'est ce que je trouve bizarre.

    Par contre je regarderais bien l'état du MediaPlayer mais justement il ne me semble pas possible d’accéder à ces fameux états. A moins que tu ne parles d'autre chose.

    Et quand tu dis que le flux me donnera la durée, justement c'est ce que je voudrais récupérer. Sauf que dans le cas d'un flux incomplet, il me semble bien difficile d'avoir une durée exact, surtout si c'est un flux variable bitrate non? La durée je ne la récupère qu'une fois le flux entièrement téléchargé?

    Merci en tout cas pour ces réponses, je me sens un peu moins seul dans mon océan de questions

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    surtout si c'est un flux variable bitrate non
    ... là c'est impossible.

    Le seul moyen serait de le lire une fois (dans le code) pour avoir la durée puis le lancer normalement.

    Je ne redéfinis pas mon MediaPlayer quand je touche à la seekBar, j'appelle juste un seekTo, c'est ce que je trouve bizarre
    Il doit forcément se perdre à un moment donnée...

    il ne me semble pas possible d’accéder à ces fameux états
    Il faudrait essayer, je ne me rappelle plus ce que l'on peut avoir :/.
    En debug tu dois bien pouvoir espionner la classe ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    En fait je ovulais éviter de le télécharger complètement avant de commencer à le lire, j'ai des morceaux (des conférences d'1h ou plus) que j'aimerais justement streamer... Donc pas de première lecture du flux sans téléchargement complet.

    Ensuite, oui je peux espionner la classe mais il semble, après recherches, que les états du MediaPlayer soient volontairement cachés au developpeur... pas cool!

    Pour la seekbar, je continue de cherche.

    Merci

Discussions similaires

  1. Forcer l'ouverture d'un lien dans un nouvel onglet IE
    Par lucie.houel dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 30/11/2007, 09h47
  2. Comment forcer une page web à s'afficher dans un cadre?
    Par lazario dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/10/2007, 14h39
  3. Comment forcer la sélection d'une ligne dans un DataGridView
    Par Pizza Royale dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/06/2007, 13h32
  4. Forcer l'emploi d'une variable dans Procedure
    Par Arvulis dans le forum Oracle
    Réponses: 2
    Dernier message: 17/06/2006, 11h58
  5. Forcer l'affichage d'une page dans un cadre
    Par Thcan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/11/2005, 11h58

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