From 9c8a7a82ed6082c0f4e72e541a773af1c148be65 Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 18 Jan 2021 19:41:47 +0300 Subject: [PATCH 01/19] Update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 264 ++++++++++++++++------------------------ 1 file changed, 108 insertions(+), 156 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 817be6d85..bf900e3c6 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,52 +1,120 @@ # Contributing Guide -If you want to help the project you can do this in several ways. Here are some options: +**Do you want to report a channel that is not on the playlist?** + +Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a request for only one channel, otherwise it will be closed immediately). + +**Do you have an idea how to improve the project?** + +Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=discussion&template=feature-request.md&title=Propose%3A+xxx) with a detailed description of your idea. + +**Would you like to add a new channel to playlist?** + +- make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this +- check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this +- find out the full name of the channel and from which country it is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find the corresponding country code in [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) table +- open the `channels/` folder and find a file with the same name as the country code +- at the very end of this file add a link to the channel with a description +- commit all changes +- send a pull request + +In case you were unable to determine which country the channel belongs to, you can put a link to it in the `channels/unsorted.m3u`. + +**Do you want to sort the channels from "channels/unsorted.m3u"?** + +- find out the full name of the channel and from which country it is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- update the channel name if necessary +- find the corresponding country code in [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) table +- open the `channels/` folder and find a file with the same name as the country code +- at the very end of this file add a link to the channel with a description +- commit all changes +- send a pull request + +**Did you find a mistake in README.md?** + +- open `.readme/template.md` +- make any necessary changes to the file +- commit all changes +- send a pull request + +**Did you find a mistake in this guide?** + +- open `.github/CONTRIBUTING.md` +- make any necessary changes to the file +- commit all changes +- send a pull request + +**Would you like us to remove the link to the channel you own the rights to?** + +- publish somethere DMCA notice +- create an issue using this [link](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=DMCA&template=remove-channel.md&title=Remove%3A+xxx) and add a link to the DMCA notice in it + +## Project Structure + +- `.github/` + - `ISSUE_TEMPLATE/` + - `broken-stream.md`: issue template for reporting a broken stream. + - `channel-request.md`: template for channel request. + - `feature-request.md`: template for feature request. + - `remove-channel.md`: template for channel deletion request. + - `workflows/` + - `automerge.yml`: contain action that automatically merges all the changes created by other workflows. + - `format.yml`: contain actions that automatically sorts channels and removes duplicates from each playlist. + - `update.yml`: contain actions that automatically generates all additional playlists and updates the `README.md` file. + - `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned. + - `CONTRIBUTING.md`: file you are currently reading. +- `.readme/` + - `_categories.md`: automatically generated list of all categories and their corresponding playlists. + - `_countries.md`: automatically generated list of all countries and their corresponding playlists. + - `_languages.md`: automatically generated list of all languages and their corresponding playlists. + - `config.json`: config for the `markdown-include` package, which is used to compile everything into one `README.md` file. + - `preview.png`: image displayed in the `README.md`. + - `template.md`: template for `README.md`. +- `channels/` + - `ad.m3u`: country specific playlist. + - ... + - `int.m3u`: playlist for channels not belonging to any one particular country. These are usually channels that broadcast exclusively on the internet. + - ... + - `unsorted.m3u`: playlist with channels not yet sorted. +- `scripts/` + - `format.js`: used within GitHub Action to sort channels and remove duplicates from each playlist. + - `generate.js`: used within GitHub Action to generate all additional playlists. + - `helper.js`: contains functions that are used in other scripts. + - `test.js`: allows you to automatically test all channels in a playlist. + - `update-readme.js`: used within GitHub Action to update the `README.md` file. +- `index.m3u`: main playlist that contains links to all playlists in the `channels/` folder. +- `README.md`: project description generated from the contents of the `.readme/` folder. + +## Channel Description Scheme -- [Add channel](#add-channel) -- [Add EPG source](#add-epg-source) -- [Sort channels by category](#sort-channels-by-category) -- [Sort channels by language](#sort-channels-by-language) -- [Sort channels by country](#sort-channels-by-country) -- [Remove broken broadcasts](#remove-broken-broadcasts) - -## Add channel - -To add a channel to one of the playlists, you first need to make sure that the channel broadcast is working stably. Otherwise, we just have to delete the channel you just added. - -To do this, start the broadcast in one of the players (preferably a VLC player) and keep it on for at least a minute. The fact is that some broadcasts are configured to automatically turn off after 10-15 seconds or sometimes after a couple of minutes. - -You should also make sure that this is a live broadcast and not a looped video (this also happens). The easiest way is to start the broadcast several times in a row after a short period of time and compare the beginning. - -If everything is fine, then you can proceed to add the channel to the playlist. - -If you know exactly in which country this channel is broadcast, then simply select the appropriate playlist from the `channels/` folder and add the channel to it. - -If you are not sure which playlist to add this channel to, you can add it to the `channels/unsorted.m3u` file. It was created specifically for such cases. - -Further on the format of links in the playlist. For the broadcast to work in the playlist, you need to add at least minimal information about the channel, like so: - -```xml -#EXTINF:-1,Example TV -http://example.com/stream.m3u8 +``` +#EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-language="PRIMARY_LANGUAGE;SECONDARY_LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] +STREAM_URL ``` -But of course, the more channel information you add, the better. Here's an example of what a full version of a link in a playlist might look like: +| Attribute | Description | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `EPG_ID` | Channel ID that is used to load EPG. Must match `id` from the EPG file specified in the playlist header. (optional) | +| `EPG_NAME` | Channel name that is also sometimes used to load EPG. Must match `` from the EPG file specified in the playlist header. (optional) | +| `PRIMARY_LANGUAGE` | Channel language. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). (optional) | +| `SECONDARY_LANGUAGE` | If the channel is broadcast in several languages. (optional) | +| `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. (optional) | +| `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | +| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | +| `TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | +| `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | +| `RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | +| `STATUS` | Specified if the broadcast for some reason is interrupted or does not work in a particular application. May contain any characters except round and square brackets. (optional) | +| `STREAM_URL` | Channel broadcast URL. | + +Example: ```xml -#EXTINF:-1 tvg-id="exampletv.us" tvg-name="Example TV" tvg-language="English" tvg-logo="http://example.com/channel-logo.png" group-title="News",Example TV -http://example.com/stream.m3u8 +#EXTINF:-1 tvg-id="example.ua" tvg-name="Example TV" tvg-language="Ukrainian;Russian" tvg-logo="https://i.imgur.com/bu12f89.png" group-title="Kids",Example TV +3 (Пример ТВ) (720p) [not 24/7] +https://example.com/playlist.m3u8 ``` -More details about each attribute: - -| Attribute | Description -| ------------ | --- -| tvg-id | Channel ID that is used to load EPG. Must match `id` from the EPG file. (optional) -| tvg-name | Channel name that is also sometimes used to load EPG. Must match `display-name` from the EPG file. (optional) -| tvg-language | Channel language. If the channel is broadcast in several languages, you can specify other languages via semicolon, like so: `tvg-language="English;Chinese"`. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). (optional) -| tvg-logo | The logo of the channel that will be displayed in the player if it supports it (optional) -| group-title | The category to which the channel belongs. These categories are also displayed in some players, and grouped playlists are also generated based on them. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category) (optional) - Also, if necessary, you can specify custom HTTP User-Agent or Referrer via `#EXTVLCOPT` tag: ```xml @@ -55,119 +123,3 @@ Also, if necessary, you can specify custom HTTP User-Agent or Referrer via `#EXT #EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) http://example.com/stream.m3u8 ``` - -## Add EPG source - -To add a new source of EPG (Electronic Program Guide), you must add the `x-tvg-url` attribute to the beginning of the corresponding playlist, like this: - -```xml -#EXTM3U x-tvg-url="http://example.com/epg.xml.gz" -``` - -The next step is to copy the corresponding `tvg-id` and `tvg-name` from EPG into the description of the channels. To do this, we need to open the EPG file in a browser or any text editor, find the list of channels. Usually it looks like this: - -```xml - - - CNN - - - NBC - - ... - -``` - -Copy `id` and `display-name` from it and paste it to the channel description, like this: - -```xml -#EXTINF:-1 tvg-id="cnn" tvg-name="CNN",CNN -http://example.com/cnn.m3u8 -``` - -And if you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. In some cases, it may also be necessary to manually specify the source of EPG in the player itself. - -## Sort channels by category - -To help sort channels by category, you need to add the corresponding category in the description of the channel, like this: - -```xml -#EXTINF:-1 group-title="News",CNN -http://example.com/cnn.m3u8 -``` - -For convenience, `https://iptv-org.github.io/iptv/categories/other.m3u` contains all the channels for which a category has not yet been specified. But be careful, changes can only be made in the playlists located in the `channels/` folder, since the other playlists are automatically generated. - -A complete list of supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). - -## Sort channels by language - -To sort the channel by language, you only need to specify the appropriate language in `tvg-language` attribute in the channel description. For example: - -```xml -#EXTINF:-1 tvg-language="Arabic",Abu Dhabi Drama -http://example.com/ad-drama.m3u8 -``` - -And at the next update the channel will automatically get to the necessary playlist, in this case it is `languages/ara.m3u`. - -Importantly, the name of the language must comply with [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500) standart otherwise it will simply be ignored during the playlist update. - -If a channel is broadcast in several languages at once, you can specify them all through a semicolon, like this: - -```xml -#EXTINF:-1 tvg-language="English;Chinese",CCTV -http://example.com/cctv.m3u8 -``` - -In case you do not know exactly which language the given channel is broadcast in, you can leave the field `tvg-language` empty. In this case, the channel will be automatically saved in `languages/undefined.m3u` file and someone from the community will be able to specify the correct language later. - -## Sort channels by country - -You can help sorting channels by country by moving the link to the channel with the entire description from one playlist in the `channels/` folder to another. Be careful, any changes outside the `channels/` folder will not be accepted, since the rest of the playlists are generated automatically. - -To determine which country the channel belongs to you can search for it on the [LyngSat](https://www.lyngsat.com/search.html). This site contains a short description for most satellite TV channels, but in this case we are only interested in the country name written under the channel logo, as here: https://www.lyngsat.com/radiochannels/us/CNN-USA.html - -Also you can try searching for a channel on [Wikipedia](https://www.wikipedia.org/). Usually channels have a separate raw in the description indicating the country. You can see what it looks like on this page - https://en.wikipedia.org/wiki/CNN - -It also happens that a channel belongs to more than one country. In this case, it should be saved to all relevant playlists. - -However, there are situations when the channel is literally not assigned to any country (for example, DJing or Red Bull TV). In this case, you can simply move the link to a special international playlist - `channels/int.m3u`. - -## Remove broken broadcasts - -To make sure that the broadcast works you need to run it in two main applications: VLC player (https://www.videolan.org/) and Kodi (https://kodi.tv/). After starting, do not forget to wait at least a minute, as some broadcasts are started with a delay due to the location of the source. - -If it turns out that the broadcast still does not start, this means that it can be safely deleted from the playlist. At the same time, you should delete not only the link to the channel but also the description for it. - -It would also be nice if you indicated in the description of the PR the reason for the removal of the channel, so that other members of the community could also double-check the channel for their part. - -It is also possible to automatically find broken broadcasts. To do this, you first need to install [Node.js](https://nodejs.org/en/) and [ffmpeg](https://www.ffmpeg.org) on your computer. - -After that copy this repository to your computer, open it in the console and install all the dependencies from it by running this command: - -```sh -npm install -``` - -And as soon as everything is installed, you can run tests, like this: - -```sh -npm test -``` - -And be prepared test may take a long time. - -If you want to test the playlist of a particular country, you can specify the [ISO 3166 code](https://en.wikipedia.org/wiki/ISO_3166) of the country as an argument when running the test. - -```sh -npm test --country=uk -``` - -Another option to exclude specific playlists from tests: - -```sh -npm test --exclude=cn,int -``` - -After the test is over all broken links will be saved to the file `error.log`. From 27a68b389ea39189a54e8965104ba030ffe16b24 Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 18 Jan 2021 20:24:34 +0300 Subject: [PATCH 02/19] Update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index bf900e3c6..7a5a67570 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,13 +1,23 @@ # Contributing Guide -**Do you want to report a channel that is not on the playlist?** - -Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a request for only one channel, otherwise it will be closed immediately). - **Do you have an idea how to improve the project?** Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=discussion&template=feature-request.md&title=Propose%3A+xxx) with a detailed description of your idea. +**Do you want to report a broadcast that is not working?** + +Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=broken-stream.md&title=Fix%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a report for only one channel, otherwise it will be closed immediately). + +**Do you want to replace the broken stream link?** + +- make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. +- check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. +- find the file that contains the original link. You can use a [GitHub Search](https://github.com/search/advanced?q=CNN+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this (**IMPORTANT:** the file must be in the `channels/` folder). + +**Do you want to report a channel that is not on the playlist?** + +Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a request for only one channel, otherwise it will be closed immediately). + **Would you like to add a new channel to playlist?** - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this From fa30383424def73bc55b15aaa2b725a4854b01cd Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 18 Jan 2021 20:25:55 +0300 Subject: [PATCH 03/19] Update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 7a5a67570..caad1e584 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -13,6 +13,9 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. - find the file that contains the original link. You can use a [GitHub Search](https://github.com/search/advanced?q=CNN+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this (**IMPORTANT:** the file must be in the `channels/` folder). +- replace the link +- commit all changes +- send a pull request **Do you want to report a channel that is not on the playlist?** From 478a9506dbc0de981d81a077520b4bb96f9fed57 Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 18 Jan 2021 20:27:14 +0300 Subject: [PATCH 04/19] Update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index caad1e584..1edc15059 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -12,7 +12,7 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. -- find the file that contains the original link. You can use a [GitHub Search](https://github.com/search/advanced?q=CNN+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this (**IMPORTANT:** the file must be in the `channels/` folder). +- find the file that contains the original link. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this (**IMPORTANT:** the file must be in the `channels/` folder). - replace the link - commit all changes - send a pull request From d43ce5f6f7fef382e4be3a7a6098351879f12e7f Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 18 Jan 2021 20:32:31 +0300 Subject: [PATCH 05/19] Update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 1edc15059..65c746fa8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -102,7 +102,7 @@ In case you were unable to determine which country the channel belongs to, you c ## Channel Description Scheme ``` -#EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-language="PRIMARY_LANGUAGE;SECONDARY_LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] +#EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-language="PRIMARY_LANGUAGE;SECONDARY_LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME STREAM_TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] STREAM_URL ``` @@ -115,10 +115,10 @@ STREAM_URL | `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. (optional) | | `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | | `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | -| `TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | +| `STREAM_TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | | `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | -| `RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | -| `STATUS` | Specified if the broadcast for some reason is interrupted or does not work in a particular application. May contain any characters except round and square brackets. (optional) | +| `STREAM_RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | +| `STREAM_STATUS` | Specified if the broadcast for some reason is interrupted or does not work in a particular application. May contain any characters except round and square brackets. (optional) | | `STREAM_URL` | Channel broadcast URL. | Example: From 84de88aa0d8126ee6e78ea83869bc2a2d3b77edf Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 21 Jan 2021 04:09:42 +0300 Subject: [PATCH 06/19] patch-1 --- .github/CONTRIBUTING.md | 95 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 6 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 65c746fa8..52893b46a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -8,12 +8,15 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=broken-stream.md&title=Fix%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a report for only one channel, otherwise it will be closed immediately). -**Do you want to replace the broken stream link?** +**Do you want to replace the broken stream?** - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. -- find the file that contains the original link. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this (**IMPORTANT:** the file must be in the `channels/` folder). -- replace the link +- find out from which country channel is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 +- open the `/channels` folder and find the file that has the same code in its name and open it +- find the broken link in this file +- replace it with working one - commit all changes - send a pull request @@ -26,7 +29,7 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this - find out the full name of the channel and from which country it is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) -- find the corresponding country code in [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) table +- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 - open the `channels/` folder and find a file with the same name as the country code - at the very end of this file add a link to the channel with a description - commit all changes @@ -38,12 +41,88 @@ In case you were unable to determine which country the channel belongs to, you c - find out the full name of the channel and from which country it is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - update the channel name if necessary -- find the corresponding country code in [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) table +- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 - open the `channels/` folder and find a file with the same name as the country code - at the very end of this file add a link to the channel with a description - commit all changes - send a pull request +**Do you want to change the channel category?** + +- find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this. +- open the file +- find the channel description +- specify the appropriate category in the `group-title` attribute. A complete list of supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). +- commit all changes +- send a pull request + +**Do you want to change the channel language?** + +- find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this. +- open the file +- find the channel description +- specify the appropriate language in the `tvg-language` attribute. The name of the language must comply with [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500) standart. +- commit all changes +- send a pull request + +If a channel is broadcast in several languages at once, you can specify them all through a semicolon, like this: + +```xml +#EXTINF:-1 tvg-language="English;Chinese",CCTV +http://example.com/cctv.m3u8 +``` + +**Do you want to add a new EPG (Electronic Program Guide) source?** + +- check which country the EPG is intended for +- check that this source is not already listed in the playlist. To do this, find the country in this [table](https://github.com/iptv-org/iptv#playlists-by-country) and see if there is any other link. If not, continue. +- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 +- open the `channels/` folder and find a file with the same name as the country code +- in the header of the playlist, next to `#EXTM3U`, add an `x-tvg-url` attribute with a link to the EPG source. + +The result should look something like this: + +```xml +#EXTM3U x-tvg-url="https://example.com/epg.xml.gz" +``` + +**Do you want to activate the program guide for the channel?** + +- find out which country the channel belongs to. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 +- open the `/channels` folder and find the file that has the same code in its name and open it +- check that the EPG source is specified in the file. To do this, just look at the header of the playlist. If the `x-tvg-url` attribute is present and has a link in it, everything is fine. +- open the file specified in the `x-tvg-url` +- find the channel list in the file. Usually it looks like this: + + ```xml + + + CNN + + + NBC + + ... + + ``` + +- find the channel you are interested in +- copy it `id` and paste it to the `tvg-id` attribute of the channel description inside the playlist +- copy the `` tag value and paste it into the `tvg-name` attribute of the channel description. The result should look something like this: + +```xml +#EXTINF:-1 tvg-id="cnn" tvg-name="CNN",CNN +http://example.com/cnn.m3u8 +``` + +- commit all changes +- send a pull request + +If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. + +In some cases, it may also be necessary to manually specify the source of EPG in the player itself. + **Did you find a mistake in README.md?** - open `.readme/template.md` @@ -60,7 +139,7 @@ In case you were unable to determine which country the channel belongs to, you c **Would you like us to remove the link to the channel you own the rights to?** -- publish somethere DMCA notice +- publish your DMCA notice somewhere - create an issue using this [link](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=DMCA&template=remove-channel.md&title=Remove%3A+xxx) and add a link to the DMCA notice in it ## Project Structure @@ -101,6 +180,10 @@ In case you were unable to determine which country the channel belongs to, you c ## Channel Description Scheme +Channels should be added to playlists using the following template. + +Explanation of attributes: + ``` #EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-language="PRIMARY_LANGUAGE;SECONDARY_LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME STREAM_TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] STREAM_URL From 315e8fbf0820789cb608ce7aa61246ddd43efff0 Mon Sep 17 00:00:00 2001 From: freearhey Date: Fri, 22 Jan 2021 16:55:33 +0300 Subject: [PATCH 07/19] patch-2 --- .github/CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 52893b46a..6bba68c87 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -12,7 +12,7 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. -- find out from which country channel is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find out from which the country channel is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 - open the `/channels` folder and find the file that has the same code in its name and open it - find the broken link in this file @@ -80,7 +80,7 @@ http://example.com/cctv.m3u8 - open the `channels/` folder and find a file with the same name as the country code - in the header of the playlist, next to `#EXTM3U`, add an `x-tvg-url` attribute with a link to the EPG source. -The result should look something like this: +The result should be something like this: ```xml #EXTM3U x-tvg-url="https://example.com/epg.xml.gz" @@ -109,7 +109,7 @@ The result should look something like this: - find the channel you are interested in - copy it `id` and paste it to the `tvg-id` attribute of the channel description inside the playlist -- copy the `` tag value and paste it into the `tvg-name` attribute of the channel description. The result should look something like this: +- copy the `` tag value and paste it into the `tvg-name` attribute of the channel description. The result should be something like this: ```xml #EXTINF:-1 tvg-id="cnn" tvg-name="CNN",CNN From 37f53beb74777a177548218e8515c3125152190a Mon Sep 17 00:00:00 2001 From: freearhey Date: Sun, 24 Jan 2021 17:00:17 +0300 Subject: [PATCH 08/19] patch-3 --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6bba68c87..9d3b91dac 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -12,7 +12,7 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. -- find out from which the country channel is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find out from which country the channel is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 - open the `/channels` folder and find the file that has the same code in its name and open it - find the broken link in this file From fdd99627fe86090359a16601148528ed3e5c7381 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sun, 24 Jan 2021 18:14:01 +0300 Subject: [PATCH 09/19] patch-4 Co-authored-by: LaneSh4d0w <30985701+LaneSh4d0w@users.noreply.github.com> --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9d3b91dac..4ee648961 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -28,7 +28,7 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this - check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this -- find out the full name of the channel and from which country it is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find out the full name of the channel and from which country it is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 - open the `channels/` folder and find a file with the same name as the country code - at the very end of this file add a link to the channel with a description From d477c0f9e5c398bfd739b5c3cb2074108edf8c85 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sun, 24 Jan 2021 18:17:23 +0300 Subject: [PATCH 10/19] patch-5 Co-authored-by: LaneSh4d0w <30985701+LaneSh4d0w@users.noreply.github.com> --- .github/CONTRIBUTING.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4ee648961..4f2ad1eb3 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -35,11 +35,11 @@ Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels= - commit all changes - send a pull request -In case you were unable to determine which country the channel belongs to, you can put a link to it in the `channels/unsorted.m3u`. +In case you were unable to determine which country the channel belongs to, add the channel onto the `channels/unsorted.m3u` playlist. **Do you want to sort the channels from "channels/unsorted.m3u"?** -- find out the full name of the channel and from which country it is broadcasting. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- find out the full name of the channel and from which country it is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - update the channel name if necessary - find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 - open the `channels/` folder and find a file with the same name as the country code @@ -61,11 +61,11 @@ In case you were unable to determine which country the channel belongs to, you c - find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this. - open the file - find the channel description -- specify the appropriate language in the `tvg-language` attribute. The name of the language must comply with [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500) standart. +- specify the appropriate language in the `tvg-language` attribute. The name of the language must comply with the [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500) standard. - commit all changes - send a pull request -If a channel is broadcast in several languages at once, you can specify them all through a semicolon, like this: +If a channel is broadcasted in several languages at once, you can specify them all through a semicolon, like this: ```xml #EXTINF:-1 tvg-language="English;Chinese",CCTV @@ -76,7 +76,7 @@ http://example.com/cctv.m3u8 - check which country the EPG is intended for - check that this source is not already listed in the playlist. To do this, find the country in this [table](https://github.com/iptv-org/iptv#playlists-by-country) and see if there is any other link. If not, continue. -- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 +- find the corresponding [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code. - open the `channels/` folder and find a file with the same name as the country code - in the header of the playlist, next to `#EXTM3U`, add an `x-tvg-url` attribute with a link to the EPG source. @@ -89,7 +89,7 @@ The result should be something like this: **Do you want to activate the program guide for the channel?** - find out which country the channel belongs to. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) -- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 +- find the corresponding [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code. - open the `/channels` folder and find the file that has the same code in its name and open it - check that the EPG source is specified in the file. To do this, just look at the header of the playlist. If the `x-tvg-url` attribute is present and has a link in it, everything is fine. - open the file specified in the `x-tvg-url` @@ -121,20 +121,20 @@ http://example.com/cnn.m3u8 If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. -In some cases, it may also be necessary to manually specify the source of EPG in the player itself. +In some cases, it may also be necessary to manually specify the EPG source in the player itself. **Did you find a mistake in README.md?** - open `.readme/template.md` -- make any necessary changes to the file -- commit all changes +- make the necessary changes +- commit the updated README - send a pull request **Did you find a mistake in this guide?** - open `.github/CONTRIBUTING.md` -- make any necessary changes to the file -- commit all changes +- make the necessary changes +- commit the updated guide - send a pull request **Would you like us to remove the link to the channel you own the rights to?** @@ -211,7 +211,7 @@ Example: https://example.com/playlist.m3u8 ``` -Also, if necessary, you can specify custom HTTP User-Agent or Referrer via `#EXTVLCOPT` tag: +Also, if necessary, you can specify custom HTTP User-Agent or Referrer via the `#EXTVLCOPT` tag: ```xml #EXTINF:-1 tvg-id="exampletv.us" tvg-name="Example TV" tvg-language="English" tvg-logo="http://example.com/channel-logo.png" group-title="News",Example TV From 31b7c9b103e6e9a13a4f387c9284e5816b164e63 Mon Sep 17 00:00:00 2001 From: freearhey Date: Sun, 24 Jan 2021 18:18:57 +0300 Subject: [PATCH 11/19] patch-6 --- .github/CONTRIBUTING.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4f2ad1eb3..ece425d82 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -182,8 +182,6 @@ In some cases, it may also be necessary to manually specify the EPG source in th Channels should be added to playlists using the following template. -Explanation of attributes: - ``` #EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-language="PRIMARY_LANGUAGE;SECONDARY_LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME STREAM_TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] STREAM_URL From 96bd0ba45970b859c83aa3f9176ee55b66f3547a Mon Sep 17 00:00:00 2001 From: freearhey Date: Sun, 24 Jan 2021 19:05:39 +0300 Subject: [PATCH 12/19] patch-7 --- .github/CONTRIBUTING.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ece425d82..2c98e047e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -108,13 +108,13 @@ The result should be something like this: ``` - find the channel you are interested in -- copy it `id` and paste it to the `tvg-id` attribute of the channel description inside the playlist +- copy the `id` and paste it into the `tvg-id` attribute of the channel description - copy the `` tag value and paste it into the `tvg-name` attribute of the channel description. The result should be something like this: -```xml -#EXTINF:-1 tvg-id="cnn" tvg-name="CNN",CNN -http://example.com/cnn.m3u8 -``` + ```xml + #EXTINF:-1 tvg-id="cnn" tvg-name="CNN",CNN + http://example.com/cnn.m3u8 + ``` - commit all changes - send a pull request From 9bd61d28ebd9097eaf9fdf8cc406f6250aee6ed2 Mon Sep 17 00:00:00 2001 From: themak1985 Date: Wed, 3 Feb 2021 19:13:30 -0500 Subject: [PATCH 13/19] Update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 73 ++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 49 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2c98e047e..2882c4e71 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,41 +1,25 @@ # Contributing Guide -**Do you have an idea how to improve the project?** +## Feature Requests +If you have an idea how to improve the project create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=discussion&template=feature-request.md&title=Propose%3A+xxx) with a detailed description of your idea. -Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=discussion&template=feature-request.md&title=Propose%3A+xxx) with a detailed description of your idea. +## Report a Broken Stream +To report a broadcast that is not working, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=broken-stream.md&title=Fix%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a report for only one channel, otherwise it will be closed immediately). -**Do you want to report a broadcast that is not working?** +## Add or Replace a Stream +If you would like to replace a broken stream or add a new one, please do the following: +- Make sure that the link you want to add works by using a program like [VLC media player](https://www.videolan.org/vlc/index.html). +- Check if the channel is working outside your country by using a vpn or use a service we highly reccomend like [streamtest.in](https://streamtest.in/). +- Find out from which country the channel is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) If you are unable to determine which country the channel belongs to, add the channel onto the `channels/unsorted.m3u` playlist. +- Find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 +- Open the `/channels` folder and find the file that has the same code in its name and open it +- If broken, find the broken link in this file and replace it with working one. +- If new, at the very end of this file add a link to the channel with a description. +- Commit all changes and send a pull request. -Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=broken-stream.md&title=Fix%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a report for only one channel, otherwise it will be closed immediately). +## Request a Stream for a Channel -**Do you want to replace the broken stream?** - -- make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this. -- check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this. -- find out from which country the channel is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) -- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 -- open the `/channels` folder and find the file that has the same code in its name and open it -- find the broken link in this file -- replace it with working one -- commit all changes -- send a pull request - -**Do you want to report a channel that is not on the playlist?** - -Create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a request for only one channel, otherwise it will be closed immediately). - -**Would you like to add a new channel to playlist?** - -- make sure that the link you want to add works. It is recommended to use [VLC media player](https://www.videolan.org/vlc/index.html) for this -- check if the channel is working outside your country. You can use services like [streamtest.in](https://streamtest.in/) to do this -- find out the full name of the channel and from which country it is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) -- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 -- open the `channels/` folder and find a file with the same name as the country code -- at the very end of this file add a link to the channel with a description -- commit all changes -- send a pull request - -In case you were unable to determine which country the channel belongs to, add the channel onto the `channels/unsorted.m3u` playlist. +To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) and complete all details requested. (**IMPORTANT:** the issue should contain a request for only one channel, otherwise it will be closed immediately). Understand that our community of volunteers will try to help you, but if a public link cannot be found, there is little we can do. **Do you want to sort the channels from "channels/unsorted.m3u"?** @@ -47,7 +31,7 @@ In case you were unable to determine which country the channel belongs to, add t - commit all changes - send a pull request -**Do you want to change the channel category?** +## Add a Category to a Channel - find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this. - open the file @@ -56,7 +40,7 @@ In case you were unable to determine which country the channel belongs to, add t - commit all changes - send a pull request -**Do you want to change the channel language?** +## Add a Language to a Channel - find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this. - open the file @@ -72,7 +56,7 @@ If a channel is broadcasted in several languages at once, you can specify them a http://example.com/cctv.m3u8 ``` -**Do you want to add a new EPG (Electronic Program Guide) source?** +## Add an EPG (Electronic Program Guide) Source - check which country the EPG is intended for - check that this source is not already listed in the playlist. To do this, find the country in this [table](https://github.com/iptv-org/iptv#playlists-by-country) and see if there is any other link. If not, continue. @@ -86,7 +70,7 @@ The result should be something like this: #EXTM3U x-tvg-url="https://example.com/epg.xml.gz" ``` -**Do you want to activate the program guide for the channel?** +## Setting up A Channel to Use an EPG - find out which country the channel belongs to. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - find the corresponding [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code. @@ -119,25 +103,16 @@ The result should be something like this: - commit all changes - send a pull request -If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. +If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. In some cases, it may also be necessary to manually specify the EPG source in the player itself. Note: Playlists are updated only once per 24 hours. -In some cases, it may also be necessary to manually specify the EPG source in the player itself. +## Make changes to README.md and CONTRIBUTING.md` -**Did you find a mistake in README.md?** - -- open `.readme/template.md` +- open `.readme/template.md` or `.github/CONTRIBUTING.md` - make the necessary changes - commit the updated README - send a pull request -**Did you find a mistake in this guide?** - -- open `.github/CONTRIBUTING.md` -- make the necessary changes -- commit the updated guide -- send a pull request - -**Would you like us to remove the link to the channel you own the rights to?** +## Request Stream Removal - publish your DMCA notice somewhere - create an issue using this [link](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=DMCA&template=remove-channel.md&title=Remove%3A+xxx) and add a link to the DMCA notice in it From 1ccd2a7adc09e826f4b130fab164c5ac2d3b32dc Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 4 Feb 2021 05:20:08 +0300 Subject: [PATCH 14/19] Removes quotation mark --- .github/CONTRIBUTING.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2882c4e71..ec66516f1 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,13 +1,17 @@ # Contributing Guide ## Feature Requests + If you have an idea how to improve the project create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=discussion&template=feature-request.md&title=Propose%3A+xxx) with a detailed description of your idea. ## Report a Broken Stream + To report a broadcast that is not working, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=broken-stream.md&title=Fix%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a report for only one channel, otherwise it will be closed immediately). ## Add or Replace a Stream + If you would like to replace a broken stream or add a new one, please do the following: + - Make sure that the link you want to add works by using a program like [VLC media player](https://www.videolan.org/vlc/index.html). - Check if the channel is working outside your country by using a vpn or use a service we highly reccomend like [streamtest.in](https://streamtest.in/). - Find out from which country the channel is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) If you are unable to determine which country the channel belongs to, add the channel onto the `channels/unsorted.m3u` playlist. @@ -19,7 +23,7 @@ If you would like to replace a broken stream or add a new one, please do the fol ## Request a Stream for a Channel -To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) and complete all details requested. (**IMPORTANT:** the issue should contain a request for only one channel, otherwise it will be closed immediately). Understand that our community of volunteers will try to help you, but if a public link cannot be found, there is little we can do. +To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) and complete all details requested. (**IMPORTANT:** the issue should contain a request for only one channel, otherwise it will be closed immediately). Understand that our community of volunteers will try to help you, but if a public link cannot be found, there is little we can do. **Do you want to sort the channels from "channels/unsorted.m3u"?** @@ -105,7 +109,7 @@ The result should be something like this: If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. In some cases, it may also be necessary to manually specify the EPG source in the player itself. Note: Playlists are updated only once per 24 hours. -## Make changes to README.md and CONTRIBUTING.md` +## Make changes to README.md and CONTRIBUTING.md - open `.readme/template.md` or `.github/CONTRIBUTING.md` - make the necessary changes From d541f11e0ef6b2115ec6646e4a484be895165e7d Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 4 Feb 2021 05:26:29 +0300 Subject: [PATCH 15/19] Splits the README.md and CONTRIBUTING.md instructions into two parts To avoid unnecessary confusion for inexperienced users. --- .github/CONTRIBUTING.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ec66516f1..44132b968 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -109,11 +109,18 @@ The result should be something like this: If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. In some cases, it may also be necessary to manually specify the EPG source in the player itself. Note: Playlists are updated only once per 24 hours. -## Make changes to README.md and CONTRIBUTING.md +## Make changes to README.md -- open `.readme/template.md` or `.github/CONTRIBUTING.md` +- open `.readme/template.md` - make the necessary changes -- commit the updated README +- commit the updated file +- send a pull request + +## Make changes to this Guide + +- open `.github/CONTRIBUTING.md` +- make the necessary changes +- commit the updated file - send a pull request ## Request Stream Removal From 3b8b7ebeb8406c5e945c7733cf85fe920927c870 Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 4 Feb 2021 05:30:38 +0300 Subject: [PATCH 16/19] Replace "Stream" with "Channel" That sounds right, doesn't it? --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 44132b968..d557e25ba 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -123,7 +123,7 @@ If you did everything right, then by opening a playlist in a player that support - commit the updated file - send a pull request -## Request Stream Removal +## Request Channel Removal - publish your DMCA notice somewhere - create an issue using this [link](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=DMCA&template=remove-channel.md&title=Remove%3A+xxx) and add a link to the DMCA notice in it From 6c245aad2e3ff9267d4530b9512e4bba672d904f Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 4 Feb 2021 05:37:26 +0300 Subject: [PATCH 17/19] Make the header look like the others --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d557e25ba..726eec632 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -25,7 +25,7 @@ If you would like to replace a broken stream or add a new one, please do the fol To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) and complete all details requested. (**IMPORTANT:** the issue should contain a request for only one channel, otherwise it will be closed immediately). Understand that our community of volunteers will try to help you, but if a public link cannot be found, there is little we can do. -**Do you want to sort the channels from "channels/unsorted.m3u"?** +## Sort channels from `channels/unsorted.m3u` - find out the full name of the channel and from which country it is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) - update the channel name if necessary From fb944393318bfa9847ae61fad6d8e5db19354f89 Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 8 Feb 2021 14:24:20 +0300 Subject: [PATCH 18/19] Update Project Structure --- .github/CONTRIBUTING.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 726eec632..d4c9a65e8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -137,9 +137,7 @@ If you did everything right, then by opening a playlist in a player that support - `feature-request.md`: template for feature request. - `remove-channel.md`: template for channel deletion request. - `workflows/` - - `automerge.yml`: contain action that automatically merges all the changes created by other workflows. - - `format.yml`: contain actions that automatically sorts channels and removes duplicates from each playlist. - - `update.yml`: contain actions that automatically generates all additional playlists and updates the `README.md` file. + - `auto-update.yml`: contain actions that automatically updates all playlists every day. - `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned. - `CONTRIBUTING.md`: file you are currently reading. - `.readme/` @@ -152,15 +150,16 @@ If you did everything right, then by opening a playlist in a player that support - `channels/` - `ad.m3u`: country specific playlist. - ... - - `int.m3u`: playlist for channels not belonging to any one particular country. These are usually channels that broadcast exclusively on the internet. - - ... - `unsorted.m3u`: playlist with channels not yet sorted. - `scripts/` + - `categories.json`: list of supported categories. - `format.js`: used within GitHub Action to sort channels and remove duplicates from each playlist. - `generate.js`: used within GitHub Action to generate all additional playlists. - - `helper.js`: contains functions that are used in other scripts. - - `test.js`: allows you to automatically test all channels in a playlist. + - `parser.js`: contains functions for parsing playlists. + - `regions.json`: list of supported region codes. + - `test.js`: script for channel testing. - `update-readme.js`: used within GitHub Action to update the `README.md` file. + - `utils.js`: contains functions that are used in other scripts. - `index.m3u`: main playlist that contains links to all playlists in the `channels/` folder. - `README.md`: project description generated from the contents of the `.readme/` folder. From 5c30a449403bf67370639793c778cafab375cf21 Mon Sep 17 00:00:00 2001 From: freearhey Date: Mon, 8 Feb 2021 15:41:49 +0300 Subject: [PATCH 19/19] Update CONTRIBUTING.md - added table of contents - added "Add a Category to a channel" section - updated Channel Description Scheme - added list of Supported Region Codes - sort sections --- .github/CONTRIBUTING.md | 221 +++++++++++++++++++++++++--------------- 1 file changed, 139 insertions(+), 82 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d4c9a65e8..818b41acd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,9 +1,30 @@ # Contributing Guide +- [Feature Requests](#feature-requests) +- [Request a Channel](#request-a-channel) +- [Report a Broken Stream](#report-a-broken-stream) +- [Add or Replace a Stream](#add-or-replace-a-stream) +- [Add a Category to a Сhannel](#add-a-category-to-a-channel) +- [Add a Country to a Сhannel](#add-a-country-to-a-channel) +- [Add a Language to a Channel](#add-a-language-to-a-channel) +- [Add an EPG (Electronic Program Guide) source](#add-an-epg-electronic-program-guide-source) +- [Setting up a Сhannel to use an EPG](#setting-up-a-channel-to-use-an-epg) +- [Sort сhannels from `channels/unsorted.m3u`](#sort-channels-from-channels-unsorted.m3u`) +- [Request Channel Removal](#request-channel-removal) +- [Make changes to README.md](#make-changes-to-readme.md) +- [Make changes to this Guide](#make-changes-to-this-guide) +- [Channel Description Scheme](#channel-description-scheme) +- [Supported Region Codes](#supported-region-codes) +- [Project Structure](#project-structure) + ## Feature Requests If you have an idea how to improve the project create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=discussion&template=feature-request.md&title=Propose%3A+xxx) with a detailed description of your idea. +## Request a Channel + +To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) and complete all details requested. (**IMPORTANT:** the issue should contain a request for only one channel, otherwise it will be closed immediately). Understand that our community of volunteers will try to help you, but if a public link cannot be found, there is little we can do. + ## Report a Broken Stream To report a broadcast that is not working, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=broken-stream.md&title=Fix%3A+xxx) with a description of the channel (**IMPORTANT:** an issue should contain a report for only one channel, otherwise it will be closed immediately). @@ -12,37 +33,48 @@ To report a broadcast that is not working, create an [issue](https://github.com/ If you would like to replace a broken stream or add a new one, please do the following: -- Make sure that the link you want to add works by using a program like [VLC media player](https://www.videolan.org/vlc/index.html). -- Check if the channel is working outside your country by using a vpn or use a service we highly reccomend like [streamtest.in](https://streamtest.in/). -- Find out from which country the channel is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) If you are unable to determine which country the channel belongs to, add the channel onto the `channels/unsorted.m3u` playlist. -- Find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 -- Open the `/channels` folder and find the file that has the same code in its name and open it -- If broken, find the broken link in this file and replace it with working one. -- If new, at the very end of this file add a link to the channel with a description. -- Commit all changes and send a pull request. - -## Request a Stream for a Channel - -To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=channel+request&template=channel-request.md&title=Add%3A+xxx) and complete all details requested. (**IMPORTANT:** the issue should contain a request for only one channel, otherwise it will be closed immediately). Understand that our community of volunteers will try to help you, but if a public link cannot be found, there is little we can do. +- make sure that the link you want to add works by using a program like [VLC media player](https://www.videolan.org/vlc/index.html) +- check if the channel is working outside your country by using a vpn or use a service we highly recommend like [streamtest.in](https://streamtest.in/) +- find out from which country the channel is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/). If you are unable to determine which country the channel belongs to, add the channel onto the `channels/unsorted.m3u` playlist +- find the corresponding [ISO_3166-2 code](https://en.wikipedia.org/wiki/ISO_3166-2) for the country +- open the `/channels` folder and find the file that has the same code in its name and open it +- if broken, find the broken link in this file and replace it with working one +- if new, at the very end of this file add a link to the channel with a description +- commit all changes and send a pull request -## Sort channels from `channels/unsorted.m3u` +## Add a Category to a channel -- find out the full name of the channel and from which country it is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) -- update the channel name if necessary -- find the corresponding ISO_3166-2 code for the country. You can find a full list of codes here: https://en.wikipedia.org/wiki/ISO_3166-2 -- open the `channels/` folder and find a file with the same name as the country code -- at the very end of this file add a link to the channel with a description -- commit all changes -- send a pull request +- find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this +- open the file +- find the channel description +- specify the appropriate category in the `group-title` attribute. A complete list of supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category) +- commit all changes and send a pull request -## Add a Category to a Channel +## Add a Country to a channel +- make sure the channel is broadcast in the country. This information can usually be found in the channel description on Wikipedia +- find the corresponding [ISO_3166-2 code](https://en.wikipedia.org/wiki/ISO_3166-2) for the country - find the file that contains the channel. You can use a [GitHub Search](https://github.com/search/advanced?q=CHANNEL_NAME+repo%3Aiptv-org%2Fiptv+path%3A%2Fchannels&type=Code) to do this. - open the file -- find the channel description -- specify the appropriate category in the `group-title` attribute. A complete list of supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). -- commit all changes -- send a pull request +- find the channel in the list +- paste the country code into `tvg-country` attribute of the channel description +- commit all changes and send a pull request + +If a channel is broadcasted in several countries at once, you can specify them all through a semicolon, like this: + +```xml +#EXTINF:-1 tvg-country="US;CA",CNN +http://example.com/cnn.m3u8 +``` + +If a channel is broadcast for an entire region, you can use one of the [supported region code](#supported-region-codes) to avoid listing all countries. In this case the channel will be added to the playlists of all countries from that region. + +In case the channel is broadcast worldwide you can use the code `INT`: + +```xml +#EXTINF:-1 tvg-country="INT",CNN +http://example.com/cnn.m3u8 +``` ## Add a Language to a Channel @@ -50,8 +82,7 @@ To request a channel, create an [issue](https://github.com/iptv-org/iptv/issues/ - open the file - find the channel description - specify the appropriate language in the `tvg-language` attribute. The name of the language must comply with the [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500) standard. -- commit all changes -- send a pull request +- commit all changes and send a pull request If a channel is broadcasted in several languages at once, you can specify them all through a semicolon, like this: @@ -60,13 +91,13 @@ If a channel is broadcasted in several languages at once, you can specify them a http://example.com/cctv.m3u8 ``` -## Add an EPG (Electronic Program Guide) Source +## Add an EPG (Electronic Program Guide) source - check which country the EPG is intended for - check that this source is not already listed in the playlist. To do this, find the country in this [table](https://github.com/iptv-org/iptv#playlists-by-country) and see if there is any other link. If not, continue. - find the corresponding [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code. - open the `channels/` folder and find a file with the same name as the country code -- in the header of the playlist, next to `#EXTM3U`, add an `x-tvg-url` attribute with a link to the EPG source. +- in the header of the playlist, next to `#EXTM3U`, add an `x-tvg-url` attribute with a link to the EPG source The result should be something like this: @@ -74,12 +105,12 @@ The result should be something like this: #EXTM3U x-tvg-url="https://example.com/epg.xml.gz" ``` -## Setting up A Channel to Use an EPG +## Setting up a channel to use an EPG - find out which country the channel belongs to. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) -- find the corresponding [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code. +- find the corresponding [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code - open the `/channels` folder and find the file that has the same code in its name and open it -- check that the EPG source is specified in the file. To do this, just look at the header of the playlist. If the `x-tvg-url` attribute is present and has a link in it, everything is fine. +- check that the EPG source is specified in the file. To do this, just look at the header of the playlist. If the `x-tvg-url` attribute is present and has a link in it, everything is fine - open the file specified in the `x-tvg-url` - find the channel list in the file. Usually it looks like this: @@ -104,29 +135,95 @@ The result should be something like this: http://example.com/cnn.m3u8 ``` -- commit all changes -- send a pull request +- commit all changes and send a pull request + +If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. In some cases, it may also be necessary to manually specify the EPG source in the player itself. Note: playlists are updated only once per 24 hours. + +## Sort channels from `channels/unsorted.m3u` + +- find out the full name of the channel and from which country it is being broadcasted. This information can usually be found on [lyngsat.com](https://www.lyngsat.com/search.html) or [wikipedia.org](https://www.wikipedia.org/) +- update the channel name if necessary +- find the corresponding [ISO_3166-2 code](https://en.wikipedia.org/wiki/ISO_3166-2) for the country +- open the `channels/` folder and find a file with the same name as the country code +- at the very end of this file add a link to the channel with a description +- commit all changes and send a pull request + +## Request Channel Removal -If you did everything right, then by opening a playlist in a player that supports EPG, you should see the program guide for all updated channels. In some cases, it may also be necessary to manually specify the EPG source in the player itself. Note: Playlists are updated only once per 24 hours. +- publish your DMCA notice somewhere +- create an issue using this [link](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=DMCA&template=remove-channel.md&title=Remove%3A+xxx) and add a link to the DMCA notice in it ## Make changes to README.md - open `.readme/template.md` - make the necessary changes -- commit the updated file -- send a pull request +- commit all changes and send a pull request ## Make changes to this Guide - open `.github/CONTRIBUTING.md` - make the necessary changes -- commit the updated file -- send a pull request +- commit all changes and send a pull request -## Request Channel Removal +## Channel Description Scheme -- publish your DMCA notice somewhere -- create an issue using this [link](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=DMCA&template=remove-channel.md&title=Remove%3A+xxx) and add a link to the DMCA notice in it +Channels should be added to playlists using the following template. + +``` +#EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-country="COUNTRY" tvg-language="LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME STREAM_TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] +STREAM_URL +``` + +| Attribute | Description | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `EPG_ID` | Channel ID that is used to load EPG. Must match `id` from the EPG file specified in the playlist header. (optional) | +| `EPG_NAME` | Channel name that is also sometimes used to load EPG. Must match `` from the EPG file specified in the playlist header. (optional) | +| `COUNTRY` | The code of the country in which the channel is broadcast. The code of the country must conform to the standard [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2). If the channel is broadcast in several countries you can list them separated by a semicolon. You can also use one of these [region codes](#supported-region-codes). (optional) | +| `LANGUAGE` | Channel language. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). If the channel is broadcast in several languages you can list them separated by a semicolon. (optional) | +| `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. (optional) | +| `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | +| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | +| `STREAM_TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | +| `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | +| `STREAM_RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | +| `STREAM_STATUS` | Specified if the broadcast for some reason is interrupted or does not work in a particular application. May contain any characters except round and square brackets. (optional) | +| `STREAM_URL` | Channel broadcast URL. | + +Example: + +```xml +#EXTINF:-1 tvg-id="example.ua" tvg-name="Example TV" tvg-language="Ukrainian;Russian" tvg-logo="https://i.imgur.com/bu12f89.png" group-title="Kids",Example TV +3 (Пример ТВ) (720p) [not 24/7] +https://example.com/playlist.m3u8 +``` + +Also, if necessary, you can specify custom HTTP User-Agent or Referrer via the `#EXTVLCOPT` tag: + +```xml +#EXTINF:-1 tvg-id="exampletv.us" tvg-name="Example TV" tvg-language="English" tvg-logo="http://example.com/channel-logo.png" group-title="News",Example TV +#EXTVLCOPT:http-referrer=http://example.com/ +#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) +http://example.com/stream.m3u8 +``` + +## Supported Region Codes + +| Code | Description | +| ------------------------------------------------------------------------ | ------------------------------ | +| [AFR](https://en.wikipedia.org/wiki/Africa) | Africa | +| [AMER](https://en.wikipedia.org/wiki/Americas) | Americas | +| [APAC](https://en.wikipedia.org/wiki/Asia-Pacific) | Asia-Pacific | +| [ASIA](https://en.wikipedia.org/wiki/Asia) | Asia | +| [CARIB](https://en.wikipedia.org/wiki/Caribbean) | Caribbean | +| [EMEA](https://en.wikipedia.org/wiki/Europe,_the_Middle_East_and_Africa) | Europe, Middle East and Africa | +| [EUR](https://en.wikipedia.org/wiki/Europe) | Europe | +| [LATAM](https://en.wikipedia.org/wiki/Latin_America) | Latin America | +| [MENA](https://en.wikipedia.org/wiki/MENA) | Middle East and North Africa | +| [MIDEAST](https://en.wikipedia.org/wiki/Middle_East) | Middle East | +| [NORAM](https://en.wikipedia.org/wiki/North_America) | North America | +| [NORD](https://en.wikipedia.org/wiki/Nordic_countries) | Nordics | +| [OCE](https://en.wikipedia.org/wiki/Oceania) | Oceania | +| [SAS](https://en.wikipedia.org/wiki/South_Asia) | South Asia | +| [SSA](https://en.wikipedia.org/wiki/Sub-Saharan_Africa) | Sub-Saharan Africa | ## Project Structure @@ -162,43 +259,3 @@ If you did everything right, then by opening a playlist in a player that support - `utils.js`: contains functions that are used in other scripts. - `index.m3u`: main playlist that contains links to all playlists in the `channels/` folder. - `README.md`: project description generated from the contents of the `.readme/` folder. - -## Channel Description Scheme - -Channels should be added to playlists using the following template. - -``` -#EXTINF:-1 tvg-id="EPG_ID" tvg-name="EPG_NAME" tvg-language="PRIMARY_LANGUAGE;SECONDARY_LANGUAGE" tvg-logo="LOGO_URL" group-title="CATEGORY",FULL_NAME STREAM_TIME_SHIFT (ALTERNATIVE_NAME) (STREAM_RESOLUTION) [STREAM_STATUS] -STREAM_URL -``` - -| Attribute | Description | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `EPG_ID` | Channel ID that is used to load EPG. Must match `id` from the EPG file specified in the playlist header. (optional) | -| `EPG_NAME` | Channel name that is also sometimes used to load EPG. Must match `` from the EPG file specified in the playlist header. (optional) | -| `PRIMARY_LANGUAGE` | Channel language. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). (optional) | -| `SECONDARY_LANGUAGE` | If the channel is broadcast in several languages. (optional) | -| `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. (optional) | -| `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | -| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | -| `STREAM_TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | -| `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | -| `STREAM_RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | -| `STREAM_STATUS` | Specified if the broadcast for some reason is interrupted or does not work in a particular application. May contain any characters except round and square brackets. (optional) | -| `STREAM_URL` | Channel broadcast URL. | - -Example: - -```xml -#EXTINF:-1 tvg-id="example.ua" tvg-name="Example TV" tvg-language="Ukrainian;Russian" tvg-logo="https://i.imgur.com/bu12f89.png" group-title="Kids",Example TV +3 (Пример ТВ) (720p) [not 24/7] -https://example.com/playlist.m3u8 -``` - -Also, if necessary, you can specify custom HTTP User-Agent or Referrer via the `#EXTVLCOPT` tag: - -```xml -#EXTINF:-1 tvg-id="exampletv.us" tvg-name="Example TV" tvg-language="English" tvg-logo="http://example.com/channel-logo.png" group-title="News",Example TV -#EXTVLCOPT:http-referrer=http://example.com/ -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) -http://example.com/stream.m3u8 -```