Android VideoView - определить момент времени в видео

Я использую VideoView для отображения видео. Я использую setOnPreparedListener и setOnCompletionListener, чтобы делать что-то до и после начала и окончания видео.

Мне было интересно, как я могу определить какой-то момент времени в видео. Например, скажем, я хочу записать журнал в файл, когда видео воспроизводится в течение 10 секунд. Как я могу обнаружить отметку 10s?

Спасибо Крис


person Chris    schedule 10.05.2010    source источник


Ответы (1)


Шаг № 1: Используйте postDelayed() или что-то подобное, чтобы получить контроль каждую секунду или около того.

Шаг № 2: Отметьте getCurrentPosition() и посмотрите, находится ли он рядом с желаемой точкой маркера. Если да, сделайте свою обработку.

Шаг № 3: Вспенить, смыть, повторить.

У Android нет механизма, чтобы звонить вам конкретно, когда в видео наступает определенный момент времени, поэтому вам приходится обходиться механизмом опроса.

person CommonsWare    schedule 10.05.2010
comment
по моему опыту, это работает до определенного момента, но не очень точно. Возможно +/- 500 мс - person justinl; 14.08.2010
comment
Есть ли преимущество в использовании postDelayed по сравнению с таймером, просто проверяющим текущую позицию. Мне было интересно, есть ли какое-либо преимущество в использовании обработчиков по сравнению с использованием таймеров в Android. - person sleeping.ninja; 15.07.2012
comment
@sleeping.ninja: для таймеров требуется поток; postDelayed() нет. - person CommonsWare; 15.07.2012
comment
@CommonsWare - я новичок в Android, так что поправьте меня, если я ошибаюсь. Потоки происходят за кулисами, верно? Так что не было бы более эффективным, если бы вы установили таймер для проверки позиции видео каждые несколько миллисекунд (проверка происходит в отдельном потоке). Достигнув желаемой позиции, я могу заставить что-то ТОГДА произойти в потоке пользовательского интерфейса. Имеет ли это смысл? Вы бы назвали это лучшим подходом? Не думаю, что разница в производительности стоила бы даже обсуждения, но я просто хотел знать, было ли использование таймера хорошей идеей. - person sleeping.ninja; 16.07.2012
comment
@sleeping.ninja: Потоки происходят за кулисами, верно? -- в существующем потоке, называемом основным потоком приложения. Так что не было бы более эффективным, если бы вы установили таймер - я не вижу, как два потока, делающие то же самое, что можно сделать с одним потоком, более эффективны. - person CommonsWare; 16.07.2012
comment
@CommonsWare - я цитирую Android Docs. У каждого таймера есть один поток, в котором задачи выполняются последовательно. На мой взгляд, было бы более эффективно иметь поток, который опрашивает позицию, в то время как основной поток продолжает воспроизводить видеоконтент. Основной поток нужно блокировать только тогда, когда что-то действительно должно произойти. - person sleeping.ninja; 22.07.2012
comment
@sleeping.ninja: Основной поток не воспроизводит видеоконтент. Видеоконтент всегда воспроизводится потоком, предоставленным MediaPlayer. - person CommonsWare; 22.07.2012
comment
Есть ли лучшее решение сейчас или это все еще «лучший» способ? - person Benoit; 12.02.2014
comment
@Benoit: Насколько я знаю, это лучший подход. - person CommonsWare; 12.02.2014