Скрипт для настройки IPTV на роутере OpenWrt с веб-админ панелью, встроенным HLS-плеером, EPG телепрограммой и расписанием обновлений.
v3.21 — Модульная архитектура, валидация CGI, логирование, CI/CD
- HLS-плеер с боковым списком каналов, поиском и EPG
- PiP (картинка в картинке), полноэкранный режим
- Загрузка любых M3U/M3U8 плейлистов
- Горячие клавиши: стрелки, пробел, F
- Загрузка по ссылке, из файла или от провайдера
- Валидация URL перед загрузкой
- Объединение нескольких плейлистов
- Авто-обнаружение EPG из заголовка плейлиста
- Пароль на админку (HTTP Basic Auth) + API токен
- Белый список IP, rate limiting (60 запросов/мин)
- 3 вкладки в интерфейсе OpenWrt: IPTV, Плеер, Сервер
- Запуск/остановка сервера прямо из LuCI
- Работает даже при остановленном сервере (srv.cgi на порту 80)
- Расписание автообновления плейлиста и EPG
- Авто-обновление скрипта из GitHub при запуске
- Автозапуск при старте роутера
- Экспресс-настройка за 30 секунд
- 🛡️ Watchdog (Сторож): Автоматически обнаруживает падение сервера и перезапускает его через 20 секунд.
- Гибридный EPG — только в RAM (gz, ~15MB), без нагрузки на флеш
- Избранное, бэкап и восстановление настроек
- OpenWrt: 21.x или новее
- Свободный порт: 8082 (uhttpd)
- Интернет: для загрузки плейлиста и EPG
- Никаких дополнительных пакетов — всё работает из коробки
luci-app-iptv-manager/root/usr/share/iptv-manager/
├── IPTV-Manager.sh # Entry point (загружает модули)
├── lib/
│ ├── core.sh # Конфигурация, утилиты, валидация
│ ├── logger.sh # Логирование (log_info, log_error, log_warn)
│ ├── playlist.sh # Загрузка, валидация, объединение плейлистов
│ ├── epg.sh # Загрузка и обработка EPG
│ ├── server.sh # HTTP-сервер, CGI, watchdog
│ ├── scheduler.sh # Автоматическое обновление
│ ├── security.sh # Rate limiting, IP whitelist, auth
│ ├── cgi.sh # Генерация admin.cgi с полной HTML-админкой
│ ├── telegram.sh # Telegram-уведомления
│ └── catchup.sh # Timeshift/архив передач (catchup)
├── defaults.conf # Настраиваемые параметры (порт, пути, таймауты)
└── tests/
└── test_core.sh # Unit-тесты (shunit2)
| Endpoint | Auth | Описание |
|---|---|---|
?action=health |
❌ Нет | Health-check: server, playlist, epg, uptime |
?action=check_channel |
✅ Да | Проверка доступности канала |
?action=refresh_playlist |
✅ Да | Обновить плейлист |
?action=refresh_epg |
✅ Да | Обновить EPG |
?action=system_info |
✅ Да | RAM, disk, uptime |
?action=server_status |
✅ Да | Статус сервера |
?action=server_start |
✅ Да | Запустить сервер |
?action=server_stop |
✅ Да | Остановить сервер |
- Создайте файл в
lib/ваш_модуль.sh - Добавьте его загрузку в
IPTV-Manager.sh:. "$IPTV_MANAGER_DIR/lib/ваш_модуль.sh"
- Используйте функции из модуля в любом месте скрипта
- Валидация URL —
_validate_url()проверяет протокол перед любым запросом - Санитизация —
_sanitize_cgi_str()очищает входные данные CGI - Rate limiting — 60 запросов/мин с блокировкой на 5 минут
- Логирование — все критичные операции пишутся через
logger
wget -q -O - https://raw.githubusercontent.com/whatuneeed/IPTV-Manager/main/install.sh | shСкрипт автоматически:
- Скачает все файлы с GitHub
- Расставит по правильным путям
- Включит автозапуск и настроит LuCI
- Запустит сервер
- Удалит все временные файлы после установки
После установки: Services → IPTV Manager в LuCI, или iptv в SSH.
# Собрать пакет из исходников
git clone https://github.com/whatuneeed/IPTV-Manager.git
cd IPTV-Manager/luci-app-iptv-manager
make package/symlinks
make package/luci-app-iptv-manager/compile
# Установить на роутер
scp bin/packages/*/luci-app-iptv-manager_*.ipk root@192.168.1.1:/tmp/
ssh root@192.168.1.1 "opkg install /tmp/luci-app-iptv-manager_*.ipk"Или скачать .ipk из GitHub Releases и установить:
opkg install luci-app-iptv-manager_3.21-*.ipkПосле установки: Services → IPTV Manager в LuCI.
Пакет автоматически включит автозапуск, настроит CGI и перезапустит rpcd.
Проект использует GitHub Actions для автоматических проверок:
| Проверка | Описание |
|---|---|
| Shellcheck | Анализ всех .sh файлов на POSIX-совместимость |
| Unit Tests | Тесты core-функций через shunit2 |
| Structure Check | Проверка наличия всех модулей |
| Страница | URL |
|---|---|
| Админ-панель | http://192.168.1.1:8082/cgi-bin/admin.cgi |
| Плейлист | http://192.168.1.1:8082/playlist.m3u |
| EPG | http://192.168.1.1:8082/epg.xml |
| HLS-плеер | http://192.168.1.1:8082/player.html |
Каналы — список с фильтрацией по группам, поиском, проверкой доступности и избранным
Плейлист — загрузка по ссылке, просмотр исходного M3U
Телепрограмма — настройка EPG, просмотр передач (XML/XML.gz)
Настройки — расписание, бэкап, безопасность (пароль, API токен, whitelist), проверка обновлений
- Список каналов — логотипы, группы, поиск
- «Сейчас играет» — текущая передача из EPG
- Горячие клавиши:
↑/↓переключение,Пробелпауза,Fполный экран - PiP — кнопка ⧉ для просмотра в плавающем окне
- Адаптивный — боковая панель скрывается на телефонах
В IPTV плеере (TiviMate, IPTV Smarters, VLC, SS IPTV):
- Плейлист:
http://192.168.1.1:8082/playlist.m3u - EPG:
http://192.168.1.1:8082/epg.xml
Устанавливается автоматически при первоначальной настройке. Раздел Services → IPTV Manager в веб-интерфейсе OpenWrt.
| Вкладка | Описание |
|---|---|
| IPTV | iframe с полной админкой |
| Плеер | iframe с HLS-плеером |
| Сервер | Запуск/остановка/мониторинг сервера |
Установка вручную:
scp -r luci-app-iptv-manager/htdocs/luci-static/resources/view/iptv-manager/* /www/luci-static/resources/view/iptv-manager/
scp -r luci-app-iptv-manager/root/usr/share/luci/menu.d/ /usr/share/luci/menu.d/
scp -r luci-app-iptv-manager/root/usr/share/rpcd/acl.d/ /usr/share/rpcd/acl.d/
scp -r luci-app-iptv-manager/root/etc/uci-defaults/ /etc/uci-defaults/
/etc/init.d/rpcd restart═══ IPTV Manager v3.20 ═══
🌐 192.168.1.1:8082 📺 152 канала
📡 EPG: ✅ 💾 2.3MB 🗄 8%
🖥️ Сервер: ✅ Запущен ⏱ 0ч 2м
── Главное меню ─────────────
1) 📡 Плейлист
2) 📺 Телепрограмма
3) 🔧 Сервер
4) ⏰ Расписание
5) 🔒 Безопасность
6) 💾 Бэкап
7) 🔄 Обновление
0) Выход
При первом запуске — экспресс-настройка за 30 секунд (плейлист по умолчанию + сервер + LuCI).
https://iptvx.one/EPG.XML— Россия/СНГ (рекомендуется)https://iptvx.one/EPG_NOARCH— Россия/СНГ без архиваhttp://epg.it999.ru/epg.xml.gz— Россия (сжатый)http://epg.pockettv.net/epg.xml.gz— Россия/СНГ
| Проблема | Решение |
|---|---|
| Сервер отвалился после обновления страницы LuCI | Подождите 20-25 секунд. Watchdog автоматически восстановит его. |
| Сервер не запускается | Проверьте, что порт 8082 свободен: kill $(pgrep -f "uhttpd.*8082") |
| Вкладка «Сервер» в LuCI не работает | Обновите CGI: cp /www/luci-static/resources/view/iptv-manager/srv.cgi /www/cgi-bin/srv.cgi && chmod +x /www/cgi-bin/srv.cgi |
| Плейлист не загружается | Проверьте URL: wget -q --spider --timeout=10 "URL" |
| LuCI не показывает IPTV Manager | /etc/init.d/rpcd restart |
| EPG не обновляется | Проверьте ссылку и наличие gzip поддержки |
Как сбросить настройки?
Через админку → Настройки → 🗑️ Сброс к заводским. Или удалите /etc/iptv/* и перезапустите сервер.
Как обновить пакет?
opkg update && opkg upgrade luci-app-iptv-managerИли скачайте новый .ipk и установите: opkg install luci-app-iptv-manager_*.ipk
Как удалить LuCI плагин?
opkg remove luci-app-iptv-managerКак полностью удалить IPTV Manager?
В SSH: выберите 0) Удалить IPTV Manager в главном меню. Удалит все конфиги, плейлист, LuCI плагин и init-скрипт.
- HLS-плеер с боковым списком, поиском, PiP и избранным
- LuCI-плагин: 3 вкладки (IPTV, Плеер, Сервер), управление сервером
- 3 темы: светлая, тёмная, OpenWrt Bootstrap Dark
- Экспресс-настройка за 30 секунд
- Белый список IP, rate limiting, пароль, API токен
- Гибридный EPG — хранение только в RAM (gz, ~15MB)
- Системная статистика: RAM, Диск, Uptime
- Авто-обновление скрипта при каждом запуске
- Валидация и объединение плейлистов
- Полностью переработанное консольное меню
- Веб-админ панель через CGI (admin.cgi)
- Загрузка плейлиста из файла и настройка провайдеров
- Поддержка XMLTV EPG — автообнаружение и загрузка
- Планировщик crontab — автообновление плейлиста и EPG
- Пошаговый визард первоначальной настройки
- Автозапуск через init.d скрипт
- Подменю SSH для навигации
- Пагинация каналов, логотипы, «Сейчас играет»
- Базовый скрипт загрузки плейлистов
- Генерация M3U и HTTP-сервер
- Поддержка HTTPS
- Автоопределение IP роутера
MIT