Видеоплеер для Android с субтитрами

#android #media-player #android-videoview #subtitle

#Android #медиаплеер #android-видеообзор #субтитры

Вопрос:

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

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

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

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

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

Комментарии:

1. Откуда вы узнали о добавлении субтитров в видео. Можете ли вы поделиться со мной ссылкой??

Ответ №1:

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

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

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

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

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

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

Легко и привело к синхронизированным субтитрам 😉

Комментарии:

1. можно ли поделиться кодом. Я работаю над аналогичным требованием. Любая помощь будет оценена

2. Единственная проблема, с которой я сталкиваюсь, — это когда пользователь ищет видео, субтитры перестают обновляться.

Ответ №2:

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

Вот и все 😉

Комментарии:

1. Спасибо за ответ. Мой player.getCurrentPosition() возвращал значение в секундах: 53000 мс, 54000 мс. Было невозможно использовать его для получения реального ms.