#android #media-player #android-videoview #subtitle
#Android #медиаплеер #android-видеообзор #субтитры
Вопрос:
В настоящее время я разрабатываю видеоплеер для Android. Я создал простое текстовое представление, которое показывает текущий субтитр.
Проблема в том, что метод MediaPlayer getCurrentPosition() дает мне время только в секундах. И мне нужно это значение в миллисекундах, чтобы правильно синхронизировать субтитры с фильмом.
Предполагается, что getCurrentPosition дает мне время в миллисекундах, но оно дает время в секундах * 1000 (каждое число заканчивается на «000»).
- Знаете ли вы лучший способ сделать это?
- Как мне узнать время в миллисекундах?
- Также будет работать генерация события точно во время секунды (000 мс).
Есть предложения?
Комментарии:
1. Откуда вы узнали о добавлении субтитров в видео. Можете ли вы поделиться со мной ссылкой??
Ответ №1:
На случай, если кому-то понадобится, я сделал свое решение.
Я разработал модуль субтитров. Чтобы получить точные миллисекунды, я создал синхронизатор для системных и игровых таймеров.
Каждые 20 секунд воспроизведения видео я выполняю эту процедуру:
- Запросите у медиаплеера текущие секунды (есть секунды s)
- Запрашивайте у медиаплеера текущие секунды, пока результат не будет равен s 1 (s0)
- Получите системное время (миллисекунды) для этого времени (m0)
Теперь, если я хочу, чтобы текущий фильм длился миллисекунды:
- Получить текущее системное время (миллисекунды) (m1)
- Видео в реальном времени: 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.