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.
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
Czy możesz wysłać przykład kodu? Sprawdzę na moim tablecie. – asktomsk
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