Об этом проекте

MyMovieStore — это нативное Android-приложение для просмотра и воспроизведения фильмов, разработанное на Kotlin; один APK совместим как с телефонами, так и с Android TV/приставками. Приложение разделяет функциональность на уровень обнаружения контента и уровень воспроизведения контента: уровень обнаружения контента извлекает фильмы и сериалы со страниц Douban, поддерживает просмотр по категориям, включая фильмы, сериалы, развлекательные шоу и аниме; уровень воспроизведения контента объединяет 19 источников-краулеров (таких как 剧集屋, 樱花动漫, 电影天堂 и другие), поддерживает параллельный поиск по нескольким источникам, сортировку методом вставки, разбор деталей и воспроизведение через Media3 ExoPlayer. Проект обладает довольно полной функциональной системой: плеер поддерживает систему комментариев (поиск по нескольким источникам, кэширование, приоритет локальных, адаптация размера шрифта), историю воспроизведения, историю поиска, удалённое управление конфигурацией видеоисточников, очистку кэша категорий, управление загрузками M3U8 (включая расшифровку потоков с шифрованием AES-128, докачку с точки останова, офлайн-воспроизведение), ограничение скорости краулеров (независимая очередь для каждого источника, минимальный интервал 3 секунды, приоритетное перехватывание) и обход анти-краулинга, такой как прохождение Cloudflare и деградация при блокировке по TLS-отпечатку. Адаптация для Android TV реализована через определение формы во время выполнения; сетевой уровень, Repository, ViewModel и обёртка плеера полностью общие, а адаптация ограничена уровнем UI. На телевизоре предусмотрены 10-foot UI (плотность увеличена в 1,45 раза), система фокуса D-pad для пульта, верхняя панель навигации, поиск по QR-коду с телефона, защита при отсутствии возможностей и другое. Технологический стек использует Kotlin 2.0.0, Gradle 8.9, minSdk 24, targetSdk 36, компоненты Room, OkHttp, Media3 ExoPlayer, ZXing и другие. Проект позиционируется как практика написания краулеров на Kotlin, структура кода ясная; чтобы добавить новый источник воспроизведения, достаточно унаследоваться от CrawlerVideoSource и реализовать два метода разбора.