Как вставить внешние субтитры по времени воспроизведения
Нужно воспроизводить видео и субтитры отдельно от видео внизу чтобы при нажатии на одно слово в субтитре происходило действие.
Типа такого

Такая ситуация, сделал я онлайн плеер с помощью библиотеки ссылка
так как youtube api не подошел из-за ряда причин.
С помощью этой библиотеки у меня видео воспроизводится и получаю время отдельно. Субтитры я тоже уже смог получить с своего сайта подгружается, поэтому Я могу сразу все субтитры выгрузить внизу но это не подойдет.
Только проблема сейчас нужно по полученному времени вставить субтитры, т.е. если сейчас 10 секунд в внизу должны показываться субтитры из этого промежутка времени.
Думал уже сам написать программу например разбить текстовый файл субтитров на массив, потом вытащить оттуда времена в виде много много мерного массива или вообще sql базы и вставлять, башка кипит сложно может если долго совсем делать сделаю. Какие есть готовые решения для такой проблемы?
Ответы (1 шт):
Не уверен, что найдется готовое решение, но сделать свое мне кажется не шибко сложным. Элементы следующие:
1) парсим str файл в некоторую нашу структуру для субтитров. Задача довольно простая, особенно если выкинуть все оформительские тэги. Одна запись субтитров выглядит вот так
2
00:07:45,300 --> 00:07:48,090
Тут все такие. Страна дешёвых торгашей.
2) Наследуем некоторый класс от TextView, который будет отображать наши субтитры. Отдаем ему нашу структуру и ссылку на плеер. Дальше логика зависит от возможностей плеера. Если там есть только функция "дай текущее время ролика", то придется либо запрашивать ее каждые, скажем, 100мс, либо запрашивать текущее время, смотреть через сколько нужно изменить показываемую строку и добавлять в в основной поток отложенную на это время задачу по смене строки. Во втором случае все это надо пересчитывать при каждой паузе, перемотке или "пролагивании", если плеер тянет ролик с интернета
Чувствую себя немного кэпом... Если с какой-то частью реализации будут конкретные проблемы - создавайте новый вопросы, ответим