Android Native Video плеер с субтитрами - PullRequest
5 голосов
/ 10 октября 2011

В настоящее время я разрабатываю видеоплеер для Android. Я создал простое текстовое представление, которое показывает текущие субтитры.

Проблема в том, что: Метод getCurrentPosition () MediaPlayer дает мне время только в секундах. И мне нужно это значение в миллисекундах, чтобы правильно синхронизировать субтитры с фильмом.

Предполагается, что getCurrentPosition дает мне время в миллисекундах, но дает время в секундах * 1000 (каждое число заканчивается на "000").

  1. Знаете ли вы лучший способ сделать это?
  2. Как узнать время в миллисекундах?
  3. Генерация события точно во время секунды (000 мс) также будет работать.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

На случай, если кому-то понадобится, я сделал свое решение.

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

Каждые 20 секунд воспроизведения видео я делаю эту процедуру:

  1. Запросить у медиаплеера текущие секунды (получили s секунд)
  2. Попросите медиаплеер на текущие секунды, пока результат не будет s + 1 (s0)
  3. Получить системное время (миллисекунды) для этого времени (м0)

Теперь, если я хочу текущий фильм, миллисекунды:

  1. Получить текущее системное время (миллисекунды) (м1)
  2. Реальное время фильма: s0 + (m1-m0)

Легко, и в результате синхронизированы субтитры;)

0 голосов
/ 20 августа 2012

1) Анализ файла субтитров
2) Используйте класс CounterTimer, установив его в player.getDuration (), затем установите интервал по вашему выбору в методе тика (который вызывается в каждом интервале) getтекущая позиция вашего игрока с помощью player.getCurrentPosition ();(Помните, что это вернет вам время в миллисекундах).Также не забудьте сохранить и сохранить millisecondsLeft.
3) преобразовать его в желаемый формат и сопоставить его с выбранным временным хэш-картой или массивом.
4) Обновите текстовое представление, наложенное на проигрыватель, подходящим текстом.
5) затем отмените таймер на период продолжительности (вы можете реализовать новый таймер с продолжительностью времени).
6) После того, как таймер продолжительности завершит работу в onFinish (), вы можете запустить старый таймер с временем миллисекунды, которое вы сохранили вШАГ 2.

Вот так;)

...