Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2
Снова приветствую всех!
Кто не в курсе, первая часть здесь:
Ссылка на пост
Продолжаем! В этом посте разберем ленту видео.
📌 Технологии
ViewPager2 — для прокрутки видео
ExoPlayer — плеер (читал, что TikTok использует тот же)
🔄 Загрузка видео
Первое, с чем столкнулся — небольшая задержка после авторизации, пока загружается первое видео. Но когда оно загрузилось, можно спокойно листать, ведь параллельно идет динамическая загрузка следующих роликов.
Скорость загрузки зависит от мощности телефона:
📱 Если устройство тянет — загружается сразу 8 видео.
📱 Если слабее — 2, 4 или 6.
Но нужно решить проблему первой загрузки.
🚀 Решение: предзагрузка видео
При запуске приложения в фоне стартует Worker, который загружает 10 видео и сохраняет их в памяти.
👉 Итог: после регистрации видео появляется сразу, без задержек.
Дальше при пролистывании ленты подгружаются новые ролики, но на устройстве в среднем всегда хранится 10 видео.
Worker запускается при каждом входе в приложение, но если нужное количество видео уже есть, загрузка не происходит.
📂 Какие видео загружаются?
Когда пользователь загружает видео и оно проходит модерацию, в PostgreSQL прописывается его путь и параметры.
Есть лента "последних" видео.
📌 Проблема: если в БД хранить только UUID, при большом количестве записей они начинают загружаться в случайном порядке.
📌 Решение: сортировка по времени создания и изменения.
Сейчас пользователи получают всю ленту последних видео (их пока не так много), но потом ограничу, например, 10 000 последних видео.
🔄 Как сделать так, чтобы видео не повторялись?
На сервере пользователь получает список видео, а телефон загружает их по порядку.
Но важно, чтобы при каждом открытии ленты не показывались одни и те же видео.
📌 Решение:
На устройстве есть локальная база данных, где записываются просмотренные видео.
🔹 Они просто не загружаются повторно.
🔹 В ленту подставляются только новые видео.
📌 После просмотра видео удаляется «сборщиком мусора».
🎥 Лента длинных видео
Работает по другому принципу:
🔹 Сначала загружается GIF-превью.
🔹 При нажатии на него открывается плеер и подгружает видео с сервера (кэшируется в приложении).
🚀 Дальнейшие планы
Добавлю:
✅ Рекомендации
✅ Подписки
✅ И другие фичи
💻 Производительность
На предыдущей работе тестировал ленту на нормальном сервере — работало отлично.
Сейчас у меня медленный сервер, загрузка видео очень долгая (аренда — 1000 рублей/мес).
📹 Демонстрация
Попробую прикрепить видео с работой ленты и переключением на длинные ролики.
Записываю одним телефоном другой телефон — да, это выглядит странно 😅.
Но раньше, когда записывал экран, мне говорили:
"Это просто анимация, покажите вживую!"
Так что теперь записываю по-старинке 😆.
Как видно, загруженные пользователем видео отображаются в профиле.
Видео с машинками длится более 1 минуты, поэтому оно попало в категорию "Видео" (для длинных роликов).
Буду рад фидбэку!