ilyaPlotkin

На Пикабу
2851 рейтинг 10 подписчиков 9 подписок 24 поста 3 в горячем
2

А давайте создадим свою альтернативу маркетплейсам и сервисам объявлений?

Всем привет!

Чем больше узнаю о работе крупных сервисов, тем больше понимаю, как сложно там выживать малому бизнесу. Кто-то создаёт товары ручной работы, но конкурировать с крупными производителями практически невозможно. Кто-то просто хочет продать вещь через доску объявлений, но без платных услуг их предложение теряется среди тысяч других.

А что, если попробовать создать свои платформы, где всё будет честнее и прозрачнее?

Я сам могу разработать бэкенд и клиент для Android. Если кто-то из веб-разработчиков и iOS-разработчиков подключится, сможем сделать полноценный кроссплатформенный сервис. Также хочу освещать процесс создания – YouTube, Пикабу, Хабр. Всё будет максимально открыто, так что можно будет следить за развитием.

Какие сервисы можно сделать?

1️⃣ Доска объявлений с аукционами
Хочешь продать редкую вещь – например, коллекционную куклу, машину или даже недвижимость? Вместо стандартных торгов и торга в личке можно запустить аукцион. Люди сами поднимут цену, если товар действительно востребован. Оплата проходит через платформу, а сервис получает небольшую комиссию (например, 0,5–1%). В итоге и продавец доволен, и покупатели не переживают за безопасность сделки.

2️⃣ Маркетплейс для малого бизнеса
Часто вижу истории о том, как мастера сталкиваются с проблемами на крупных платформах. Кто-то делает кожаные кошельки, кто-то вяжет свитера или варит мыло ручной работы – но их предложения просто теряются среди тысяч других. Крупные производители могут позволить себе вложиться в рекламу, и маркетплейсы естественно продвигают их, потому что это выгоднее.

А если сделать платформу, где малый бизнес не будет в тени? Например, выделить раздел "Новые продавцы" или "Новые товары", чтобы у начинающих мастеров был шанс найти своих клиентов, а покупатели могли открыть для себя уникальные вещи, которых нет в массовом производстве.

3️⃣ Платформа для репетиторов и образовательных услуг
Недавно столкнулся с ситуацией: в чате дома спрашивали, где найти хорошего репетитора по русскому и математике. И подумал – а что если сделать площадку, где преподаватели сами регистрируются, а родители могут легко выбрать нужного специалиста? Причём проводить занятия можно прямо на платформе – без необходимости искать Zoom или другие сторонние сервисы.

4️⃣ Инвестиционная площадка для стартапов
Допустим, кто-то придумал крутую идею – например, шить одежду с уникальным дизайном или производить игрушки, но денег на запуск нет. Можно создать площадку, где люди вкладываются в перспективные проекты, а после старта получают свою долю прибыли. Причём бизнес, который вырос с такой поддержки, тоже продолжает отчислять процент в общий фонд, помогая новым стартапам.

Помните, как один известный человек однажды сказал: если у учителей нет денег, пусть идут в бизнес. Но проблема в том, что у многих хороших людей и у хороших проектов тупо нет денег. В итоге мы имеем то, что хорошие проекты растворяются, а какая-нибудь полная ерунда получает финансирование. Но поскольку это ерунда, она проваливается, потому что никому не нужна, как бы сильно её ни пиарили.

Как всё это реализовать?

Я могу написать код, но один такой проект не потяну. Ищу людей, кто может помочь с веб-разработкой, iOS, дизайном, тестированием.

Также важен финансовый вопрос – аренда серверов и прочие расходы. Поэтому возможна схема, при которой донатеры становятся инвесторами и получают долю от будущей прибыли.

💬 Если вам интересна эта идея – пишите в комментариях!

P.S. Для тех, кто считает, что «сразу провал» – если бояться начинать, то ничего нового не появится. Вспомните, сколько легендарных проектов сначала считались бесперспективными, а потом изменили мир.

В любом случае я буду освещать процесс разработки – шаг за шагом, максимально открыто. Хотите минусовать? Ну, что ж, ваше право. Но, может, вместо этого попробуете обсудить идею и предложить что-то дельное?

Если идея вам интересна – пишите в личные сообщения в Telegram, буду рад обсудить!
@ilyaPlotkin_vzhoohApp

Всем спасибо за внимание!

Показать полностью

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 5

Всем привет!

В этой части расскажу о сообщениях между пользователями. По такому же принципу реализована система и в СамСервис.

📌 Предыдущая часть:
Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4

Структура хранения сообщений

Сообщения хранятся локально в базе данных Android-устройства и на сервере.
Хранение на сервере позволяет:
✅ Восстанавливать переписку при смене устройства
✅ Использовать аккаунт на нескольких устройствах (Хотя, возможно, это вообще не нужно 😄)

Серверная часть

Сообщение сохраняется в базу по следующей структуре:

  • Отправитель

  • Получатель

  • Текст сообщения

  • Дата и время (важный параметр!)

Дата и время нужны не только для отображения, но и для сортировки.
Первичный ключ в базе — UUID, а значит, если просто запросить "все сообщения", они могут прийти не по порядку.
Поэтому сортировка по дате исправляет ситуацию.

Извлечение сообщений из базы идёт по принципу:
📩 "извлечь все, где отправитель A, получатель B или наоборот".

Файлы в сообщениях

📂 Файлы хранятся на сервере. Реализована поддержка всех типов файлов с адаптивным отображением:

  • Видео → собеседник получает короткую гифку. При клике откроется новое активити с видеоплеером, стримящим видео с сервера.

  • Изображения → открываются в просмотрщике.

  • Другие файлы → открываются через интент, предлагающий подходящее приложение.

Файлы сохраняются в "Загрузках" устройства, с уведомлением (Toast).

🚧 Но пока отправка файлов всех типов пока отключена, так как нет места на сервере для хранения.


Ссылки в сообщениях

🔗 Если кто-то отправляет ссылку, она сразу отображается в WebView прямо в сообщении, показывая предпросмотр.
📌 Можно кликнуть по ссылке сверху сообщения и перейти в браузер устройства (не встроенный, как в Telegram).
🛠 В будущем, возможно, добавлю свой браузер.


Технология отображения сообщений

Используется RecyclerView:
📌 Каждый тип сообщения имеет свою разметку и свой ViewHolder.
📌 Определение типа происходит во фрагменте чата.

Определение "своё/чужое" сообщение

📩 Проверяется "мой логин" и "логин оппонента", после чего:

  • Выбирается нужный ViewHolder

  • Применяется соответствующая разметка

Обновление чата в реальном времени

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

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 5 Программист, Программирование, IT, Длиннопост

🔥 В общем, как-то так. Спасибо за внимание! 😎

Показать полностью 1
1

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4

Всем привет!

Тут я подумал... а почему бы не рассказать о сервере? Предупреждаю сразу: будет много сложного и непонятного текста!

Немного о сервере

Сервер — это Maven-проект (кто понял, тот понял). Maven — это не просто фреймворк, а целая экосистема, которая включает в себя огромное количество инструментов. Он также выполняет роль сборщика.

Главный конфигурационный файл проекта — pom.xml. В него добавляются библиотеки, фреймворки и прочие зависимости. Помимо Spring Boot и его компонентов, я добавил:

  • PostgreSQL — база данных, в которой хранится огромное количество таблиц.

  • Firebase — гугловая библиотека для отправки сообщений.

  • OkHttp3 — для выполнения HTTP-запросов на сторонние сервисы, такие как Firebase и Яндекс.

  • Quartz Scheduler — для работы с таймерами. Раньше использовался для отслеживания времени жизни SMS.

  • Lombok — значительно упрощает код, убирая необходимость вручную писать геттеры и сеттеры.

  • Flyway — для управления миграциями базы данных. Например, при переносе на другой сервер или создании новой таблицы можно не писать SQL-запросы вручную, а просто выполнить команду, и Flyway сам всё сделает.

  • Hibernate — облегчает работу с базой данных, избавляя от необходимости писать SQL-запросы вручную и разбираться, почему что-то не работает из-за новой колонки или неправильного запроса.

Миграции

На данный момент у меня 36 миграций. Они включают в себя создание новых таблиц и обновление старых.

Первый блок — init: здесь просто инициализируется схема базы данных. Затем добавляются таблицы.

Структура проекта

В проекте есть несколько пакетов (или папок, кому как удобнее):

  • secure — всё, что связано с защитой: конфигурация, токены и прочее.

  • controllers — здесь находятся Java-классы-контроллеры. Каждому классу даю название по принципу функционал + Controller, например:

    • FileController — отвечает за работу с файлами.

    • MessageController — управляет обработкой сообщений.

Это основные моменты, остальные параметры можно считать стандартными.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

DTO (Data Transfer Object) — объект передачи данных между клиентом и сервером.

По сути, у меня там всего один enum, который содержит две подкатегории:

  • Request — запрос

  • Response — ответ

Думаю, логика понятна: Request используется для отправки данных на сервер, а Response — для получения ответа.

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

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Entity — таблицы для Hibernate

В проекте есть несколько Entity-классов, которые описывают структуру таблиц в базе данных.

Есть две абстрактные сущности:

  1. AbstractEntity — содержит стандартные параметры, которые есть в каждой таблице:

    • id — первичный ключ

    • Переопределённые методы, такие как equals() и hashCode()

  2. DatedEntity — расширяет AbstractEntity и добавляет два поля:

    • createdAt — время создания записи (например, когда был создан пользователь)

    • updatedAt — время последнего обновления записи (например, когда сообщение было прочитано)

Таким образом, сущности наследуются друг от друга:

DatedEntity наследует AbstractEntity
➡ Другие классы наследуются от DatedEntity

В результате при создании новой таблицы мне не нужно каждый раз вручную добавлять id, createdAt и updatedAt — они уже есть в базовом классе. Удобно и меньше дублирования кода! 🚀

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Repository — репозитории для работы с БД

Если просто, то для каждой таблицы создаётся свой репозиторий, в котором прописаны запросы к базе данных. У меня их 24, значит, и таблиц тоже 24.

В большинстве случаев Hibernate отлично справляется с работой, но иногда бывают ситуации, когда нужен сложный SQL-запрос, и тогда стандартных возможностей недостаточно. В таких случаях приходится писать запрос вручную.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Service — бизнес-логика приложения

Сервисные классы отвечают за взаимодействие между слоями приложения. Здесь происходит:

  • Взаимодействие с базой данных через репозитории

  • Взаимодействие между различными компонентами приложения

  • Логика обработки данных перед отправкой клиенту

  • Выполнение различных проверок и преобразований

По сути, сервисный слой — это мост между контроллерами и базой данных. В зависимости от ситуации в сервисах может быть простая логика или более сложные механизмы, например, кэширование, валидация данных или работа с внешними API.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Дополнительные моменты и распределение нагрузки

Думаю, основные вещи я описал, но есть ещё несколько дополнительных компонентов, которые взаимодействуют между собой.

Почему я не использую WebSocket?

Кто-то может спросить про WebSocket... но я его пока не реализовывал. Причина проста — текущее железо не потянет. Даже если в будущем будет более мощный сервер, всё равно есть ограничения на количество подключений к одному серверу.

К тому же WebSocket реально нужен только для отображения статуса "пользователь онлайн" (в моем случае). Но это излишняя нагрузка, которая мне не нужна.

Масштабирование сервера

Поскольку при хорошем раскладе нужен не один, а десятки серверов, я сразу проектирую приложение с возможностью множественного запуска на разных машинах и централизованной базой данных.

Я прикинул примерную архитектуру серверов:

  • Сервер мониторинга — отслеживает состояние всех остальных серверов.

  • Сервер бэкапов — отвечает за сохранение резервных копий данных.

  • Два сервера для видеозвонков — работаю над полноценной WebRTC-реализацией, без использования сторонних сервисов.

С первого взгляда это может показаться сложным и непонятным 🤯, но на самом деле всё логично и продумано. 🚀

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 4 Программирование, Интернет, IT, Длиннопост

Proxy и масштабируемость

Proxy будет равномерно распределять запросы между серверами. Их количество не ограничено, поскольку все они работают с одной базой данных. Таким образом, если нагрузка возрастёт, можно просто добавить новые серверы, и система продолжит работать без проблем.

То же самое касается серверов-хранилищ — их тоже можно масштабировать до бесконечности. Правда, используется принцип пара-зеркало: один сервер — основной, второй — резервный, на случай отказа основного.

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

Про видеозвонки расскажу подробнее позже, когда придет время и когда протестирую.

я тут подумал. оставлю свой телеграм для связи, мало ли, может какие нибудь предложения поступят. @ilyaPlotkin_vzhoohApp

Ну, как-то так. Всем спасибо за внимание! 🚀

Показать полностью 6
1

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3

Кому интересно:

Здесь я решил объединить эти темы, так как речь пойдет об одном и том же – интеграции авторизации через Яндекс.

Почему Яндекс?

Думаю, причина очевидна: СМС-авторизация – это дорого.
Разберем цифры:

  • Регистрация "имени" у операторов – 2000–2500 рублей за каждого. Учитывая, что у нас 4 основных оператора, только за это придется платить от 8000 рублей в месяц.

  • Каждое СМС в среднем стоит 2,5 рубля. Если в месяц приходит 1000 новых пользователей, это еще +2500 рублей.

  • А если добавить возможные злоупотребления, спам и другие проблемы – сумма растет.

Итого: 10 000+ рублей в месяц только за возможность отправки СМС. Такой вариант явно не лучший.

Что тогда выбрать?

Очевидный вариант – авторизация через сервисы. Рассматривал Google, но… санкции, ограничения, возможные блокировки – не вариант.
А так как приложение ориентировано на российскую аудиторию, выбор пал на Яндекс.

Проблема с Google Play

При проверке приложения Google требует, чтобы проверяющий мог войти. Но тестового аккаунта в Яндексе не существует.

Решение: временная кнопка для проверки, которая 21 февраля 2025 года станет невидимой.

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3 IT, Программирование, Программист, Программа, Интернет, Длиннопост

Как сделать интеграцию?

  1. Зарегистрировать приложение в Яндекс.OAuth.

  2. Указать пакет приложения и отпечаток ключа (можно найти в ключе или Google Play).

  3. После авторизации Яндекс выдает токен, по которому можно получить номер телефона пользователя.

Но тут возникает проблема: если делать все в самом Android-приложении, это дыра в безопасности.

Как обойти ограничение?

Яндекс не дает получить токен через WebView, поэтому алгоритм такой:

  1. После авторизации приложение отправляет код на сервер.

  2. Сервер по коду получает токен.

  3. По токену сервер получает номер телефона.

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3 IT, Программирование, Программист, Программа, Интернет, Длиннопост

Проблема с редиректом (ошибка 400)

После настройки сервера приложение начало выдавать ошибку 400 при редиректе.
Долго гуглил, но ответов не нашел.
Решение оказалось простым: нужно указать, что приложение – это не только Android-клиент, но и веб-сервис.

В параметре Redirect URI нужно указать URL контроллера сервера, который принимает код. После этого всё заработало!

Еще одна проблема – два токена!

После авторизации устройство получает токен. Но при попытке использовать его – ничего не работает.

  • В БД Android-приложения токен есть.

  • В БД на сервере токен другой.

Что?! Как так?

Оказалось, Яндекс отправляет два запроса с одним кодом.

  1. Первый запрос получает код, сервер генерирует токен A, отправляет его устройству.

  2. Следом Яндекс шлет второй запрос, сервер генерирует новый токен B.

  3. Устройство продолжает работать с токеном A, но в БД уже записан токен B.

Решение: добавил триггер, который блокирует повторную генерацию токена для одного кода. Теперь всё работает корректно.

Приложение СамСервис часть 2 и Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 3 IT, Программирование, Программист, Программа, Интернет, Длиннопост


Что с «Вжух»?

Работа над проектом не заброшена, но сервер не тянет нагрузку, нужен более мощный, а цены на хорошие сервера кусаются.

Итог

Интеграция с Яндексом удалась, проблем было много, но всё решаемо.
Спасибо за внимание! 🚀

Показать полностью 3
5

Приложение СамСервис

Всем привет!

Однажды заходит ко мне в гости один очень хороший друг и заявляет:

— Слушай, у нас тачки старые, иногда нужен мелкий ремонт — то резину поменять, то прокладку ГБЦ заменить... А во дворе — тот еще квест. В сервис поедешь — месяц ждать. А твоего (ну, в смысле моего) японца мастера как видят, так крестятся. Если не верующие — уверуют, плюют через левое плечо, стучат по дереву, читают мантры… Но за доисторического японца все равно не берутся, даже если ремонт пустяковый.

— Хм... — задумался я.

— Так вот! Есть же автосервисы самообслуживания! Звонишь (или звонишь, кому как нравится), бронируешь место в теплом гараже, если зима. Если лето — в прохладном, без солнцепека. И ковыряешься там в свое удовольствие! В некоторых даже яма есть или подъемник. И цена норм — 300–400 рублей в час! Красота!

— Хм... — снова задумался я. — То есть менять прокладку ГБЦ во дворе было ошибкой? (Кстати, это чистая правда, весь двор сбежался посмотреть.) Ну блин, впервые слышу, что такие сервисы вообще существуют...

— Вот-вот! Они есть, но знают о них единицы. Разве что по сарафанному радио. Я сам только сегодня узнал! Короче... ты ж программист. Давай соберем все эти "СамСервисы" (да, мы уже название придумали) в одно место, чтобы больше людей о них узнало. Ну и, если повезет, может, даже какую-то копейку с этого поимели.

— Ни слова больше! — вслух подумал я. — Соберем это все в одно приложение! Но сначала нужно найти номера, адреса, города всех таких сервисов по России.

— Та без проблем! Соберу! Нужно сайт и мобильное приложение!

— Хорошо! Только сайты я не особо люблю делать. Я могу замутить сервер, клиент под Android… Сайт, если и сделаю, то простенький. Пойдет?

— КОНЕЧНО! Главное — начать!

Ну, собственно, начал. Сделал мини-сайт (честно, не фанат веба): https://myself-service.ru/
И приложение под Android, даже выкатил в Google Play! (Да, я могу, это несложно, аккаунт завел еще до СВО.)

Приложение СамСервис Программирование, Приложение, IT, Длиннопост
Приложение СамСервис Программирование, Приложение, IT, Длиннопост

часть кнопок, естественно, не работает, это задел на будущее.


Но, теперь само приложение:

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Когда мы открываем приложение, нас встречает раздел "Новости". Публиковать их могут только админы. Вообще, если зайти в приложение под учеткой админа, функционал будет немного другим — более расширенным. В частности, только админы могут добавлять новости.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост
Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Далее — каналы. По сути, это почти как каналы в Telegram. Сверху есть значок "карандаш" — кликнув по нему, можно создать свой канал. Писать в нем может только автор, а комментировать — все пользователи. Если нажать "Подписаться", то канал всегда будет отображаться вверху списка, даже если он был где-то внизу.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Карта СамСервисов, полотно от яндекс карт, при клике на значок переходит на сервис и показывает информацию, по сервису.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Чаты пользователей. По поисковику можно найти любого пользователя, даже меня) Синхронизацию с телефонной книгой пока не делал.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Можно отправлять друг другу сообщения и картинки. Картинки хранятся на сервере. Правда, сам сервер еще не полностью готов, поэтому функционал пока не весь.

Сообщения сохраняются как на сервере, так и в базе данных телефона. При открытии чата история загружается из памяти устройства.

Также можно отправлять картинки. Функция отправки видео временно отключена, но когда она работает, получателю сначала приходит GIF-анимация из видео. Если кликнуть, видео начинает стримиться с сервера, не занимая память телефона. Реализовал так специально — чтобы экономить место на устройстве.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Далее — профиль пользователя. Здесь можно сменить аватар и изменить ник. Каждый ник уникален — система не позволит установить уже существующий.

Под аватаром находится гараж, где пользователь может добавить свой автомобиль и вести по нему записи. Эти записи доступны только владельцу.

Если в поиске найти пользователя и перейти в его профиль, можно увидеть его автомобиль, но открыть его записи нельзя.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

В гараже добавил несколько полей. Кстати, если есть идеи, что еще добавить — предлагайте! Пока придумал такой вариант.

Приложение СамСервис Программирование, Приложение, IT, Длиннопост

Причина сохранения данных — либо нажатие кнопки "Сохранить", либо замена аватара.

Про дизайн

Я не дизайнер, мне и слон на ухо наступил, и глаз на стиль не настроен, сделал как мог.

🚪 Про вход в приложение

Если хотите потестить — пишите мне в Telegram: @ilyaPlotkin_vzhoohApp.
СМС пока отключены, поэтому перед входом нужно указать мне свой номер. В ответ я пришлю код (но уже завтра 😉). Только после этого вводите номер в приложении и "ждите" СМС.

В будущем добавлю авторизацию через сервисы Яндекса.

🔧 Немного про сервер

Использую стандартный стек: Java Spring Boot, Hibernate, Spring Security, Firebase, Lombok.
База данных: PostgreSQL, миграции — Flyway.

📲 Ссылка на Google Play

👉 Скачать приложение

Всем спасибо за внимание! 🚀

Показать полностью 11
8

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2.1

Всем привет!

Прошлый пост с описанием технологии неожиданно вызвал отклик. Вот ссылка на него:
Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2

Понял, что стоит подробнее объяснить, почему я использовал именно эту технологию. Да и, похоже, из-за моей недосказанности остались вопросы.

🔄 Стриминг видео

Видео с сервера стримится — да, настроен Nginx с медиасервером. Это не просто загрузка файла (как если бы это был архив или что-то подобное).

Пример: если вставить ссылку на видео в VLC-плеер, оно начнет воспроизводиться сразу, кэшируясь на ходу.

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

📹 Длинные видео

В ленте длинных видео на превью показывается GIF (весит 400–500 КБ). Даже она загружается медленно.

👉 Если нажать на гифку, откроется плеер, и видео начнет стримиться сразу, без предварительной загрузки.

Почему я отказался от стриминга сразу в ленте?

Изначально я хотел, чтобы видео стримилось прямо при пролистывании. Но это плохо работает при медленном интернете:

  • Долгая загрузка

  • Особенно это заметно, когда интернет то есть, то пропадает

Мои наблюдения по TikTok

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

📌 Если быстро пролистывать ленту, внизу появляется прогресс-бар.

Если интернет медленный, этот прогресс-бар может зависать надолго.
На мой взгляд, это подтверждает, что видео сначала загружается и только после загрузки начинает воспроизводиться, а не сразу стримится.

Если бы это был стриминг:

  • Картинка бы появилась сразу

  • Видео воспроизвелось бы хотя бы пару секунд

Кроме того, занимаемая память приложения косвенно намекает на работу с файлами.
🤔 Почему приложение может весить 2–5 ГБ, если это не видео?

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

Вопрос по Spotify и Telegram

Мне писали, что в Spotify и Telegram треки стримятся, а параллельно загружаются следующие в плейлисте.

Честно, я пока не понимаю, зачем так делать.

Ну, допустим, мы перелистнули трек — и дальше происходит та же схема, что и у меня.
👉 Файл воспроизводится из памяти, а в фоне параллельно подгружается следующий.

Правильно ли я это понял? Если нет, поправьте меня.

Показать полностью
9

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 2

Снова приветствую всех!

Кто не в курсе, первая часть здесь:
Ссылка на пост

Продолжаем! В этом посте разберем ленту видео.

📌 Технологии

  • ViewPager2 — для прокрутки видео

  • ExoPlayer — плеер (читал, что TikTok использует тот же)

🔄 Загрузка видео

Первое, с чем столкнулся — небольшая задержка после авторизации, пока загружается первое видео. Но когда оно загрузилось, можно спокойно листать, ведь параллельно идет динамическая загрузка следующих роликов.

Скорость загрузки зависит от мощности телефона:
📱 Если устройство тянет — загружается сразу 8 видео.
📱 Если слабее — 2, 4 или 6.

Но нужно решить проблему первой загрузки.

🚀 Решение: предзагрузка видео

При запуске приложения в фоне стартует Worker, который загружает 10 видео и сохраняет их в памяти.
👉 Итог: после регистрации видео появляется сразу, без задержек.

Дальше при пролистывании ленты подгружаются новые ролики, но на устройстве в среднем всегда хранится 10 видео.
Worker запускается при каждом входе в приложение, но если нужное количество видео уже есть, загрузка не происходит.

📂 Какие видео загружаются?

Когда пользователь загружает видео и оно проходит модерацию, в PostgreSQL прописывается его путь и параметры.

Есть лента "последних" видео.
📌 Проблема: если в БД хранить только UUID, при большом количестве записей они начинают загружаться в случайном порядке.
📌 Решение: сортировка по времени создания и изменения.

Сейчас пользователи получают всю ленту последних видео (их пока не так много), но потом ограничу, например, 10 000 последних видео.

🔄 Как сделать так, чтобы видео не повторялись?

На сервере пользователь получает список видео, а телефон загружает их по порядку.

Но важно, чтобы при каждом открытии ленты не показывались одни и те же видео.

📌 Решение:
На устройстве есть локальная база данных, где записываются просмотренные видео.
🔹 Они просто не загружаются повторно.
🔹 В ленту подставляются только новые видео.
📌 После просмотра видео удаляется «сборщиком мусора».

🎥 Лента длинных видео

Работает по другому принципу:
🔹 Сначала загружается GIF-превью.
🔹 При нажатии на него открывается плеер и подгружает видео с сервера (кэшируется в приложении).

🚀 Дальнейшие планы

Добавлю:
Рекомендации
Подписки
✅ И другие фичи

💻 Производительность

На предыдущей работе тестировал ленту на нормальном сервере — работало отлично.
Сейчас у меня медленный сервер, загрузка видео очень долгая (аренда — 1000 рублей/мес).

📹 Демонстрация

Попробую прикрепить видео с работой ленты и переключением на длинные ролики.

Записываю одним телефоном другой телефон — да, это выглядит странно 😅.
Но раньше, когда записывал экран, мне говорили:
"Это просто анимация, покажите вживую!"
Так что теперь записываю по-старинке 😆.

Как видно, загруженные пользователем видео отображаются в профиле.

Видео с машинками длится более 1 минуты, поэтому оно попало в категорию "Видео" (для длинных роликов).

Буду рад фидбэку!

Показать полностью 1
6

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1

Привет всем, кто читает! Пишу здесь впервые, и готов принять справедливую критику за ошибки. Но давайте не об этом. Немного вводной информации: я разработчик программного обеспечения, работаю с Java/Kotlin, занимаюсь андроид-разработкой. В настоящее время работаю над своим инди-проектом. Честно говоря, не думаю, что он «выстрелит», скорее это будет элемент портфолио. На написание этого поста меня подвиг один знакомый — заядлый пикабушник.

Теперь, собственно, о проекте. Это приложение для коротких видео, по аналогии с TikTok, шортсами и тому подобным. Думаю, из названия вы уже поняли, о чём речь. Сервер уже неплохо работает: реализована авторизация через SMS, при входе пользователю генерируется JWT-токен, и он авторизуется в приложении. Также есть загрузка видео в ленту. Если длина видео превышает минуту — оно попадает в ленту длинных видео. Реализована отправка сообщений внутри приложения, поиск пользователей и редактирование профиля.

Сразу хочу отметить важный момент: в сети есть фреймворк для создания подобных приложений, нечто вроде конструктора. Но хочу сразу развеять сомнения — это не тот фреймворк. Я пишу всё сам, это мой собственный код. Просто подозреваю, что те, кто знаком с такими фреймворками, сразу напишут, что я использую готовое решение.

Внизу покажу скриншоты приложения. Правда, не судите строго — пока на них пусто.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост

Окно регистрации/авторизации. Добавил 4 страны, Россия, Беларусь, Казахстан, Узбекистан. Логотип помог нарисовать чатГпт. На это роль чата закончилась😇

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост

Введите описание к изображению (не обязательно)

Это скрин главной ленты, на данный момент видео в ленте нет, я их периодически после проверки удаляю, сверху две клавиши - Shorts и Видео - переключение между длинными и короткими видео,

Такую штуку реализовал: когда идет загрузка видео на сервер, создается гиф из первых 5 секунд по 10 кадров в секунду, эта гифка используется как превью на длинных видео.

Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост
Аналог приложения TikTok, Vk видео и YouTube Shorts. Часть 1 Программирование, IT, Программист, Интернет, Длиннопост

Пока вот так. Ожидайте APK файл ориентировочно завтра или послезавтра — сейчас нужно немного «помучать» сервер, оплатить SMS и еще настроить пару вещей.

Прошу прощения, что сразу не могу предоставить APK.

Не уверен, нужно ли сюда выкладывать код и будут ли его вообще смотреть. Если кто-то подскажет, буду рад.

Всем спасибо за внимание!

Показать полностью 4
Отличная работа, все прочитано!