{"id":19308639,"url":"https://github.com/anthonyaxenov/iptv","last_synced_at":"2025-04-22T13:32:27.199Z","repository":{"id":110992478,"uuid":"256759622","full_name":"anthonyaxenov/iptv","owner":"anthonyaxenov","description":"Список бесплатных автообновляемых плейлистов для IPTV. Зеркало — https://git.axenov.dev/anthony/iptv","archived":false,"fork":false,"pushed_at":"2025-04-13T03:47:05.000Z","size":539,"stargazers_count":57,"open_issues_count":0,"forks_count":11,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-13T04:33:02.644Z","etag":null,"topics":["flightphp","iptv","iptv-free","iptv-playlist","php","playlists"],"latest_commit_sha":null,"homepage":"https://iptv.axenov.dev","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anthonyaxenov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-18T13:24:21.000Z","updated_at":"2025-04-13T03:47:09.000Z","dependencies_parsed_at":"2024-11-08T12:26:19.489Z","dependency_job_id":"639bcc87-ced5-457c-98ef-97e245f79c17","html_url":"https://github.com/anthonyaxenov/iptv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonyaxenov%2Fiptv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonyaxenov%2Fiptv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonyaxenov%2Fiptv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anthonyaxenov%2Fiptv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anthonyaxenov","download_url":"https://codeload.github.com/anthonyaxenov/iptv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250248797,"owners_count":21399338,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flightphp","iptv","iptv-free","iptv-playlist","php","playlists"],"created_at":"2024-11-10T00:15:46.704Z","updated_at":"2025-04-22T13:32:26.848Z","avatar_url":"https://github.com/anthonyaxenov.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Автообновляемые IPTV-плейлисты\n\n\u003e **Web-версия**: [https://iptv.axenov.dev/](https://iptv.axenov.dev/)  \n\u003e **FAQ**: [https://iptv.axenov.dev/faq](https://iptv.axenov.dev/faq)  \n\u003e **Зеркало репозитория**: https://git.axenov.dev/anthony/iptv\n\nПроект, содержащий в себе инструменты для работы с IPTV-плейлистами:\n\n* список автообновляемых плейлистов, которые найдены в открытых источниках;\n* скрипты для поиска каналов в этом списке, создания своего плейлиста;\n* веб-сервис, предоставляющий короткие ссылки на эти плейлисты и отображающий список каналов.\n\nПлейлисты подбираются преимущественно для РФ и любых стран бывшего СНГ, но этими странами список не ограничивается.\n\nПоддержкой этих плейлистов занимаются сервисы и ресурсы, указанные как источник.\nВопросы работоспособности плейлистов адресуйте тем, кто несёт за них ответственность.\n\nОни бесплатны для использования.\nСписок проверяется и обновляется мной вручную.\nГарантию работоспособности никто не даёт.\n\n## English description\n\n\u003e **Mirrored repo**: https://git.axenov.dev/anthony/iptv\n\nThis repo contains IPTV-playlists free to use with your media-player.\n\nMost of them are in russian or CIS languages but you can find something interesting here for yourself.\n\nAlso there are some handy tools to make your own playlist or find channels you want in playlists listed here.\n\nYou can use this repo according to [LICENSE](LICENSE) conditions.\n\nI'm too lazy to translate and support the whole project in ru and en, sorry, guys.\n\n---\n\n## Документация\n\n- [Как использовать этот список?](#howtouse)\n- [Формат playlists.ini](#iniformat)\n- [API](#api)\n- [Развёртывание проекта](#deploy)\n- [Расширенные возможности](#tools)\n- [Как создать свой собственный плейлист](#howtomake)\n- [Использованный стек](#stack)\n- [Лицензия](#license)\n\n---\n\n\u003ca id=\"howtouse\"\u003e\u003c/a\u003e\n\n## Как использовать этот список?\n\nЧтобы подключить плейлист, нужно в настройках медиаплеера указать ссылку в следующем формате:\n\n```\niptv.axenov.dev/\u003cID\u003e\niptv.axenov.dev?\u003cID\u003e  (устаревший формат)\niptv.axenov.dev/?\u003cID\u003e (устаревший формат)\n```\n\nгде `\u003cID\u003e` - один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.\n\nЛибо провернуть всё то же самое через браузер.\n\n\u003ca id=\"iniformat\"\u003e\u003c/a\u003e\n\n## Формат `playlists.ini`\n\n```ini\n# ID плейлиста в рамках этого конфига (обязательно)\n[1]\n\n# Название плейлиста (необязательно)\nname = 'Рабочий и актуальный IPTV плейлист M3U'\n\n# Краткое описание из источника или от себя (необязательно)\ndesc = 'В этом IPTV плейлисте вы найдете очень много каналов в HD качестве'\n\n# Прямая ссылка на m3u/m3u8 плейлист (обязательно)\npls = 'https://example.com/pls.m3u'\n\n# Ссылка на источник, откуда взят плейлист (необязательно)\nsrc = 'https://example.com/super-duper-playlist'\n\n[2]\n\n# ID другого плейлиста в этом списке, на который\n# произойдёт редирект. Нужен для мягкой смены ID.\nredirect = 1\n```\n\nВ описании любого плейлиста обязательны:\n* ID в квадратных скобках  \n  \u003e Для удобства ввода с пульта, рекомендуется задавать числом или короткой строкой без пробелов и др. спецсимволов.\n* параметр `pls` или `redirect`\n  \u003e Если указаны оба, то `redirect` приоритетен.\n\nПлейлистов с редиректами может быть сколько угодно, но они не должны быть цикличными.\n\n\u003ca id=\"api\"\u003e\u003c/a\u003e\n\n## API\n\nМожно получать состояние плейлистов из этого сборника при помощи метода:\n\n```\nGET https://iptv.axenov.dev/\u003cID\u003e/json\n```\n\nгде `ID` -- один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.\n\nВ случае успеха вернётся JSON следующего содержания:\n\n```json\n{\n    \"id\": \"p1\",\n    \"url\": \"localhost:8080/p1\",\n    \"name\": \"Каналы в SD и HD качестве (smarttvnews.ru)\",\n    \"desc\": \"Рабочий и актуальный IPTV плейлист M3U — на июнь 2022 года\",\n    \"pls\": \"https://smarttvnews.ru/apps/iptvchannels.m3u\",\n    \"src\": \"https://smarttvnews.ru/rabochiy-i-aktualnyiy-iptv-pleylist-m3u-kanalyi-v-sd-i-hd-kachestve/\",\n    \"status\": \"online\",\n    \"encoding\": {\n        \"name\": \"UTF-8\",\n        \"alert\": false\n    },\n    \"channels\": [\n        \"Channel1\",\n        \"Channel2\",\n        \"ChannelX\"\n    ],\n    \"count\": 3\n}\n```\n\nгде:\n\n* `id` -- идентификатор плейлиста\n* `name` -- название плейлиста\n* `url` -- короткая ссылка, которую можно использовать для добавления плейлиста в плеер\n* `desc` -- краткое описание\n* `pls` -- прямая ссылка на m3u/m3u8 плейлист\n* `src` -- ссылка на источник, откуда взят плейлист\n* `status` -- статус плейлиста (`\"online\"|\"timeout\"|\"offline\"|\"error\"`)\n* `encoding` -- данные о кодировке файла плейлиста\n    * `name` -- название кодировки (`\"UTF-8\"|\"Windows-1251\"`)\n    * `alert` -- признак отличия кодировки от `UTF-8`, названия каналов сконвертированы в `UTF-8`, могут быть ошибки\n    в отображении\n* `channels` -- массив названий каналов\n* `count` -- количество каналов \u003e= 0\n\n\u003e Название кодировки `encoding.name` может определяться неточно!\n\nВ случае ошибки вернётся JSON в следующем формате:\n\n```json\n{\n    \"id\": \"p1\",\n    \"url\": \"localhost:8080/p1\",\n    \"name\": \"Каналы в SD и HD качестве (smarttvnews.ru)\",\n    \"desc\": \"Рабочий и актуальный IPTV плейлист M3U — на июнь 2022 года\",\n    \"pls\": \"https://smarttvnews.ru/apps/iptvchannels.m3u\",\n    \"src\": \"https://smarttvnews.ru/rabochiy-i-aktualnyiy-iptv-pleylist-m3u-kanalyi-v-sd-i-hd-kachestve/\",\n    \"status\": \"offline\",\n    \"error\": {\n        \"code\": 22,\n        \"message\": \"The requested URL returned error: 404 Not Found\"\n    }\n}\n```\n\nгде:\n\n* `id` -- идентификатор плейлиста\n* `name` -- название плейлиста\n* `url` -- короткая ссылка, которую можно использовать для добавления плейлиста в плеер\n* `desc` -- краткое описание\n* `pls` -- прямая ссылка на m3u/m3u8 плейлист\n* `src` -- ссылка на источник, откуда взят плейлист\n* `status` -- статус плейлиста (`\"online\"|\"timeout\"|\"offline\"|\"error\"`)\n* `error` -- данные об ошибке при проверке плейлиста\n    * `code` -- [код ошибки curl](https://curl.se/libcurl/c/libcurl-errors.html)\n    * `message` -- текст ошибки curl\n\n\u003ca id=\"deploy\"\u003e\u003c/a\u003e\n\n## Развёртывание проекта\n\nЛокально достаточно выполнить `./iptv init \u0026\u0026 ./iptv open`.\n\nНа сервере опционально можно настроить реверс-прокси до контейнера, например, чтобы настроить доступ по доменному\nимени, изменить порт, подключить SSL-сертификаты или др.\n\nЕсли на сервере, на котором запускаются контейнеры, стоит apache2, то, чтобы использовать его как реверс-прокси, нужно:\n\n```\n$ sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests\n$ sudo nano /etc/apache2/sites-available/iptv.conf\n```\n```apacheconf\n# example.com заменить на свой адрес\n\n\u003cVirtualHost example.com:80\u003e\n    ServerName example.com\n    # обязательно без SSL:\n    ProxyPreserveHost On\n    ProxyPass / http://localhost:8080/\n    ProxyPassReverse / http://localhost:8080/\n    # обязательно для SSL:\n    # RewriteEngine on\n    # RewriteCond %{SERVER_NAME} =example.com\n    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]\n\u003c/VirtualHost\u003e\n\n# обязательно для SSL:\n#\u003cIfModule mod_ssl.c\u003e\n#\u003cVirtualHost example.com:443\u003e\n#    ServerName example.com\n#    ProxyPreserveHost On\n#    ProxyPass / http://localhost:8080/\n#    ProxyPassReverse / http://localhost:8080/\n#    сертификаты можно получить через certbot\n#    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem\n#    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem\n#    Include /etc/letsencrypt/options-ssl-apache.conf\n#\u003c/VirtualHost\u003e\n#\u003c/IfModule\u003e\n\n# Ctrl+O\n# Enter\n# Ctrl+X\n```\n```shell\n$ sudo a2ensite iptv\n$ # для подгрузки включенных модулей выполнить именно restart, а не reload\n$ sudo systemctl restart apache2\n```\n\n\u003ca id=\"tools\"\u003e\u003c/a\u003e\n## Расширенные возможности\n\n### Собственный код html/css/js \n\nВ проекте есть директория `src/views/custom`.\nТам можно размещать собственный код, который будет вставляться на каждой странице.\n\nДля этого, в первую очередь, нужно выполнить:\n\n```\ncp src/views/custom/custom.twig.example src/views/custom/custom.twig\n```\n\nМежду тегами `{% block ... %} сюда {% endblock %}` следует вставить желаемый код или текст.\nМожно создавать новые twig-файлы рядом и подключать их внутри `custom.twig`.\nGit будет их игнорировать, хотя можно убрать директорию из `.gitignore` и добавлять эти файлы репозиторий.\n\nВ общем случае, это можно выполнять на том сервере, на коем установлен и работает веб-сервис.\n\nПосле всех правок следует очистить кеш twig (см. далее).\n\n### Очистка кеша twig\n\nЕсли в файле `./src/.env` параметр `TWIG_CACHE=1`, то макеты страниц компилируются однажды и потом переиспользуются.\nИзменённые макеты не будут перекомпилироваться пока не будет очищен кеш прежних.\n\nДля этого следует выполнить:\n\n```\ncd src \u0026\u0026 composer clear-views\n```\n\n### Скачать все плейлисты\n\nКоманда: `./tools/download-all.sh`\n\nСкачивает все плейлисты из [`playlists.ini`](playlists.ini) в локальную директорию `./tools/downloaded/`.\n\n### Проверить каналы плейлиста\n\nКоманда: `./tools/check-pls.sh`\n\nПроверяет каждый канал в плейлисте на доступность и выводит результат проверки.\n\nПоддерживаются `*.m3u` и `*.m3u8`; как локальные файлы, так по прямым ссылкам.\n\nКоды ошибок доступны [здесь](https://everything.curl.dev/usingcurl/returns).\n\n### Поиск каналов в одном плейлисте\n\nКоманда: `./tools/find-in-pls.sh`\n\nНаходит каналы по заданному регулярному выражению в одном указанном плейлисте.\n\nПоддерживаются `*.m3u` и `*.m3u8`; как локальные файлы, так по прямым ссылкам.\n\n### Поиск каналов во всех плейлистах\n\nКоманда: `./tools/find-in-all.sh`\n\nНаходит каналы по заданному регулярному выражению во всех плейлистах, скачанных через `download-all.sh`.\n\n### Создать плейлист из нужных каналов\n\nКоманда: `./tools/make-pls.sh`\n\nНаходит каналы по заданному регулярному выражению во всех плейлистах, скачанных через `download-all.sh`.\n\nОтличается от `find-in-all.sh` тем, что тот выводит результат в человекочитаемом формате, а этот -- в готовом m3u\nформате для сохранения в файл.\n\nДля сохранения в файл следует добавить `\u003e myfile.m3u` или `\u003e\u003e myfile.m3u` в конец команды.\n\n\u003ca id=\"howtomake\"\u003e\u003c/a\u003e\n## Как создать свой собственный плейлист?\n\n1. Скачать все плейлисты, указанные в [`playlists.ini`](playlists.ini):\n   ```\n   $ ./tools/download-all.sh\n   ```\n2. Вытащить из них нужные каналы и сохранить в отдельный файл:\n   ```\n   $ ./tools/make-pls.sh \"(fox|disney)\" \u003e my.m3u8\n   ```\n   Так в плейлисте `./my.m3u8` окажутся все каналы из скачанных плейлистов, в названиях которых встретились `fox`\n   или `disney`.\n3. Проверить доступность каналов в полученном плейлисте:\n   ```\n   $ ./tools/check-pls.sh my.m3u8\n   ```\n   \u003e Результат `ОК` не означает, что канал действительно работает и отдаёт видео/аудио потоки.  \n   \u003e Результат `ERROR` с любыми кодами ошибок гарантированно означает, что канал не работает.\n4. Вручную: удалить нерабочие, мусорные и продублировавшиеся (по ссылкам) каналы.\n5. Вручную: добавить плейлист в IPTV-плеер и перепроверить результат.\n\n\u003ca id=\"stack\"\u003e\u003c/a\u003e\n\n## Использованный стек\n\n* [docker compose](https://docs.docker.com/compose/)\n* [php8.1-fpm](https://www.php.net/releases/8.1/en.php)\n* [FlightPHP](https://flightphp.com/learn)\n* [Bootstrap 5](https://getbootstrap.com/docs/5.0/getting-started/introduction/)\n* [nginx](https://nginx.org/ru/)\n* bash\n\n\u003ca id=\"license\"\u003e\u003c/a\u003e\n\n## Лицензия\n\n[The MIT License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanthonyaxenov%2Fiptv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanthonyaxenov%2Fiptv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanthonyaxenov%2Fiptv/lists"}