Initial commit

This commit is contained in:
2025-06-02 00:13:27 +08:00
commit 3a2eca9e15
206 changed files with 9726 additions and 0 deletions

112
src/formats/channels.md Normal file
View File

@@ -0,0 +1,112 @@
---
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-совместимыми.
Каналы сопоставляются в нижнем регистре.
<a id="warnings"></a>
## Рекомендации и предостережения
1. Если хочешь написать новое правило, будь осторожен с регулярками.
Старайся не охватывать несколько каналов сразу.
Если канал попадёт в несколько регулярок, то его **теги могут оказаться неожиданными** и найти проблему может быть сложно.
2. Указывай внутри `{}` только `tags` и один из параметров `tvg-id`, `tvg-name` или `title`.
Множество параметров на точность не влияет, зато будет проще уместить всё правило в одну строку и grep-ать файл.
3. Не забывай, что название на кириллице не всегда означает, что это российский канал или вещание на русском языке.
4. Разные каналы могут быть названы одинаково или похоже.
Например, `Первый канал`, `Первый Тульский`, `Первый городской`.
5. Один канал может быть назван по-разному.
Например, `Ю` или `Ю!`, `Россия 1 +5` или `Россия-1`.
6. Важно учитывать холдинги.
Например, российские Матч, ТНТ и НТВ имеют множество разных каналов, и тупо искать `^нтв$` -- тупо.
7. У всех каналов есть `title`.
Не все каналы имеют `tvg-id`.
Некоторые каналы имеют `tvg-name`.
Все три параметра могут оказаться на кириллице.
<a 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)

24
src/formats/index.md Normal file
View File

@@ -0,0 +1,24 @@
---
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>

148
src/formats/m3u.md Normal file
View File

@@ -0,0 +1,148 @@
---
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
```
<a id="EXTM3U"></a>
### Директива `#EXTM3U`
Заголовок файла (обязателен).
<a id="url-tvg"></a>
#### Атрибут `url-tvg` (он же `x-tvg-url`)
Ссылка программу передач в формате `*.xml` или `*.xml.gz`.
<a id="catchup"></a>
#### Атрибуты `catchup*`
Читай здесь: [Архив телепрограмм (SS IPTV)](https://ss-iptv.com/ru/operators/catchup)
<a id="EXTGRP"></a>
### Директива `#EXTGRP`
Название группы, к которой относится контент (звуковая дорожка или канал).
Указывается в формате `#EXTGRP:XXX`, где: `XXX` -- название группы.
<a id="EXTINF"></a>
### Директива `#EXTINF`
Описывает контент (звуковую дорожку или канал).
Указывается в формате `#EXTINF:XXX YYY,ZZZ`, где:
* `XXX` -- длительность в секундах (обязательно, но может быть `-1` или `0`);
* `YYY` -- атрибуты (см. ниже);
* `ZZZ` -- название контента;
<a id="tvg-shift"></a>
#### Атрибут `tvg-shift`
ещение телепрограммы в часах относительно указанного в программе.
<a id="tvg-id"></a>
<a id="tvg-name"></a>
#### Атрибуты `tvg-id` и `tvg-name`
Идентификатор телепрограммы канала.
По нему телепрограмма привязывается к трансляции с учётом смещения времени.
<a id="tvg-logo"></a>
#### Атрибут `tvg-logo`
Ссылка на логотип канала.
<a id="tvg-country"></a>
#### Атрибут `tvg-country`
Код Alpha-2 страны вещания согласно ISO 3166-1 или ОКСМ.
<a id="tvg-language"></a>
#### Атрибут `tvg-language`
Название языка телепередачи согласно ISO 639-2.
<a id="group-title"></a>
#### Атрибут `group-title`
Название группы.
По функционалу идентичен директиве `#EXTGRP`.
<a id="user-agent"></a>
#### Атрибут `user-agent`
Значение заголовка `User-Agent` для обращения к контенту по http.
<a id="audio-track"></a>
#### Атрибут `audio-track`
Языковой код (ISO 639-2) аудио дорожки канала, например: "eng,rus".
Допускается указание нескольких аудио дорожек через запятую: "rus,ukr,eng".
Дорожкой по умолчанию устанавливается первая указанная в списке.
<a id="aspect-ratio"></a>
#### Атрибут `aspect-ratio`
Определяет пропорции экрана (может быть недоступно для некоторых моделей телевизоров).
Допустимые значения: 16:9, 3:2, 4:3, 1,85:1, 2,39:1 (наиболее распространенное значение для фильмов)
<a id="EXTVLCOPT"></a>
### Директива `#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)

59
src/formats/playlists.md Normal file
View File

@@ -0,0 +1,59 @@
---
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`
Код плейлиста в рамках этого конфига (**обязательно**).
Должен быть коротким и уникальным.
Подставляется в короткую ссылку, по которой произойдёт переадресация на прямой адрес `pls`.
!!! note
Для удобства ввода с пульта, код рекомендуется задавать числом или короткой строкой без пробелов и др. спецсимволов.
Чем короче, тем лучше.
## `name`
Название плейлиста (необязательно).
По умолчанию: `Playlist #<code>`.
## `desc`
Краткое описание из источника или от себя (необязательно).
По умолчанию: пусто.
## `pls`
Прямая ссылка на m3u/m3u8 плейлист (**обязательно**).
## `src`
Ссылка на источник (страницу сайта), откуда был взят плейлист (необязательно).
По умолчанию: пусто.