|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2007 Messages : 22 ![]() |
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 |
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Bonjour,
Citation:
Après tu peux toujours regarder l'état de ton MediaPlayer pour voir si il bouge entre temps :/ Citation:
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : septembre 2007 Messages : 22 ![]() |
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 |
|
|
00
|
|
|
#4 | |||
![]() ![]() |
Citation:
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. Citation:
Citation:
En debug tu dois bien pouvoir espionner la classe ? |
|||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2007 Messages : 22 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com