Вшито большое количество бесплатных IPTV-плейлистов.
Просмотр доступен сразу после установки.
Поддерживается добавление собственных плейлистов.
- Код для родительского контроля - 0880.
────────────────────────────────────────────────────────────────────
1. ИЗБРАННЫЕ КАНАЛЫ ( Избранные)
────────────────────────────────────────────────────────────────────
Что это
- Отдельная группа каналов « Избранные», которая всегда отображается в начале списка категорий. Пользователь сам собирает в неё нужные каналы из любых категорий и плейлистов.
Как пользоваться
- Добавить канал: выделить канал и вызвать добавление в избранное (стандартный механизм плеера «добавить в букет»). Появляется уведомление: «Канал … добавлен в избранное».
- Удалить канал: убрать его из группы «Избранные». Появляется уведомление: «… ✕ Избранные».
- Группы «Избранные» и «Все» всегда стоят наверху списка категорий, с указанием количества в скобках — например «⭐️ Избранные (12)».
Где и как хранится (два уровня)
1) localStorage (ключ ikFav) — основное хранилище внутри приложения, запись мгновенная при каждом изменении.
2) /sdcard/ikfav.json (внешнее хранилище) — резервная копия, пишется через нативный мост AndroidInterface.ikFavSet параллельно с localStorage.
3) Для каждого канала сохраняются: название, URL, логотип, DRM-данные (drm, drm_key), User-Agent, Referer и исходная категория, из которой он добавлен.
Защита от потери
- После «Очистить данные» localStorage очищается, НО /sdcard/ikfav.json остаётся (это внешний файл).
- При запуске функция ikFavRestore проверяет: если localStorage пуст — автоматически восстанавливает список из /sdcard/ikfav.json (попытки через 1.5 и 4 секунды + периодическая проверка).
- Поэтому избранное переживает очистку данных и даже переустановку приложения (пока файл /sdcard/ikfav.json не удалён вручную).
Актуализация ссылок (важно для платных каналов)
- У многих каналов в URL вшит токен (например Setanta, lfstrm), который со временем устаревает.
- Чтобы избранное не «протухало», функция freshCh при каждом открытии сравнивает сохранённый канал с текущим плейлистом ПО КЛЮЧУ URL БЕЗ ТОКЕНА (отбрасываются token, authkey, expires, sig и т.п.).
- Если канал найден в актуальном плейлисте — его URL автоматически подменяется на свежий (с новым токеном), список тут же сохраняется обратно.
- Благодаря этому избранные каналы продолжают играть, даже когда старый токен уже недействителен.
Работает даже при смене слота / плейлиста
- Список избранного хранится на уровне ПРИЛОЖЕНИЯ (localStorage + /sdcard/ikfav.json), а НЕ внутри конкретного слота или плейлиста. Поэтому при переключении слота (или смене плейлиста) избранное никуда не исчезает — группа «⭐️ Избранные» остаётся на месте.
- При открытии нового слота/плейлиста срабатывает механизм «обновление при заходе» (refresh-on-visit): каждый сохранённый канал заново сопоставляется с каналами текущего слота по ключу URL без токена (urlKey).
- Если такой же канал есть в новом слоте — он подхватывается из него (актуальный токен, источник, качество). То есть один и тот же избранный канал в разных слотах автоматически берёт рабочую ссылку именно из активного слота.
- Если канала в новом слоте нет — он остаётся в избранном с ранее сохранёнными данными и не теряется.
- Итог: избранное единое и стабильное при любом числе слотов, пользователю не нужно пересобирать список после смены слота.
Многоязычность
- Название группы берётся из собственных переводов плеера, а не прописано жёстко: рус — «⭐️ Избранные», узб (латиница) — «⭐️ Sevimli», англ — « Favorites» и т.д.
- При смене языка интерфейса название группы и счётчик обновляются автоматически. Счётчик в формате «(N)».
────────────────────────────────────────────────────────────────────
1. РАЗБЛОКИРОВКА РОССИЙСКИХ ФЕДЕРАЛЬНЫХ КАНАЛОВ
────────────────────────────────────────────────────────────────────
Проблема:
ott-play (украинское приложение) блокировал российские федеральные каналы.
При включении канала (Россия, НТВ, Первый канал, РЕН ТВ и т.д.)
вместо реального потока показывался украинский канал (UA Перший).
────────────────────────────────────────────────────────────────────
2. УДАЛЁН ПУНКТ МЕНЮ «Тривога України (Air raids of Ukraine)»
────────────────────────────────────────────────────────────────────
Что это:
Пункт в меню настроек (после «Родительский контроль») — система оповещений
о воздушной тревоге в Украине (файл anxiety.js).
Что сделано:
Инъекция удаляет пункт из массива меню:
Проверено: пунктов с «air raid» в меню — 0
────────────────────────────────────────────────────────────────────
3. УДАЛЁН БАННЕР «STOP WAR IN UKRAINE» (жёлтая лента в углу)
────────────────────────────────────────────────────────────────────
Что это:
Диагональная лента в левом верхнем углу экрана, появляется
периодически (элемент #stop2war, управляется anxiety.js при тревоге).
Что сделано:
• Внедрён CSS, скрывающий элемент:
• Остановлен цикл проверки тревог:
Проверено: #stop2war → display:none
────────────────────────────────────────────────────────────────────
4. УДАЛЁН БАННЕР «NO INVASION» (giphy.gif на экране загрузки)
────────────────────────────────────────────────────────────────────
Что это:
Анимированная картинка (ott-play.com/stbPlayer/giphy.gif), которая
была фоном экрана загрузки (элемент #launch).
Что сделано:
CSS убирает фон:
Проверено: фон #launch → none
────────────────────────────────────────────────────────────────────
5. ИСПРАВЛЕН ДОСТУП К ФАЙЛАМ НА SDCARD (Local Storage)
────────────────────────────────────────────────────────────────────
Проблема:
Приложение не видело файлы на sdcard (локальные плейлисты не загружались).
Причина:
targetSdkVersion = 34. На Android 11+ при targetSdk >= 30 флаг
requestLegacyExternalStorage ИГНОРИРУЕТСЯ → нет доступа к произвольным файлам sdcard (scoped storage).
Что сделано:
В AndroidManifest.xml добавлен явный элемент:
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
targetSdk понижен 34 → 29 — теперь legacy-хранилище работает на Android 11.
Проверено: readFile('/sdcard/ik_test.m3u8') → файл прочитан (40 байт)
────────────────────────────────────────────────────────────────────
6. ДОБАВЛЕН «HLS FIX»
────────────────────────────────────────────────────────────────────
Зачем:
Некоторые каналы (например tvcom.uz, yangi.tv) отдают HLS-поток, но БЕЗ расширения .m3u8 в URL → плеер не определяет тип и не играет.
Что сделано (2 части):
а) JS-обёртка (stbPlay):
Для URL, совпадающих с хостами из списка ikHlsHosts (по умолчанию "tvcom.uz,yangi.tv") и не содержащих m3u8,
дописывается маркер #.m3u8:
http://tvcom.uz/live/xxx →
http://tvcom.uz/live/xxx#.m3u8Плюс пункт «HLS Fix» в меню «Настройки устройства» — редактирование списка хостов (через запятую).
б) Нативная правка (n1/K.smali, метод c0 = определение типа контента):
Добавлена проверка полного URL: если uri.toString() заканчивается на "#.m3u8" → тип = HLS (2)
Теперь маркер распознаётся, и для таких каналов используется HlsMediaSource (принудительно HLS).
────────────────────────────────────────────────────────────────────
7) Режим работы плеера ONLINE/OFFLINE.