J'utilise MediaPlayer sur Honeycomb et ne peux pas obtenir la durée d'une vidéo HLS (http live streaming) dans la fonction onPrepared().Android MediaPlayer: getDuration() renvoie 0 après prepare()
Si getDuration()
est appelée après prepare()
, elle retourne 0:
public void onPrepared(MediaPlayer mp) {
// getduration returns 0
mediaPlayer.start();
Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}
Cependant, les vidéos commence à jouer.
Si getDuration()
est appelé à onVideoSizeChanged()
il renvoie la valeur correcte,
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
// returns the correct value
Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}
Pourquoi getDuration()
travail onVideoSizeChanged()
mais pas dans onPrepared()
?
Édition: Au début, je pensais que getDuration() ne fonctionnait pas du tout, mais je l'ai trouvé pour retourner la valeur correcte dans onVideoSizeChanged(). Question modifiée pour refléter cela.
Merci pour l'explication utile! – jules
Que se passe-t-il si mp.getDuration() appelé dans un thread, ce thread appelé chaque 100ms? Je pense qu'à un moment donné cette fonction ne revient pas à zéro mais elle n'est pas correcte. Pourquoi ? – phongvan