2012-02-24 14 views
31

Tengo una aplicación con VideoView, configuré un video para reproducir en VideoView. En algún momento mientras se reproduce el video, se pausará. Luego, después de que está en pausa por un tiempo, comenzará a reproducir el video de nuevo, pero busque el punto en el que el video estaría si no se hubiera detenido. Así, por ejemploVideoView getCurrentPosition() irregularidad en Acer Iconia A200

vídeo comienza a reproducirse

vídeo se detuvo en 6 segundos

de vídeo permanece en pausa durante 10 segundos

vídeo comienza a reproducirse de nuevo < --- en este punto quiero el video para iniciar jugando en la marca de 16 segundos.

Con el fin de lograr este efecto que han establecido las marcas de tiempo para hacer los cálculos necesarios, así que sé cuánto tiempo el video se detuvo, y luego, cuando me pongo de nuevo, me llame mVideoView.seekTo(timePlayed + timePaused);

Todo esto funciona según lo previsto en Toshiba Thrive y Motorola Xoom. Sin embargo, en Acer Iconia A200 parece que desde el momento en que llamo seekTo() hacia delante, la VideoView siempre regresará al mismo tiempo cuando llamo al getCurrentPosition(). Para ilustrar esto, configuré un ejecutable que se dispara aproximadamente cada 1000ms que registra la posición actual. Aquí es parte de la salida de ese:

/**************** 
* 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 es el momento exacto en el que estoy pasando a seekTo(), por lo que parece que después de hacer esta llamada la VideoView siempre devolverá todo lo que pase en a no importa si todavía está jugando y la posición está avanzando.

¿Alguien más ha experimentado este error VideoView/MediaPlayer antes? Vi algunas cosas en el grupo de problemas conocidos que hablaban de MediaPlayer que devolvía valores incorrectos para getCurrentPosition(), pero no encontré ninguna donde simplemente dejaría de aumentar así. La mayoría de los que vi, también intentaban reproducir audio en lugar de video.

+0

¿Utiliza reanudar() para continuar después de la pausa()? reanudar no funciona en mi Iconia A501. getCurrentPosition() devuelve el valor pasado para buscar, pero el video sigue en pausa. – asktomsk

+1

¿Puedes enviar un ejemplo del código? Revisaré mi tableta. – asktomsk

+1

No he visto el mismo problema que usted, pero he visto que getCurrentPosition actúa de manera no confiable: a veces me devuelve 0 cuando la posición de búsqueda no es 0. – MaximumGoat

Respuesta

1

Puede tener que ver con la cantidad de memoria libre del dispositivo. si el ram es bajo, la actividad de fondo puede reiniciarse junto con tu contador.

+0

si la actividad se reinicia, el video en la pantalla también se reiniciará. Pero el video continúa sonando normalmente y ninguno de mis métodos de ciclo de actividad está siendo invocado, así que sospecho que este no es el caso. – FoamyGuy

1

suelte y reinicie el reproductor de videos en el método de actividad de onpause y establezca nuevamente en onstart mtd de una actividad. Para buscar, debe usar el cronómetro para contener el tiempo de videoview.set del usuario en la búsqueda del tiempo del cronómetro.

1

Quizás sea un problema con la sobrecarga de la hebra de la IU principal. Dado que el video es un elemento de datos de alto nivel y que acer iconia no es un gran dispositivo, podría causar escasez de datos, anomalías y posiblemente incluso fallas. Intenta agregar el video usando AsyncTask.

Cuestiones relacionadas