VideoView getCurrentPosition () нерегулярность на Acer Iconia A200 - PullRequest
31 голосов
/ 25 февраля 2012

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

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

Видео останавливается на 6 секунд

Видео остается на 10 секунд

Видео начинает воспроизводиться снова <--- прив этот момент я хочу, чтобы видео начало воспроизводиться с 16-секундной отметки. </p>

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

Ответы [ 3 ]

1 голос
/ 16 апреля 2013

отпустите и сбросьте видеоплеер в режиме активности onpause и снова установите в onstart mtd действия. Для поиска вы должны использовать хронометр, чтобы содержать синхронизацию времени пользователя videoview.set в поиске со временем хронометра.

1 голос
/ 28 июня 2013

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

1 голос
/ 06 июля 2012

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

...