2012-02-24 10 views
31

Mam aplikację z VideoView w nim, ustawiłem wideo do odtwarzania w VideoView. W pewnym momencie odtwarzanie wideo zostanie wstrzymane. Następnie po pewnym czasie zacznie ponownie odtwarzać wideo, ale staraj się dotrzeć do punktu, w którym wideo byłoby włączone, gdyby nie zostało wstrzymane. Tak na przykładVideoView getCurrentPosition() nieprawidłowość na Acer Iconia A200

Film rozpoczyna odtwarzanie

Wideo wstrzymane na 6 sekund

wideo pozostaje wstrzymane przez 10 sekund

Film zaczyna grać ponownie < --- w tym momencie chcę, aby uruchomić wideo grając w 16-sekundowym znaku.

W celu osiągnięcia tego efektu mam ustawić znaczniki czasu, aby wykonać żądaną matematyki, więc wiem, jak długo film został wstrzymany do, a następnie, kiedy zacznę go ponownie wzywam mVideoView.seekTo(timePlayed + timePaused);

to wszystko działa zgodnie z przeznaczeniem dla Toshiba Thrive i Motorola Xoom. Jednak na Acer Iconia A200 Wydaje się, że od momentu, w którym nazywam seekTo() do przodu, VideoView zawsze będzie zwracał ten sam czas, kiedy zadzwonię pod numer getCurrentPosition(). Aby to zilustrować, ustawiłem runnable, który wystrzeliwuje z grubsza co 1000 ms, rejestrując bieżącą pozycję. Oto wynik działania, które:

/**************** 
* 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 jest dokładny czas, że jestem przechodząc do seekTo(), więc wydaje się, że po tym, jak uczynić ten nazywamy VideoView zawsze zwróci cokolwiek przekazać do to, bez względu na to, czy w rzeczywistości wciąż gra, a pozycja się rozwija.

Czy ktoś jeszcze wcześniej doświadczył tego błędu w VideoView/MediaPlayer? Widziałem pewne rzeczy w znanej grupie problemów, które mówiły o MediaPlayerze zwracającym nieprawidłowe wartości dla getCurrentPosition(), ale nie znalazły żadnego miejsca, w którym po prostu przestałyby się zwiększać w ten sposób. Większość z tych, które widziałem, również próbowała odtwarzać dźwięk, a nie wideo.

+0

Czy używasz resume(), aby kontynuować po pause()? wznowienie nie działa na moim Iconia A501. Funkcja getCurrentPosition() zwraca wartość przekazaną do wyszukiwania, ale wideo jest nadal wstrzymane. – asktomsk

+1

Czy możesz wysłać przykład kodu? Sprawdzę na moim tablecie. – asktomsk

+1

Nie widziałem tego samego problemu co ty, ale widziałem, że działanie getCurrentPosition działa nierzetelnie - czasami zwraca mi 0, gdy pozycja szukania nie jest równa 0. – MaximumGoat

Odpowiedz

1

Może to dotyczyć ilości wolnej pamięci urządzenia. jeśli baran jest niski, aktywność tła może się ponownie uruchomić wraz z twoim licznikiem.

+0

Jeśli aktywność została uruchomiona ponownie, wideo na ekranie również zostanie uruchomione ponownie. Ale wideo nadal gra normalnie i żadna z moich metod Lifecycle Activity nie jest wywoływana, więc podejrzewam, że tak nie jest. – FoamyGuy

1

zwolnić i zresetować odtwarzacz wideo w trybie onpause aktywności i ustawić ponownie w onstart mtd aktywności.do seekto u musi używać chronometru do przechowywania czasu timera wideoview.set w seekto do czasu chronometru.

1

Może to problem z przeciążeniem głównego wątku interfejsu użytkownika. Ponieważ wideo jest elementem o wysokich danych, a acer iconia nie jest doskonałym urządzeniem, może to spowodować pewne niedobory danych, anomalie, a nawet awarię. Spróbuj dodać wideo za pomocą AsyncTask.

Powiązane problemy