IPTV Checker (iptvc)
Консольная программа для проверки IPTV-плейлистов в формате m3u или m3u8.
Веб-сайт: iptv.axenov.dev
Зеркало: m3u.su
Исходный код: git.axenov.dev/IPTV/iptvc
Telegram-канал: @iptv_aggregator
Обсуждение: @iptv_aggregator_chat
Дополнительные сведения:
Установка
Достаточно скачать и распаковать архив с подходящим исполняемым файлом со страницы последнего релиза:
ОС | Архив | Платформа |
---|---|---|
Linux | linux_amd64.zip |
x64 |
MacOS | darwin_amd64.zip |
x64 |
Windows | windows_amd64.zip |
x64 |
Компиляция
Для сборки потребуется golang v1.23.6 и выше. На версиях ниже не проверялось.
- Склонировать репозиторий
- Находясь в корне репозитория, следует выполнить
make
илиmake help
для получения справки. - Другой способ -- выполнить
go run .
для быстрого запуска.
Быстрый старт
Открыть терминал в директории, куда распакован исполняемый файл iptvc
.
Выполнить ./iptvc help
для получения краткой справки.
Если был клонирован репозиторий, то вместо ./iptvc
можно запустить go run .
Ниже рассмотрены простые примеры использования программы для проверки плейлистов.
Проверка файла плейлиста
- Скачать любой файл плейлиста, сохранив его в файл с именем, например,
mypls.m3u
- Выполнить команду
./iptvc check -f mypls.m3u
Можно указывать множество разных файлов (каждый с -f
) и комбинировать с другими аргументами.
Проверка плейлиста по ссылке
- Найти прямую ссылку на плейлист в интернете, например,
http://m3u.su/XYZ
- Выполнить команду
./iptvc check -u http://m3u.su/XYZ
Можно указывать множество разных ссылок (каждый с -u
) и комбинировать с другими аргументами.
Проверка плейлиста из ini-списка
Подробности об ini-файле и его формате можно прочесть здесь: https://git.axenov.dev/IPTV/playlists
- Скачать файл
playlists.ini
или создать локальный файл в аналогичном формате (например,./test.ini
) - Выполнить команду
./iptvc check
или./iptvc check -i playlist.ini
для проверки всех плейлистов из файла./playlists.ini
- Выполнить команду
./iptvc check -i test.ini -c ABC
, чтобы проверить только плейлист с кодомABC
из файла./test.ini
Если -i
не указан явно, то будет попытка прочитать файл playlists.ini
, находящийся в одной директории с iptvc.
Аргумент -i
можно указывать только однажды, но его можно комбинировать с -f
и -u
.
Другие возможности команды check
--random|-r X
-- проверить X случайных плейлистов из ini-файла--json|-j
-- вывести результаты проверки в формате JSON--quiet|-q
-- полностью подавить вывод лога (включая отладочную информацию)--verbose|-v
-- добавить в лог более подробную отладочную информацию (значительно увеличит количество строк!)--tags|-t
-- файл с перечислением тегов (подробности см. здесь)
Например, можно получить только json с результатами, передать его в jq
и, отфильтровав результат, вывести названия оффлайн каналов:
./iptvc check ... -j -q | jq '.[].channels[] | select(.isOnline == false).title'
Note
Набери
./iptvc help
для получения помощи.
Результаты проверки
Программа логирует процесс и результаты своей работы. Рассмотрим лог на примере.
В рабочей директории лежит файл playlists.ini
, в котором минимально описано два плейлиста:
[first]
pls='https://example.com/list1.m3u'
[second]
pls='https://example.com/list2.m3u'
Программа запущена следующим образом: ./iptvc check -c first
(чтобы проверить только плейлист с кодом first
из ini-файла).
Вывод будет примерно таким:
2025/01/02 12:34:00 Loading playlists from ini-file: /home/user/playlists.ini
2025/01/02 12:34:00 Loaded 2 playlists
2025/01/02 12:34:00 [001/001] Playlist [first]
2025/01/02 12:34:00 Fetching... (https://example.com/list1.m3u)
2025/01/02 12:34:00 Parsing content...
2025/01/02 12:34:00 Parsed, checking channels (114)...
2025/01/02 12:34:00 Check parameters calculated: count=114 timeout=8.00s routines=12
2025/01/02 12:34:12 Checked successfully! online=101 onlinePercent=88.60% offline=13 offlinePercent=11.40% elapsedTime=12.39s
Разберём построчно:
- Загрузка ini-файла
- Файл загружен, в нём 2 плейлиста
- Начало обработки плейлиста
first
- Скачивание плейлиста
first
по ссылкеhttps://example.com/list1.m3u
в оперативную память - Плейлист скачан, начало разбора плейлиста
- Плейлист разобран, начало проверки каналов (114 штук)
- Определены параметры проверки (подробности ниже)
- (спустя время) Проверка успешно завершена: онлайн каналов 101 (88.60% от всех), оффлайн каналов 13 (11.40% от всех), затрачено 12 секунд.
Параметры проверки
Выше в п.7 видно некоторые служебные данные:
timeout
-- таймаут каждого запроса в секундах (макс. время ожидания ответа канала);routines
-- количество одновременных проверок.
Эти параметры рассчитываются динамически для каждого плейлиста в отдельности, исходя из количества каналов в каждом (count
).
См. app/checker/checker.go для подробностей.
Идея в том, чтобы найти баланс между скоростью проверки и качеством:
- чем ниже коэффициент
k
, тем больше горутин, меньше таймаут, быстрее проверка, хуже результаты; - чем выше коэффициент
k
, тем меньше горутин, больше таймаут, медленнее проверка, лучше результаты.
На скорость проверки влияют:
- количество горутин (чем выше, тем больше каналов проверяется параллельно);
- таймаут (тем ниже, тем быстрее закончится проверка канала);
- количество каналов (чем больше, тем дольше общий процесс);
- скорость ответа сервера (чем выше, тем хуже) и количество данных, которые он отдаёт (чем больше, тем хуже).
На качество проверки влияет таймаут:
- чем выше, тем выше вероятность получить успешный ответ от сервера, транслирующего поток;
- чем ниже, тем выше вероятность не дождаться успешного ответа и засчитать канал нерабочим.
Note
Логика балансирования будет уточняться и корректироваться по мере развития проекта, исходя из реального применения.
Коды возврата
- 0 -- успех
- 1 -- общая ошибка, см. вывод
- 2 -- команде
check
не переданы параметры--file
,--url
и--code
Лицензия
ПО распространяется на условиях лицензии MIT.