У меня есть приложение с VideoView в нем, я установил видео для воспроизведения в VideoView. В какой-то момент во время воспроизведения видео он будет приостановлен. Затем, после того, как он временно приостановлен, он снова начнет воспроизводить видео, но попытайтесь перейти к точке, в которой было бы видео, если бы оно не было приостановлено. Так, например,
Видео начнется воспроизведение
Видео приостановлено через 6 секунд
видео приостановлено на 10 секунд
Видео снова начнет воспроизводиться < --- --- в этот момент я хочу, чтобы видео начало играть с отметкой 16 секунд.
Чтобы добиться этого эффекта, я установил метки времени для выполнения требуемой математики, поэтому я знаю, как долго приостановлено видео, а затем, когда я снова запустил его, я вызываю mVideoView.seekTo(timePlayed + timePaused);
Это все работает по назначению на Toshiba Thrive и Motorola Xoom. Однако на Acer Iconia A200 Кажется, что с точки зрения, что я вызываю seekTo() вперед, VideoView всегда будет возвращать то же время, когда я звоню getCurrentPosition()
. Чтобы проиллюстрировать это, я установил runnable, который срабатывает примерно каждые 1000 мс, который регистрирует текущую позицию. Вот некоторые из результатов этого:
/****************
* 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 - это точное время, в которое я перехожу в seekTo(), поэтому кажется, что после того, как я сделаю этот вызов, VideoView всегда будет возвращать все, что я ему передаю, независимо от того, на самом деле он все еще играет и позиция продвигается.
Кто-нибудь еще испытывал эту ошибку VideoView/MediaPlayer раньше? Я видел некоторые вещи в известной группе проблем, которые говорили о том, что MediaPlayer возвращает неверные значения для getCurrentPosition(), но не нашел там, где он просто перестанет расти. Большинство из тех, что я видел, также пытались воспроизвести аудио, а не видео.