Функция VideoView seekto() чрезвычайно непоследовательная
Я пытаюсь найти конкретное место в видео на Android, и я полностью застреваю из-за несоответствий, которые он проявляет в своем поведении. Вот список вещей, которые я сделал
- VideoView.Seekto отправляется на 5:19 для одного видео, 5:17 для одного видео и 5:32 для другого за одни миллисекунды (326000 мс)!
- Поскольку VideoView не поддерживает onSeekListener, я изменил источник VideoView и дополнительную поддержку для него. Тем не менее, он не останавливается и начните искать, откуда я хочу - всегда есть отставание! onSeekListener вызывается немедленно через 6 секунд, прежде чем я захочу остановиться. Во многих случаях панель поиска показывает правильное время и внезапно возвращается несколько секунд, даже если я звоню video.start from onSeekCompleteListener
Почему это так непоследовательно? Есть ли определенный способ поиска того, куда вы хотите пойти в миллисекундах в видеообъявлениях? Я знаю, что должен использовать MediaPLayer + Surface, но поскольку VideoView - это всего лишь оболочка из двух, я модифицирую его у источника, но безрезультатно.
Мне это известно: http://code.google.com/p/android/issues/detail?id=9135
Но есть ли способ обойти это и иметь определенный способ
1.) Ищет точное время в миллисекундах
2.) Приостановка и возобновление в точное время?
Ответы
Ответ 1
Вам нужно подождать завершения поиска.
VideoView не имеет OnSeekCompleteListener(), но вы можете получить доступ к MediaPlayer из метода onPrepared VideoView, а затем установить OnSeekCompleteListener, например:
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
//Seek completed. Move seekbar
}
});
}
});
Ответ 2
Я знаю, что это не правильное решение вашего вопроса, но посмотрите на эту библиотеку, которая выполняется над просмотром видео по умолчанию Google
https://github.com/brianwernick/ExoMedia
Он имеет все функциональные возможности и многое другое, которые поддерживаются видео по умолчанию по умолчанию.
Вы можете использовать это видео и emVideoView.seekTo(1000);
для перехода на 1000 миллисекунд в видео. Вы также можете setOnSeekCompletionListener
выполнить процесс, когда поиск завершен.
Ответ 3
Я решил эту проблему вроде этого
функция seekTo() не работает в VideoView