2012-02-24 8 views
31

Ho un'applicazione con VideoView, ho impostato un video da riprodurre in VideoView. Ad un certo punto mentre il video è in riproduzione verrà messo in pausa. Quindi, dopo che è stato messo in pausa per un po 'di tempo, inizierà a riprodurre di nuovo il video, ma cerca in avanti fino al punto in cui il video sarebbe presente se non fosse stato messo in pausa. Così, per esempioVideoView getCurrentPosition() irregolarità su Acer Iconia A200

Il video inizia la riproduzione

Video fermò a 6 secondi

il video rimane in pausa per 10 secondi

video inizia a giocare di nuovo < --- a questo punto che voglio il video per iniziare giocando al segno dei 16 secondi.

Al fine di ottenere questo effetto mi hanno istituito timestamp fare la matematica necessaria quindi so quanto tempo il video è stato messo in pausa per, e poi quando mi metto di nuovo, io chiamo mVideoView.seekTo(timePlayed + timePaused);

Tutto questo funziona come previsto su Toshiba Thrive e Motorola Xoom. Comunque su Acer Iconia A200 Sembra che dal punto in cui chiamo seekTo() forward la VideoView tornerà sempre nello stesso momento quando chiamo getCurrentPosition(). Per illustrare questo ho impostato un runnable che spara all'incirca ogni 1000ms che registra la posizione corrente. Ecco alcune delle uscita da quella:

/**************** 
* 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 è il tempo esatto che sto passando a seekTo(), così sembra che dopo aver fatto questo invito, la VideoView restituirà sempre qualunque cosa mi passa per non importa se sta ancora suonando e la posizione sta avanzando.

Qualcun altro ha già riscontrato questo bug di VideoView/MediaPlayer? Ho visto alcune cose sul gruppo di problemi noti che stavano parlando di MediaPlayer che restituiva valori errati per getCurrentPosition(), ma non ha trovato alcun punto in cui avrebbe semplicemente smesso di aumentare in questo modo. La maggior parte di quelli che ho visto, stavano anche provando a riprodurre audio piuttosto che video.

+0

Si utilizza riprendi() per continuare dopo la pausa()? riprendere non funziona sul mio Iconia A501. getCurrentPosition() restituisce il valore passato alla ricerca ma il video è ancora in pausa. – asktomsk

+1

Puoi inviare un esempio del codice? Controllerò il mio tablet. – asktomsk

+1

Non ho visto lo stesso problema come te ma ho visto getCurrentPosition in modo inaffidabile - a volte restituisce 0 per me quando la posizione di ricerca non è 0. – MaximumGoat

risposta

1

Potrebbe avere a che fare con la quantità di memoria libera del dispositivo. se la RAM è bassa, l'attività in background può ricominciare con il contatore.

+0

se l'attività si stava riavviando, il video sullo schermo si riavvia anche. Ma il video continua a funzionare normalmente e nessuno dei miei metodi di Activity Lifecycle viene chiamato, quindi sospetto che non sia così. – FoamyGuy

1

rilasciare e reimpostare il videoplayer in modalità di attività in pausa e reimpostare in onstart mtd di un'attività.per cercare u è necessario utilizzare il cronometro per contenere i tempi del cronometro utente video.set in modo da cercare il tempo del cronometro.

1

Forse è un problema con l'overloading del thread principale dell'interfaccia utente. Poiché il video è un elemento di dati elevato e l'acer iconia non è un ottimo dispositivo, potrebbe causare una carenza di dati, anomalie e persino crash. Prova ad aggiungere il video usando AsyncTask.

Problemi correlati