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 и выше. На версиях ниже не проверялось.

  1. Склонировать репозиторий
  2. Находясь в корне репозитория, следует выполнить make или make help для получения справки.
  3. Другой способ -- выполнить go run . для быстрого запуска.

Быстрый старт

Открыть терминал в директории, куда распакован исполняемый файл iptvc.

Выполнить ./iptvc help для получения краткой справки.

Если был клонирован репозиторий, то вместо ./iptvc можно запустить go run .

Ниже рассмотрены простые примеры использования программы для проверки плейлистов.

Проверка файла плейлиста

  1. Скачать любой файл плейлиста, сохранив его в файл с именем, например, mypls.m3u
  2. Выполнить команду ./iptvc check -f mypls.m3u

Можно указывать множество разных файлов (каждый с -f) и комбинировать с другими аргументами.

Проверка плейлиста по ссылке

  1. Найти прямую ссылку на плейлист в интернете, например, http://m3u.su/XYZ
  2. Выполнить команду ./iptvc check -u http://m3u.su/XYZ

Можно указывать множество разных ссылок (каждый с -u) и комбинировать с другими аргументами.

Проверка плейлиста из ini-списка

Подробности об ini-файле и его формате можно прочесть здесь: https://git.axenov.dev/IPTV/playlists

  1. Скачать файл playlists.ini или создать локальный файл в аналогичном формате (например, ./test.ini)
  2. Выполнить команду ./iptvc check или ./iptvc check -i playlist.ini для проверки всех плейлистов из файла ./playlists.ini
  3. Выполнить команду ./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

Разберём построчно:

  1. Загрузка ini-файла
  2. Файл загружен, в нём 2 плейлиста
  3. Начало обработки плейлиста first
  4. Скачивание плейлиста first по ссылке https://example.com/list1.m3u в оперативную память
  5. Плейлист скачан, начало разбора плейлиста
  6. Плейлист разобран, начало проверки каналов (114 штук)
  7. Определены параметры проверки (подробности ниже)
  8. (спустя время) Проверка успешно завершена: онлайн каналов 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.

Description
Программа для проверки плейлистов IPTV
https://iptv.axenov.dev Readme 192 KiB
v1.0.4 Latest
2025-05-16 18:10:16 +03:00
Languages
Go 96.2%
Makefile 3.8%