J'ai une application avec une VideoView, je règle la lecture d'une vidéo dans la VideoView. À un moment donné, pendant la lecture de la vidéo, celle-ci est mise en pause. Puis, après une pause d'un certain temps, la vidéo recommence à être lue, mais en avançant jusqu'au point où la vidéo se trouverait si elle n'avait pas été mise en pause. Ainsi, par exemple
La vidéo commence à être diffusée
Vidéo en pause à 6 secondes
la vidéo reste en pause pendant 10 secondes
La vidéo recommence à jouer <--- à ce stade, je veux que la vidéo commence à jouer à la marque de 16 secondes.
Pour obtenir cet effet, j'ai mis en place des horodateurs pour faire les calculs nécessaires afin de savoir combien de temps la vidéo a été mise en pause, puis lorsque je la relance, j'appelle mVideoView.seekTo(timePlayed + timePaused);
Tout cela fonctionne comme prévu sur Toshiba Thrive, et Motorola Xoom. Cependant, sur l'Acer Iconia A200, il semble qu'à partir du moment où j'appelle seekTo() en avant, le VideoView reviendra toujours au même moment lorsque j'appelle getCurrentPosition()
. Pour illustrer cela, j'ai mis en place un runnable qui se déclenche environ toutes les 1000 ms et qui enregistre la position actuelle. Voici une partie de la sortie de ce programme :
/****************
* These are from before it is paused/resumed
* you can see that the current time is functioning
* as expected.
******************/
Current Position = 0
Current Position = 734
Current Position = 1735
Current Position = 2703
Current Position = 3737
Current Position = 4738
Current Position = 5739
Current Position = 6740
Current Position = 7741
Current Position = 8742
Current Position = 9743
/**********************************
* These are from the exact same runnable
* after the video has been paused, and
* started again after seekTo().
* The position is no longer increasing.
* Note that the video is playing correctly on the screen
* while these logs happen.
**********************************/
Current Position = 23410
Current Position = 23410
Current Position = 23410
Current Position = 23410
23410 est le temps exact que je passe à seekTo(), donc il semble qu'après avoir fait cet appel, le VideoView retournera toujours ce que je lui passe, peu importe s'il est toujours en train de jouer et si la position avance.
Quelqu'un d'autre a-t-il déjà rencontré ce bogue VideoView/MediaPlayer ? J'ai vu des choses sur le groupe des problèmes connus qui parlaient du fait que le MediaPlayer renvoyait des valeurs incorrectes pour getCurrentPosition(), mais je n'en ai trouvé aucune où il cessait simplement d'augmenter comme ça. La plupart de ceux que j'ai vus essayaient également de lire de l'audio plutôt que de la vidéo.