Подтвердить что ты не робот

VideoView getCurrentPosition() неравномерность Acer Iconia A200

У меня есть приложение с VideoView в нем, я установил видео для воспроизведения в VideoView. В какой-то момент во время воспроизведения видео он будет приостановлен. Затем, после того, как он временно приостановлен, он снова начнет воспроизводить видео, но попытайтесь перейти к точке, в которой было бы видео, если бы оно не было приостановлено. Так, например,

Видео начнется воспроизведение

Видео приостановлено через 6 секунд

видео приостановлено на 10 секунд

Видео снова начнет воспроизводиться &lt --- --- в этот момент я хочу, чтобы видео начало играть с отметкой 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(), но не нашел там, где он просто перестанет расти. Большинство из тех, что я видел, также пытались воспроизвести аудио, а не видео.

4b9b3361

Ответ 1

Возможно, это связано с объемом свободной памяти устройства. если штанга низкая, фоновая активность может возобновиться вместе с вашим счетчиком.

Ответ 2

релиз и reset видеоплеер в режиме onpause активности и снова установить его в onstart mtd для Activity.for seekto u должен использовать хронометр, чтобы содержать временные рамки пользовательского времени videoview.set в поиске времени хронометра.

Ответ 3

Возможно, это проблема с перегрузкой основного потока пользовательского интерфейса. Поскольку видео - это элемент с высокими данными, а значки acer не являются отличным устройством, это может вызвать нехватку данных, аномалии и, возможно, даже сбой. Попробуйте добавить видео с помощью AsyncTask.