wip7
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 70 KiB |
@@ -0,0 +1,577 @@
|
||||
---
|
||||
title: config.yml
|
||||
icon: material/file-cog
|
||||
tags: ["iptvc", "конфигурация"]
|
||||
---
|
||||
|
||||
# :material-file-cog: Конфигурация config.yml
|
||||
|
||||
Программа читает настройки из YAML-файла `config.yml` в корне проекта.
|
||||
Путь к файлу можно задать через глобальный флаг `--config`.
|
||||
|
||||
## Приоритет настроек
|
||||
|
||||
От низшего к высшему:
|
||||
|
||||
1. **Значения по умолчанию** — встроены в код;
|
||||
2. **`config.yml`** — YAML-файл;
|
||||
3. **Переменные окружения** — переопределяют `config.yml` (если заданы);
|
||||
4. **CLI-флаги** — переопределяют переменные окружения и `config.yml` (если заданы явно).
|
||||
|
||||
Файл `.env` загружается автоматически, переменные из него применяются как переменные окружения.
|
||||
|
||||
## Структура файла
|
||||
|
||||
```yaml
|
||||
app:
|
||||
timezone: GMT
|
||||
debug: false
|
||||
log_level: info
|
||||
playlists: ./playlists.ini
|
||||
tags: ./channels.json
|
||||
|
||||
server:
|
||||
host: localhost
|
||||
port: 8080
|
||||
|
||||
site:
|
||||
base-url: http://localhost:8080
|
||||
repo-url: https://git.axenov.dev/IPTV
|
||||
page-size: 0
|
||||
favicon:
|
||||
header:
|
||||
title: IPTV Checker
|
||||
navigation:
|
||||
- title: Документация
|
||||
url: /docs
|
||||
icon: document-text-outline
|
||||
footer-links:
|
||||
- title: Исходники
|
||||
url: https://git.axenov.dev/IPTV
|
||||
icon: code-slash-outline
|
||||
|
||||
check:
|
||||
start-on-serve: false
|
||||
playlists:
|
||||
user-agent:
|
||||
- Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
|
||||
timeout: 10000
|
||||
all-cooldown: 0
|
||||
one-cooldown: 0
|
||||
max-routines: 5
|
||||
per-routine: 1
|
||||
channels:
|
||||
user-agent: Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
|
||||
timeout: 10000
|
||||
byte-range: 512
|
||||
cooldown: 0
|
||||
max-routines: 50
|
||||
per-routine: 10
|
||||
|
||||
cache:
|
||||
enabled: false
|
||||
host: localhost
|
||||
port: 6379
|
||||
username:
|
||||
password:
|
||||
db: 0
|
||||
ttl: 1800
|
||||
```
|
||||
|
||||
Каждый параметр ниже описан отдельной секцией с указанием значения по умолчанию, переменной окружения и соответствующего CLI-флага.
|
||||
|
||||
---
|
||||
|
||||
## Секция `app` { id=app }
|
||||
|
||||
### `app.timezone` { id=app-timezone }
|
||||
|
||||
<!-- md:default GMT -->
|
||||
<!-- md:env APP_TIMEZONE -->
|
||||
|
||||
Часовой пояс, используемый в логах и при отображении времени проверок.
|
||||
|
||||
---
|
||||
|
||||
### `app.debug` { id=app-debug }
|
||||
|
||||
<!-- md:default false -->
|
||||
<!-- md:env APP_DEBUG -->
|
||||
<!-- md:arg --debug -->
|
||||
|
||||
Режим отладки.
|
||||
Включает расширенное логирование и дополнительные проверки в логике приложения.
|
||||
|
||||
---
|
||||
|
||||
### `app.log_level` { id=app-log-level }
|
||||
|
||||
<!-- md:default info -->
|
||||
<!-- md:env APP_LOG_LEVEL -->
|
||||
<!-- md:arg --log-level -->
|
||||
|
||||
Уровень логирования.
|
||||
Допустимые значения: `debug`, `info`, `warn`, `error`.
|
||||
|
||||
---
|
||||
|
||||
### `app.playlists` { id=app-playlists }
|
||||
|
||||
<!-- md:default ./playlists.ini -->
|
||||
<!-- md:env APP_PLAYLISTS -->
|
||||
<!-- md:arg --ini -->
|
||||
|
||||
Путь к локальному [ini-файлу](../../common/formats/playlists.md) с описанием плейлистов.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `app.tags` { id=app-tags }
|
||||
|
||||
<!-- md:default ./channels.json -->
|
||||
<!-- md:env APP_TAGS -->
|
||||
<!-- md:arg --tags -->
|
||||
|
||||
Путь к локальному [json-файлу](../../common/formats/channels.md) с описанием тегов каналов.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
## Секция `server` { id=server }
|
||||
|
||||
### `server.host` { id=server-host }
|
||||
|
||||
<!-- md:default -->
|
||||
<!-- md:env WEB_HOST -->
|
||||
<!-- md:arg --host -->
|
||||
|
||||
Хост для привязки веб-сервера.
|
||||
Пустая строка — слушать на всех интерфейсах.
|
||||
|
||||
!!! info "Аргумент работает только для команды `serve`."
|
||||
|
||||
---
|
||||
|
||||
### `server.port` { id=server-port }
|
||||
|
||||
<!-- md:default 8080 -->
|
||||
<!-- md:env WEB_PORT -->
|
||||
<!-- md:arg -p, --port -->
|
||||
|
||||
Порт веб-сервера.
|
||||
|
||||
!!! info "Аргумент работает только для команды `serve`."
|
||||
|
||||
---
|
||||
|
||||
## Секция `site` { id=site }
|
||||
|
||||
Настройки внешнего вида и ссылок сайта: заголовок, навигация, пагинация, иконка.
|
||||
|
||||
### `site.base-url` { id=site-base-url }
|
||||
|
||||
<!-- md:default http://localhost:8080 -->
|
||||
<!-- md:env APP_URL -->
|
||||
|
||||
Базовый URL сайта.
|
||||
Используется при формировании абсолютных ссылок в шаблонах.
|
||||
|
||||
---
|
||||
|
||||
### `site.repo-url` { id=site-repo-url }
|
||||
|
||||
<!-- md:default https://git.axenov.dev/IPTV -->
|
||||
<!-- md:env REPO_URL -->
|
||||
|
||||
Ссылка на исходный репозиторий (отображается в подвале).
|
||||
|
||||
---
|
||||
|
||||
### `site.page-size` { id=site-page-size }
|
||||
|
||||
<!-- md:default 0 -->
|
||||
<!-- md:env PAGE_SIZE -->
|
||||
|
||||
Размер страницы пагинации.
|
||||
При значении `0` пагинация отключена, на главной странице выводятся все плейлисты.
|
||||
|
||||
---
|
||||
|
||||
### `site.favicon` { id=site-favicon }
|
||||
|
||||
<!-- md:default -->
|
||||
<!-- md:env SITE_FAVICON -->
|
||||
|
||||
Путь к файлу иконки сайта. Пустая строка — используется встроенная.
|
||||
|
||||
---
|
||||
|
||||
### `site.header.title` { id=site-header-title }
|
||||
|
||||
<!-- md:default IPTV Checker -->
|
||||
<!-- md:env APP_TITLE -->
|
||||
|
||||
Заголовок сайта, отображается в `<title>` и в navbar.
|
||||
|
||||
---
|
||||
|
||||
### `site.header.navigation` { id=site-header-navigation }
|
||||
|
||||
Массив элементов [`Link`](#link) в шапке сайта.
|
||||
|
||||
---
|
||||
|
||||
### `site.footer-links` { id=site-footer-links }
|
||||
|
||||
Массив элементов [`Link`](#link) в подвале сайта.
|
||||
|
||||
---
|
||||
|
||||
### Тип `Link` { id=link }
|
||||
|
||||
Элемент навигации или подвала.
|
||||
Если задано `children`, рендерится как выпадающее меню.
|
||||
|
||||
| Поле | Тип | Описание |
|
||||
| ---------- | ------ | ----------------------------------------------------------- |
|
||||
| `title` | string | Текст ссылки |
|
||||
| `url` | string | URL ссылки (можно опустить, если есть `children`) |
|
||||
| `icon` | string | Имя иконки |
|
||||
| `children` | Link[] | Дочерние ссылки (выпадающее меню, один уровень вложенности) |
|
||||
|
||||
--8<-- "ionicons-name.md"
|
||||
|
||||
```yaml title="Пример"
|
||||
site:
|
||||
header:
|
||||
navigation:
|
||||
- title: Документация
|
||||
url: /docs
|
||||
icon: document-text-outline
|
||||
- title: Telegram
|
||||
icon: paper-plane-outline
|
||||
children:
|
||||
- title: Канал
|
||||
url: https://t.me/iptv_aggregator
|
||||
icon: megaphone-outline
|
||||
- title: Чат
|
||||
url: https://t.me/iptv_aggregator_chat
|
||||
icon: chatbubbles-outline
|
||||
footer-links:
|
||||
- title: Исходники
|
||||
url: https://git.axenov.dev/IPTV
|
||||
icon: code-slash-outline
|
||||
- title: axenov.dev
|
||||
url: https://axenov.dev
|
||||
icon: person-outline
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Секция `check` { id=check }
|
||||
|
||||
Параметры проверки плейлистов и каналов. Поддерживаются скаляры и массивы.
|
||||
|
||||
---
|
||||
|
||||
### `check.start-on-serve` { id=check-start-on-serve }
|
||||
|
||||
<!-- md:default false -->
|
||||
<!-- md:env CHECK_START_ON_SERVE -->
|
||||
|
||||
Запустить фоновую проверку при `serve` без явного флага `--check`.
|
||||
|
||||
Независимый переключатель от CLI-флага `--check` — фоновая проверка стартует, если **хотя бы один** из них активен.
|
||||
|
||||
---
|
||||
|
||||
### `check.playlists` { id=check-playlists }
|
||||
|
||||
Параметры проверки плейлистов (загрузка m3u-файлов по URL или из ФС).
|
||||
|
||||
---
|
||||
|
||||
#### `check.playlists.user-agent` { id=check-playlists-user-agent }
|
||||
|
||||
<!-- md:default Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer -->
|
||||
|
||||
<!-- md:env CHECK_PLAYLISTS_USER_AGENT_* -->
|
||||
<!-- md:arg --playlists-user-agent -->
|
||||
|
||||
User-Agent для HTTP-запросов плейлистов.
|
||||
|
||||
!!! info "Необычный параметр"
|
||||
Если значение параметра задано строкой, то в запросах к плейлистам будет использоваться только оно.
|
||||
|
||||
Если значение параметра задано массивом строк, то в запросах к плейлистам будет использоваться случайный из указанных.
|
||||
|
||||
!!! info "Необычная переменная"
|
||||
В окружении может задаваться индексированными переменными:
|
||||
|
||||
- `CHECK_PLAYLISTS_USER_AGENT_1="value1"`
|
||||
- `CHECK_PLAYLISTS_USER_AGENT_2="value2"`
|
||||
- и т.д.; чтение останавливается на первой отсутствующей.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.playlists.timeout` { id=check-playlists-timeout }
|
||||
|
||||
<!-- md:default 10000 -->
|
||||
<!-- md:env CHECK_PLAYLISTS_TIMEOUT -->
|
||||
<!-- md:arg --playlists-timeout -->
|
||||
|
||||
Таймаут HTTP-запроса плейлиста в миллисекундах.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.playlists.all-cooldown` { id=check-playlists-all-cooldown }
|
||||
|
||||
<!-- md:default 0 -->
|
||||
<!-- md:env CHECK_PLAYLISTS_ALL_COOLDOWN -->
|
||||
<!-- md:arg --playlists-all-cooldown -->
|
||||
|
||||
Задержка после проверки всех плейлистов в миллисекундах.
|
||||
|
||||
!!! info "Необычная переменная"
|
||||
Если значение переменной указано одним числом, то для задержки будет использоваться только оно.
|
||||
|
||||
Если значение переменной указано двумя числами через запятую, то будет использоваться случайная задержка в указанном диапазоне.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.playlists.one-cooldown` { id=check-playlists-one-cooldown }
|
||||
|
||||
<!-- md:default 0 -->
|
||||
<!-- md:env CHECK_PLAYLISTS_ONE_COOLDOWN -->
|
||||
<!-- md:arg --playlists-one-cooldown -->
|
||||
|
||||
Задержка после проверки каждого плейлиста в миллисекундах.
|
||||
|
||||
!!! info "Необычная переменная"
|
||||
Если значение переменной указано одним числом, то для задержки будет использоваться только оно.
|
||||
|
||||
Если значение переменной указано двумя числами через запятую, то будет использоваться случайная задержка в указанном диапазоне.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.playlists.max-routines` { id=check-playlists-max-routines }
|
||||
|
||||
<!-- md:default 5 -->
|
||||
<!-- md:env CHECK_PLAYLISTS_MAX_ROUTINES -->
|
||||
<!-- md:arg --playlists-max-routines -->
|
||||
|
||||
Максимальное количество параллельных потоков (рутин) проверки плейлистов.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.playlists.per-routine` { id=check-playlists-per-routine }
|
||||
|
||||
<!-- md:default 1 -->
|
||||
<!-- md:env CHECK_PLAYLISTS_PER_ROUTINE -->
|
||||
<!-- md:arg --playlists-per-routine -->
|
||||
|
||||
Максимальное количество плейлистов в каждом потоке (рутине) проверки.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `check.channels` { id=check-channels }
|
||||
|
||||
Параметры проверки каналов внутри плейлиста.
|
||||
|
||||
---
|
||||
|
||||
#### `check.channels.user-agent` { id=check-channels-user-agent }
|
||||
|
||||
<!-- md:default Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer -->
|
||||
|
||||
<!-- md:env CHECK_CHANNELS_USER_AGENT_* -->
|
||||
<!-- md:arg --channels-user-agent -->
|
||||
|
||||
User-Agent для HTTP-запроса каждого канала каждого плейлиста.
|
||||
|
||||
!!! info "Необычный параметр"
|
||||
Если значение параметра задано строкой, то в запросах к каналам будет использоваться только оно.
|
||||
|
||||
Если значение параметра задано массивом строк, то в запросах к каналам будет использоваться случайный из указанных.
|
||||
|
||||
!!! info "Необычная переменная"
|
||||
В окружении может задаваться индексированными переменными:
|
||||
|
||||
- `CHECK_CHANNELS_USER_AGENT_1="value1"`
|
||||
- `CHECK_CHANNELS_USER_AGENT_2="value2"`
|
||||
- и т.д.; чтение останавливается на первой отсутствующей.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.channels.timeout` { id=check-channels-timeout }
|
||||
|
||||
<!-- md:default 10000 -->
|
||||
<!-- md:env CHECK_PLAYLISTS_TIMEOUT -->
|
||||
<!-- md:arg --channels-timeout -->
|
||||
|
||||
Таймаут HTTP-запроса каждого канала каждого плейлиста в миллисекундах.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.channels.byte-range` { id=check-channels-byte-range }
|
||||
|
||||
<!-- md:default 512 -->
|
||||
<!-- md:env CHECK_CHANNELS_BYTE_RANGE -->
|
||||
<!-- md:arg --channels-byte-range -->
|
||||
|
||||
Объём данных в байтах, запрашиваемых у сервера при проверке каждого канала каждого плейлиста.
|
||||
|
||||
Меньшее значение повышает риск ошибок в определении типа контента (mime-type).
|
||||
|
||||
Большее значение может приводить к повышенной нагрузке и увеличению времени проверки.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.channels.cooldown` { id=check-channels-cooldown }
|
||||
|
||||
<!-- md:default 0 -->
|
||||
<!-- md:env CHECK_CHANNELS_COOLDOWN -->
|
||||
<!-- md:arg --channels-cooldown -->
|
||||
|
||||
Задержка после проверки каждого канала каждого плейлиста в миллисекундах.
|
||||
|
||||
!!! info "Необычная переменная"
|
||||
Если значение переменной указано одним числом, то для задержки будет использоваться только оно.
|
||||
|
||||
Если значение переменной указано двумя числами через запятую, то будет использоваться случайная задержка в указанном диапазоне.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.channels.max-routines` { id=check-channels-max-routines }
|
||||
|
||||
<!-- md:default 50 -->
|
||||
<!-- md:env CHECK_CHANNELS_MAX_ROUTINES -->
|
||||
<!-- md:arg --channels-max-routines -->
|
||||
|
||||
Максимальное количество параллельных потоков (рутин) проверки каналов каждого плейлиста.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
#### `check.channels.per-routine` { id=check-channels-per-routine }
|
||||
|
||||
<!-- md:default 10 -->
|
||||
<!-- md:env CHECK_CHANNELS_PER_ROUTINE -->
|
||||
<!-- md:arg --channels-per-routine -->
|
||||
|
||||
Максимальное количество каналов в каждом потоке (рутине) проверки каждого плейлиста.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
## Секция `cache` { id=cache }
|
||||
|
||||
Параметры подключения к KeyDB/Redis для хранения результатов проверок.
|
||||
|
||||
---
|
||||
|
||||
### `cache.enabled` { id=cache-enabled }
|
||||
|
||||
<!-- md:default false -->
|
||||
<!-- md:env CACHE_ENABLED -->
|
||||
<!-- md:arg --cache-enabled -->
|
||||
|
||||
Включить использование внешнего кеша.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `cache.host` { id=cache-host }
|
||||
|
||||
<!-- md:default localhost -->
|
||||
<!-- md:env CACHE_HOST -->
|
||||
<!-- md:arg --cache-host -->
|
||||
|
||||
Хост KeyDB/Redis.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `cache.port` { id=cache-port }
|
||||
|
||||
<!-- md:default 6379 -->
|
||||
<!-- md:env CACHE_PORT -->
|
||||
<!-- md:arg --cache-port -->
|
||||
|
||||
Порт KeyDB/Redis.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `cache.username` { id=cache-username }
|
||||
|
||||
<!-- md:default -->
|
||||
<!-- md:env CACHE_USERNAME -->
|
||||
<!-- md:arg --cache-username -->
|
||||
|
||||
Логин для подключения. Пустая строка — без аутентификации.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `cache.password` { id=cache-password }
|
||||
|
||||
<!-- md:default -->
|
||||
<!-- md:env CACHE_PASSWORD -->
|
||||
<!-- md:arg --cache-password -->
|
||||
|
||||
Пароль для подключения.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `cache.db` { id=cache-db }
|
||||
|
||||
<!-- md:default 0 -->
|
||||
<!-- md:env CACHE_DB -->
|
||||
<!-- md:arg --cache-db -->
|
||||
|
||||
Номер логической базы данных в KeyDB/Redis.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
|
||||
---
|
||||
|
||||
### `cache.ttl` { id=cache-ttl }
|
||||
|
||||
<!-- md:default 1800 -->
|
||||
<!-- md:env CACHE_TTL -->
|
||||
<!-- md:arg --cache-ttl -->
|
||||
|
||||
TTL записей кеша, секунды.
|
||||
|
||||
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
icon: material/book-open-page-variant-outline
|
||||
---
|
||||
|
||||
# :material-book-open-page-variant-outline: Об этой документации
|
||||
|
||||
!!! warning "Актуальность документации может отставать от текущей версии сервиса, его исходных кодов и инфраструктуры"
|
||||
Поддерживать содержимое в актуальном состоянии большой труд.
|
||||
Прошу отнестись с пониманием, а лучше — [помочь делом](support.md#participate).
|
||||
|
||||
<!--
|
||||
!!! danger "Тем не менее, прошу прочесть её!"
|
||||
Потому что очень часто и мне, и в общий чат поступают одинаковые вопросы, на которые уже просто нет сил отвечать персонально.
|
||||
-->
|
||||
|
||||
Если у тебя возникает вопрос, на который уже есть ответ на одной из этих страниц, то ты рискуешь
|
||||
|
||||
* либо быть посланным сюда;
|
||||
* либо быть посланным далеко не сюда;
|
||||
* либо остаться в игноре.
|
||||
|
||||
## Навигация
|
||||
|
||||
К твоим услугам:
|
||||
|
||||
1. в заголовке сайта — глобальный поиск;
|
||||
2. над заголовком страницы — метки страницы (полный список ниже);
|
||||
3. слева — общее содержание;
|
||||
4. справа — содержание конкретной страницы.
|
||||
|
||||
??? info end "На мобильниках содержание страницы спрятано за этой кнопкой в боковом меню:"
|
||||

|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: channels.json
|
||||
icon: material/code-json
|
||||
tags: ["iptvc", "теги", "каналы"]
|
||||
---
|
||||
|
||||
# :material-code-json: Формат файла `channels.json`
|
||||
|
||||
Категории каналов указываются в файле `channels.json` в следующем формате:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"tvg-id": "регулярное выражение для значения атрибута tvg-id",
|
||||
"tvg-name": "регулярное выражение для значения атрибута tvg-name",
|
||||
"title": "регулярное выражение для названия канала",
|
||||
"tags": [
|
||||
"список",
|
||||
"тегов",
|
||||
"(см. ниже)"
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Приоритет параметров:
|
||||
|
||||
* `tvg-id`
|
||||
* `tvg-name`
|
||||
* `title`
|
||||
|
||||
Если указаны все или несколько, то применится только тот один, который по приоритету выше.
|
||||
|
||||
Параметр `tags` обязателен, список может быть (не)пустым.
|
||||
Категории в списке указываются в двойных кавычках.
|
||||
После каждой категории, кроме последней, ставится запятая.
|
||||
|
||||
Регулярные выражения должны быть PCRE-совместимыми.
|
||||
|
||||
Каналы сопоставляются в нижнем регистре.
|
||||
|
||||
## Рекомендации и предостережения { id="warnings" }
|
||||
|
||||
1. Если хочешь написать новое правило, будь осторожен с регулярками.
|
||||
Старайся не охватывать несколько каналов сразу.
|
||||
Если канал попадёт в несколько регулярок, то его **теги могут оказаться неожиданными** и найти проблему может быть сложно.
|
||||
2. Указывай внутри `{}` только `tags` и один из параметров `tvg-id`, `tvg-name` или `title`.
|
||||
Множество параметров на точность не влияет, зато будет проще уместить всё правило в одну строку и grep-ать файл.
|
||||
3. Не забывай, что название на кириллице не всегда означает, что это российский канал или вещание на русском языке.
|
||||
4. Разные каналы могут быть названы одинаково или похоже.
|
||||
Например, `Первый канал`, `Первый Тульский`, `Первый городской`.
|
||||
5. Один канал может быть назван по-разному.
|
||||
Например, `Ю` или `Ю!`, `Россия 1 +5` или `Россия-1`.
|
||||
6. Важно учитывать холдинги.
|
||||
Например, российские Матч, ТНТ и НТВ имеют множество разных каналов, и тупо искать `^нтв$` — тупо.
|
||||
7. У всех каналов есть `title`.
|
||||
Не все каналы имеют `tvg-id`.
|
||||
Некоторые каналы имеют `tvg-name`.
|
||||
Все три параметра могут оказаться на кириллице.
|
||||
|
||||
## Доступные теги { id="доступные-теги" }
|
||||
|
||||
| Ключевое слово | Описание |
|
||||
| -------------- | ----------------------------------------------------------- |
|
||||
| `untagged` | Неизвестно (ставится по умолчанию, если нет иных) |
|
||||
| `unstable` | Нестабильные каналы |
|
||||
| `hd` | Каналы в высоком качестве |
|
||||
| `4k` | Каналы в супервысоком качестве |
|
||||
| `8k` | Каналы в гигавысоком качестве (а вдруг?) |
|
||||
| `adult` | Контент для взрослых 18+ |
|
||||
| `army` | Каналы военные, об оружии, технике, армии, боевых действиях |
|
||||
| `central` | Центральное ТВ (гос. каналы, федеральные) |
|
||||
| `child` | Детские и подростковые каналы |
|
||||
| `culture` | Каналы о культуре, театре |
|
||||
| `crime` | Каналы с детективами и о преступлениях (true-crime) |
|
||||
| `cyber` | Киберспортивные |
|
||||
| `docs` | Каналы с документальными фильмами |
|
||||
| `fashion` | Мода и стиль |
|
||||
| `film` | Каналы с фильмами |
|
||||
| `finance` | Бизнес, финансы, капитал |
|
||||
| `food` | Кулинарные каналы |
|
||||
| `fun` | Развлекательные каналы и шоу |
|
||||
| `garden` | Сад, огород, фермерство, домашнее хозяйство |
|
||||
| `health` | Каналы о здоровье |
|
||||
| `history` | Исторические каналы |
|
||||
| `house` | О строительстве, ремонте, интерьере и жилье |
|
||||
| `humor` | Юмористические каналы, комедии |
|
||||
| `hunt-fish` | Охота и рыбалка |
|
||||
| `local` | Местные региональные каналы |
|
||||
| `music` | Музыкальные |
|
||||
| `mystic` | Каналы о мистике, потустороннем, НЛО и прочей пиздаболии |
|
||||
| `nature` | Каналы о природе, животных |
|
||||
| `news` | Новостные каналы |
|
||||
| `politic` | Каналы политические, партийные, правительстенные |
|
||||
| `radio` | Радиоканалы (радиостанции, подкасты, аудиоспектакли...) |
|
||||
| `religion` | Религиозные каналы |
|
||||
| `retro` | Ностальгия и ретро, музыка, старые передачи |
|
||||
| `sci` | Научные и познавательные |
|
||||
| `series` | Каналы с сериалами |
|
||||
| `shopping` | Телемагазины |
|
||||
| `sport` | Спортивные |
|
||||
| `tech` | Каналы о технологиях |
|
||||
| `transport` | Каналы о транспорте (авто, мото, ЖД...) |
|
||||
| `travel` | Каналы о путешествиях |
|
||||
| `webcam` | Уличные веб-камеры |
|
||||
|
||||
Также в категориях можно указывать страну вещания.
|
||||
Это должен быть буквенный код АЛЬФА-2 из общероссийского классификатора стран мира (ОКСМ):
|
||||
|
||||
* [normativ.kontur.ru](https://normativ.kontur.ru/document?moduleId=1&documentId=22668#h1296)
|
||||
* [classifikators.ru](https://classifikators.ru/oksm)
|
||||
@@ -0,0 +1,135 @@
|
||||
---
|
||||
title: "*.m3u (*.m3u8)"
|
||||
icon: material/playlist-play
|
||||
tags: ["плейлисты", "каналы"]
|
||||
---
|
||||
|
||||
# :material-playlist-play: Формат файлов `*.m3u` (`*.m3u8`)
|
||||
|
||||
Формат применяется для составления мультимедиа плейлистов, как оффлайн, так и онлайн.
|
||||
|
||||
Разница между m3u и m3u8 уже давно отсутствует, но исторически так сложилось, то m3u8 должен был быть только в формате UTF-8.
|
||||
|
||||
Директивы начинаются с новой строки и символа `#`.
|
||||
У каждой директивы могут (не) быть атрибуты, которые следуют в одну строку.
|
||||
|
||||
После директив с новой строки указывается ссылка на канал (или путь к файлу).
|
||||
|
||||
В свою чередь, по этой ссылке может быть:
|
||||
|
||||
* либо текстовое представление контента в формате m3u/m3u8/XMLTV/MPD с описанием непосредственно участки трансляции;
|
||||
* либо непосредственно сама потоковая трансляция mp4 или т. п.
|
||||
|
||||
Рассмотрим на выдуманном примере плейлиста IPTV:
|
||||
|
||||
```m3u
|
||||
#EXTM3U url-tvg="https://iptvx.one/EPG" catchup="append" catchup-days="3" catchup-source="?offset=-${offset}&utcstart=${timestamp}"
|
||||
|
||||
#EXTINF:-1 tvg-id="ntv" tvg-logo="http://epg.it999.ru/img2/2001.png",НТВ HD
|
||||
#EXTGRP:🇷🇺 Эфирные
|
||||
http://example.com/play-ntv.m3u
|
||||
|
||||
#EXTINF:-1 tvg-logo="http://tvoetv.space/tvoetv.png" tvg-id="tvoetv",Твоё ТВ HD v8 с VPN
|
||||
http://example.com/play-tvoetv.m3u
|
||||
|
||||
#EXTINF:0 tvg-name="BBC" audio-track="eng" tvg-logo="http://mylogos.domain/BBC.png", BBC World
|
||||
http://example.com/play-bbc.m3u
|
||||
|
||||
#EXTINF:-1 tvg-id="5TV.am" tvg-country="AM" tvg-language="Armenian" tvg-logo="https://i.imgur.com/yigw9dr.png" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148" group-title="General",5-րդ ալիք (480p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
|
||||
#EXTVLCOPT:http-caching=1200
|
||||
http://example.com/play-am.m3u8
|
||||
```
|
||||
|
||||
### Директива `#EXTM3U` { id="EXTM3U" }
|
||||
|
||||
Заголовок файла (обязателен).
|
||||
|
||||
#### Атрибут `url-tvg` (он же `x-tvg-url`) { id="url-tvg" }
|
||||
|
||||
Ссылка программу передач в формате `*.xml` или `*.xml.gz`.
|
||||
|
||||
#### Атрибуты `catchup*` { id="catchup" }
|
||||
|
||||
Читай здесь: [Архив телепрограмм (SS IPTV)](https://ss-iptv.com/ru/operators/catchup)
|
||||
|
||||
### Директива `#EXTGRP` { id="EXTGRP" }
|
||||
|
||||
Название группы, к которой относится контент (звуковая дорожка или канал).
|
||||
|
||||
Указывается в формате `#EXTGRP:XXX`, где: `XXX` — название группы.
|
||||
|
||||
### Директива `#EXTINF` { id="EXTINF" }
|
||||
|
||||
Описывает контент (звуковую дорожку или канал).
|
||||
|
||||
Указывается в формате `#EXTINF:XXX YYY,ZZZ`, где:
|
||||
* `XXX` — длительность в секундах (обязательно, но может быть `-1` или `0`);
|
||||
* `YYY` — атрибуты (см. ниже);
|
||||
* `ZZZ` — название контента;
|
||||
|
||||
#### Атрибут `tvg-shift` { id="tvg-shift" }
|
||||
|
||||
Cмещение телепрограммы в часах относительно указанного в программе.
|
||||
|
||||
#### Атрибуты `tvg-id` и `tvg-name` { id="tvg-id" }
|
||||
<a id="tvg-name"></a>
|
||||
|
||||
Идентификатор телепрограммы канала.
|
||||
По нему телепрограмма привязывается к трансляции с учётом смещения времени.
|
||||
|
||||
#### Атрибут `tvg-logo` { id="tvg-logo" }
|
||||
|
||||
Ссылка на логотип канала.
|
||||
|
||||
#### Атрибут `tvg-country` { id="tvg-country" }
|
||||
|
||||
Код Alpha-2 страны вещания согласно ISO 3166-1 или ОКСМ.
|
||||
|
||||
#### Атрибут `tvg-language` { id="tvg-language" }
|
||||
|
||||
Название языка телепередачи согласно ISO 639-2.
|
||||
|
||||
#### Атрибут `group-title` { id="group-title" }
|
||||
|
||||
Название группы.
|
||||
По функционалу идентичен директиве `#EXTGRP`.
|
||||
|
||||
#### Атрибут `user-agent` { id="user-agent" }
|
||||
|
||||
Значение заголовка `User-Agent` для обращения к контенту по http.
|
||||
|
||||
#### Атрибут `audio-track` { id="audio-track" }
|
||||
|
||||
Языковой код (ISO 639-2) аудио дорожки канала, например: "eng,rus".
|
||||
|
||||
Допускается указание нескольких аудио дорожек через запятую: "rus,ukr,eng".
|
||||
|
||||
Дорожкой по умолчанию устанавливается первая указанная в списке.
|
||||
|
||||
#### Атрибут `aspect-ratio` { id="aspect-ratio" }
|
||||
|
||||
Определяет пропорции экрана (может быть недоступно для некоторых моделей телевизоров).
|
||||
|
||||
Допустимые значения: 16:9, 3:2, 4:3, 1,85:1, 2,39:1 (наиболее распространенное значение для фильмов)
|
||||
|
||||
### Директива `#EXTVLCOPT` { id="EXTVLCOPT" }
|
||||
|
||||
Специфична для VLC Player.
|
||||
Директив может быть множество для одной дорожки (канала).
|
||||
|
||||
Указывается в формате `#EXTVLCOPT:XXX` или `#EXTVLCOPT--XXX=YYY`, где:
|
||||
* `XXX` — параметр командной строки VLC Player ([полный список](https://wiki.videolan.org/VLC_command-line_help/));
|
||||
* `YYY` — значения параметра.
|
||||
|
||||
## Дополнительные материалы
|
||||
|
||||
* [Инструкция по формату M3U (SS IPTV)](https://ss-iptv.com/ru/users/documents/m3u)
|
||||
* [Архив телепрограмм (SS IPTV)](https://ss-iptv.com/ru/operators/catchup)
|
||||
* [VLC command-line help](https://wiki.videolan.org/VLC_command-line_help/)
|
||||
* [ISO 639-2 Codes for the Representation of Names of Languages](https://www.loc.gov/standards/iso639-2/php/code_list.php)
|
||||
* [ISO 3166-1 Wikipedia](https://en.wikipedia.org/wiki/ISO_3166-1)
|
||||
* ОКСМ:
|
||||
* [normativ.kontur.ru](https://normativ.kontur.ru/document?moduleId=1&documentId=22668#h1296)
|
||||
* [classifikators.ru](https://classifikators.ru/oksm)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
icon: material/file-code-outline
|
||||
hide: [toc]
|
||||
---
|
||||
|
||||
# :material-file-code-outline: Форматы файлов
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
- [:material-code-brackets: Формат файла `playlists.ini`](playlists.md)
|
||||
|
||||
---
|
||||
Список плейлистов, которые отображаются на сайте и периодически проверяются
|
||||
|
||||
- [:material-code-json: Формат файла `channels.json`](channels.md)
|
||||
|
||||
---
|
||||
Список правил для применения тегов к разным каналам
|
||||
|
||||
- [:material-playlist-play: Формат файлов `*.m3u` (`*.m3u8`)](m3u.md)
|
||||
|
||||
---
|
||||
Плейлист — это вообще что?
|
||||
</div>
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: playlists.ini
|
||||
icon: material/code-brackets
|
||||
tags: ["плейлисты"]
|
||||
---
|
||||
|
||||
# :material-code-brackets: Формат файла `playlists.ini`
|
||||
|
||||
Рассмотрим на примере:
|
||||
|
||||
```ini
|
||||
[code]
|
||||
name = Рабочий автообновляемый IPTV плейлист M3U
|
||||
desc = "В этом IPTV плейлисте есть каналы в высоком качестве"
|
||||
pls = 'https://example.com/pls.m3u'
|
||||
src = 'https://example.com/super-duper-playlist'
|
||||
# комментарий 1
|
||||
; ещё один комментарий
|
||||
```
|
||||
|
||||
Перенос строк невозможен.
|
||||
Комментарии игнорируются.
|
||||
|
||||
Для значений можно (не) использовать 'одинарные' или "двойные" кавычки.
|
||||
Ради единообразия рекомендуется использовать 'одинарные'.
|
||||
|
||||
## `code` { id="code" }
|
||||
|
||||
Код плейлиста в рамках этого конфига (**обязательно**).
|
||||
|
||||
Должен быть коротким и уникальным.
|
||||
|
||||
Подставляется в короткую ссылку, по которой произойдёт переадресация на прямой адрес `pls`.
|
||||
|
||||
!!! note
|
||||
Для удобства ввода с пульта, код рекомендуется задавать числом или короткой строкой без пробелов и др. спецсимволов.
|
||||
Чем короче, тем лучше.
|
||||
|
||||
## `name` { id="name" }
|
||||
|
||||
Название плейлиста (необязательно).
|
||||
|
||||
По умолчанию: `Playlist #<code>`.
|
||||
|
||||
## `desc` { id="desc" }
|
||||
|
||||
Краткое описание из источника или от себя (необязательно).
|
||||
|
||||
По умолчанию: пусто.
|
||||
|
||||
## `pls` { id="pls" }
|
||||
|
||||
Прямая ссылка на m3u/m3u8 плейлист (**обязательно**).
|
||||
|
||||
## `src` { id="src" }
|
||||
|
||||
Ссылка на источник (страницу сайта), откуда был взят плейлист (необязательно).
|
||||
|
||||
По умолчанию: пусто.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
icon: material/file-document
|
||||
hide: [toc]
|
||||
---
|
||||
|
||||
# Общая информация
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
- [:material-cogs: Как работает сервис](../aggregator/overview.md)
|
||||
- [:material-file-eye-outline: Как отбираются плейлисты](../aggregator/selection.md)
|
||||
- [:material-file-refresh-outline: Проверки и статусы](../aggregator/checks.md)
|
||||
- [:fontawesome-solid-list-check: Список плейлистов](../iptvc/site/list.md)
|
||||
- [:material-table-eye: Страница плейлиста](../iptvc/site/details.md)
|
||||
- [:material-television-play: Как подключить плейлист](../iptvc/site/connect.md)
|
||||
- [:material-multimedia: IPTV плееры](players.md)
|
||||
</div>
|
||||
@@ -0,0 +1,294 @@
|
||||
---
|
||||
icon: material/multimedia
|
||||
tags: ["плееры"]
|
||||
---
|
||||
|
||||
# :material-multimedia: IPTV плееры
|
||||
|
||||
Здесь указаны **не все** плееры, существующие на этой планете, и такой цели нет.
|
||||
|
||||
В списке ниже только те плееры, которые широко известны и популярны у зрителей IPTV, а также рекомендуются специализированными сайтами.
|
||||
|
||||
Некоторые из них помечены значком :thumbsup: — значит, он уже зарекомендовал себя как стабильный и удобный, с ним меньше всего хлопот.
|
||||
|
||||
Список для удобства разбит по платформам и ОС.
|
||||
Обращайся к содержанию справа для быстрой навигации.
|
||||
|
||||
!!! info "Здесь не хватает очень много подробностей"
|
||||
Если ты имел дело с каким-то плеером, знаешь как его настроить или какие-то другие детали, я прошу тебя помочь [актуализировать эту страницу](support.md#participate), чтобы через это помочь другим пользователям с выбором и настройкой плеера под свои цели.
|
||||
|
||||
## Кроссплатформенные
|
||||
|
||||
!!! info
|
||||
Эти плееры разрабатываются для множества платформ одновременно и/или существуют в виде веб-приложения.
|
||||
Их можно устанавливать и открывать почти на любом подходящем устройстве.
|
||||
|
||||
!!! warning "Веб-приложения могут не работать со сторонними плейлистами из-за ошибок CORS"
|
||||
Исправить эту ошибку может выдача разрешения на загрузку небезопасного контента в настройках сайта в браузере, но гарантий нет.
|
||||
|
||||
### :thumbsup: VLC Media Player
|
||||
|
||||
* Скачать: <https://www.videolan.org/vlc/>
|
||||
|
||||
Универсальный плеер практически для любого мультимедиа-контента.
|
||||
|
||||
??? image "Главное окно"
|
||||

|
||||
|
||||
??? image "Добавление плейлиста на десктопе"
|
||||
!!! warning "Указание протокола `https://` обязательно!"
|
||||

|
||||

|
||||
|
||||
??? image "Добавление плейлиста на андроиде"
|
||||
!!! warning "Указание протокола `https://` обязательно!"
|
||||

|
||||

|
||||
|
||||
### :thumbsup: IPTVnator
|
||||
|
||||
* Веб-версия: <https://iptvnator.vercel.app>
|
||||
* Скачать: <https://github.com/4gray/iptvnator/releases/latest>
|
||||
|
||||
Простой рабочий плеер, который можно открыть в браузере.
|
||||
|
||||
Поддерживает подгрузку множества плейлистов по ссылкам, субтитры, группировку каналов, избранное.
|
||||
Имеет тёмную и светлую темы.
|
||||
|
||||
Если использовать веб-версию, то настройки сохраняются в браузере.
|
||||
|
||||
??? image "Главное окно"
|
||||

|
||||
|
||||
??? image "Добавление плейлиста"
|
||||
!!! warning "Указание протокола `https://` обязательно!"
|
||||

|
||||

|
||||
|
||||
### IPTV Web Player
|
||||
|
||||
* Веб-версия: <http://iptv.apiweb.uz>
|
||||
|
||||
Простой и удобный веб-плеер.
|
||||
Загрузка плейлиста по ссылкам или из файла, но только одного.
|
||||
|
||||
Подгрузка и отображение телепрограммы (используется https://cdn.epg.one/epg2.xml).
|
||||
|
||||
??? image "Главное окно"
|
||||

|
||||
|
||||
??? image "Добавление плейлиста"
|
||||
!!! success "Указание протокола `https://` необязательно!"
|
||||

|
||||
|
||||
### Kodi
|
||||
|
||||
* Скачать: <https://kodi.tv>
|
||||
* [Простая настройка IPTV на Kodi за 5 минут](https://prodigtv.ru/iptv/software/nastrojka-na-kodi)
|
||||
|
||||
Полноценный медиацентр.
|
||||
Ориентирован на большие экраны и ТВ с пультами.
|
||||
Имеет богатый функционал, который наращивается дополнениями, не выходя из приложения.
|
||||
|
||||
### KMPlayer
|
||||
|
||||
* Скачать: <https://www.kmplayer.com/home>
|
||||
|
||||
### OttPlayer
|
||||
|
||||
* Веб-версия: <http://widget.ottplayer.tv>
|
||||
* Скачать: <https://ottplayer.tv/soft>
|
||||
|
||||
!!! warning "Требует учётную запись сервиса ottplayer.tv"
|
||||
|
||||
### Ott-Play
|
||||
|
||||
* Веб-версия: <https://ottp.eu.org/f/pc/>
|
||||
* Скачать: <https://ottp.eu.org/www/install/>
|
||||
|
||||
!!! warning "Ошибка CORS"
|
||||
Она может не уйти даже если менять [плеер в настройках](https://ottp.eu.org/www/faq/#q4003).
|
||||
|
||||
---
|
||||
|
||||
!!! info "Ниже перечислено ПО, специфичное только для конкретных платформ"
|
||||
|
||||
## Десктопные
|
||||
|
||||
### Windows
|
||||
|
||||
#### :thumbsup: IP-TV Player
|
||||
|
||||
* Скачать: <https://borpas.info/iptvplayer>
|
||||
|
||||
---
|
||||
|
||||
### Linux
|
||||
|
||||
#### :thumbsup: yuki-iptv
|
||||
|
||||
* Скачать: <https://codeberg.org/liya/yuki-iptv/releases/latest>
|
||||
|
||||
Продолжение развития Astroncia IPTV.
|
||||
|
||||
Визуально очень похож на IP-TV Player для Windows.
|
||||
|
||||
Поддерживает плейлисты по ссылкам, сторонние телепрограммы, группировку каналов, изменение плейлистов и многое другое.
|
||||
|
||||
??? image "Главное окно"
|
||||

|
||||
|
||||
??? image "Добавление плейлиста"
|
||||
!!! warning "Указание протокола `https://` обязательно!"
|
||||

|
||||
|
||||
---
|
||||
|
||||
## SmartTV
|
||||
|
||||
### :thumbsup: SS IPTV
|
||||
|
||||
* Сайт: <https://ss-iptv.com/ru/>
|
||||
* Веб-версия: <https://app.ss-iptv.com> (скорее всего, не заработает)
|
||||
* Редактор плейлистов: <https://ss-iptv.com/ru/users/playlist>
|
||||
* Установить: <https://ss-iptv.com/ru/users/documents/installing>
|
||||
|
||||
Плеер, который предустанавливается в ПО некоторых телевизоров и некоторых приставок.
|
||||
|
||||
### Forkplayer
|
||||
|
||||
---
|
||||
|
||||
## Мобильные
|
||||
|
||||
### Кроссплатформенные
|
||||
|
||||
#### GSE SMART IPTV
|
||||
|
||||
---
|
||||
|
||||
### Android
|
||||
|
||||
#### :thumbsup: Televizo
|
||||
|
||||
* Скачать: [play.google.com](https://play.google.com/store/apps/details?id=com.ottplay.ottplay)
|
||||
|
||||
??? image "Главный экран"
|
||||

|
||||

|
||||
|
||||
??? image "Добавление плейлиста"
|
||||
!!! warning "Указание протокола `https://` обязательно!"
|
||||

|
||||

|
||||
|
||||
Из настроек:
|
||||
|
||||

|
||||

|
||||
|
||||
И дальше те же шаги 3-5 на скриншотах выше.
|
||||
|
||||
??? quote "Установка User-Agent"
|
||||
На экране добавления/редактирования плейлиста снять галочку "User-Agent по умолчанию" и ввести необходимый.
|
||||
Например, для [Wink](../aggregator/faq.md#wink).
|
||||
|
||||
#### :thumbsup: M3U
|
||||
|
||||
* Скачать: <https://f-droid.org/ru/packages/com.m3u.androidApp>
|
||||
|
||||
Умеет показывать картинку-в-картинке, отображать группы и сортировать каналы.
|
||||
|
||||
Программу передач нужно [подключать отдельной ссылкой](../aggregator/faq.md#epg), из плейлиста не тянет.
|
||||
|
||||
??? image "Главный экран"
|
||||

|
||||
|
||||
??? image "Добавление плейлиста"
|
||||
!!! warning "Указание протокола `https://` обязательно!"
|
||||

|
||||

|
||||
|
||||
??? image "Установка User-Agent"
|
||||

|
||||

|
||||
|
||||
#### IPTV (Александр Софронов)
|
||||
|
||||
* Скачать: [play.google.com](https://play.google.com/store/apps/details?id=ru.iptvremote.android.iptv)
|
||||
|
||||
#### IPTV# (IPTV Sharp)
|
||||
|
||||
* Скачать: [play.google.com](https://play.google.com/store/apps/details?id=com.iptvsharp.app)
|
||||
|
||||
#### Lazy IPTV
|
||||
|
||||
#### Lazy IPTV Deluxe
|
||||
|
||||
#### Perfect Player
|
||||
|
||||
#### TiviMate
|
||||
|
||||
#### OTT Navigator
|
||||
|
||||
#### IPTV Player Live
|
||||
|
||||
---
|
||||
|
||||
### macOS, iOS, AppleTV
|
||||
|
||||
#### GoodPlayer
|
||||
|
||||
#### ProgTV
|
||||
|
||||
#### microiptv
|
||||
|
||||
#### Xtream IPTV
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/xtream-iptv-tv-player-ip-pro/id1583776992)
|
||||
|
||||
#### Nplayer
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/nplayer/id1116905928)
|
||||
|
||||
#### Nplayer Lite
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/nplayer-lite/id1078835991)
|
||||
|
||||
#### IPTV плеер
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/iptv/id1598794264)
|
||||
|
||||
#### Peers.TV
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/peers-tv/id540754699)
|
||||
|
||||
#### SPB TV Россия
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/spb-tv/id1056140537)
|
||||
|
||||
#### Русское TV
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B5-%D1%82%D0%B2-hd-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD-%D1%82%D0%B2/id594760614)
|
||||
|
||||
#### Tviz
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/%D1%82%D0%B5%D0%BB%D0%B5%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0-tviz-%D1%82%D0%B2-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD/id816291886)
|
||||
|
||||
#### Лайм HD TV
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/%D0%BB%D0%B0%D0%B9%D0%BC-hd-tv-%D1%82%D0%B2-%D0%BA%D0%B8%D0%BD%D0%BE-%D0%B8-%D1%81%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D1%8B/id998832333)
|
||||
|
||||
#### TV+
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/tv-%D0%BF%D0%BB%D1%8E%D1%81-hd-%D1%82%D0%B5%D0%BB%D0%B5%D0%B2%D0%B8%D0%B7%D0%BE%D1%80-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD/id1141924092?l=en)
|
||||
|
||||
#### UniPlayer
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/uniplayer-iptv-ott-solution/id1208562731)
|
||||
|
||||
#### ProgTV
|
||||
|
||||
* Скачать: [apps.apple.com](https://apps.apple.com/ru/app/progtv/id1447796133)
|
||||
|
||||
---
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
icon: material/hand-heart-outline
|
||||
---
|
||||
|
||||
# :material-hand-heart-outline: Поддержка проекта
|
||||
|
||||
Проект держится только на сугубо техническом интересе одного разработчика в свободное от работы время.
|
||||
|
||||
Проект сознательно не монетизируется: это неправильно по отношению к пользователям и правообладателям.
|
||||
|
||||
Ниже перечислены минимально доступные вам способы — от самых простых к более сложным.
|
||||
|
||||
## :simple-telegram: Подписаться в Telegram
|
||||
|
||||
У проекта есть два публичных ресурса для прямой связи с пользователями.
|
||||
Там можно ставить **платные реакции** к постам и/или **дарить голоса** (бусты):
|
||||
|
||||
* канал: [@iptv_aggregator](https://t.me/iptv_aggregator) ([boost](https://t.me/iptv_aggregator?boost)) — в нём новости о проекте (общие объявления и проведённые доработки);
|
||||
* чат: [@iptv_aggregator_chat](../tg/chat.md) ([boost](https://t.me/iptv_aggregator_chat?boost)) — комментарии к каналу, общение по теме проекта и IPTV.
|
||||
|
||||
## :material-wallet: Внести пожертвование
|
||||
|
||||
Вы можете внести прямое денежное **пожертвование** с банковской карты на виртуальный кошелёк ЮMoney:
|
||||
|
||||
!!! yoomoney "[yoomoney.ru/to/41001685237530](https://yoomoney.ru/to/41001685237530)"
|
||||
Разовый платёж, без подписок, на любую сумму.
|
||||
|
||||
Также вы можете оформить подписку на Boosty:
|
||||
|
||||
!!! boosty "[boosty.to/anthonyaxenov](https://boosty.to/anthonyaxenov)"
|
||||
Разовый платёж или платная подписка.
|
||||
|
||||
Пожертвования добровольны.
|
||||
Они не дают права на эксклюзивный доступ к чему-либо и не рассматриваются как способ обогащения.
|
||||
Это лишь попытка компенсировать затраты на содержание проекта.
|
||||
|
||||
На пожертвования [был приобретён](https://t.me/iptv_aggregator/30) домен `m3u.su`, который сейчас используется в качестве основного адреса.
|
||||
|
||||
## :simple-git: Принять участие в разработке { id="participate" }
|
||||
|
||||
Весь исходный код проекта хранится в репозиториях организации: [git.axenov.dev/IPTV](https://git.axenov.dev/IPTV)
|
||||
|
||||
Чтобы принять участие в разработке, необходимо [зарегистрироваться на сайте git.axenov.dev](https://git.axenov.dev/user/sign_up) и **активировать** учётную запись по e-mail.
|
||||
|
||||
!!! info "Это бесплатно, но неактивированные учётки периодически удаляются."
|
||||
|
||||
### :octicons-issue-opened-16: Создать задачу
|
||||
|
||||
Любое ПО неидеально, как и документация к нему.
|
||||
|
||||
Если вы нашли ошибку, опечатку, неожиданное поведение ПО или есть предложение по улучшению — можете создать задачу в соответствующем репозитории организации.
|
||||
|
||||
### :octicons-git-pull-request-16: Прислать изменения
|
||||
|
||||
Вы можете внести исправления в код самостоятельно и прислать pull-request для принятия в основную ветку.
|
||||
|
||||
Это может быть новый функционал, исправления ошибок или опечаток.
|
||||
|
||||
Если есть идеи и желание для расширения функционала проекта, можем обсудить создание нового репозитория с выдачей необходимых прав.
|
||||