Fixes #1179. PR #1166 moved Rai 1, Rai 2, Rai 3, Rai Premium, Rai Storia and Rai Scuola from the official mediapolis.rai.it relinker to a third-party CloudFront mirror, because the relinker had become Italy-IP-gated and was failing for everyone else (including the CI checker). That mirror works for casual viewing, but as #1179 reports, it goes black during broadcasts where RAI only holds domestic rights (e.g. EuroVolley) - the official stream keeps working correctly for Italian-IP viewers through exactly those broadcasts, because it's RAI's own domestic feed, not a re-mirror of it. Rather than trade one gap for the other, add the official mediapolis URL back as a second, Ⓖ-marked entry for each of the six channels - the same "CDN mirror as the general-access entry, official relinker as the geo-gated alternative" split this file already uses for every other Rai channel (Rai 4, Rai 5, Rai Movie, Rai Sport, etc., all still on mediapolis.rai.it + Ⓖ). Viewers with an Italian IP get the more correct source; everyone else keeps the mirror that already works for them. Also fixes a real gap in check_channels.py found while verifying this: mediapolis.rai.it's relinker doesn't refuse an out-of-territory request with an HTTP error - it answers 200 with a real MP4, but the file is always the same "video_no_available.mp4" decoy regardless of which channel was asked for. The checker had no way to tell that apart from a working stream failing its playlist-header check, so every mediapolis.rai.it entry (the pre-existing Rai 4/5/Movie/Sport ones included) was scored `dead` instead of `blocked`, right down to the newly-fixed pr_check.yml workflow that now hard-fails a PR over a `dead`-scored touched channel. Added a check for this specific decoy redirect target, classified as `blocked` like any other geo-refusal. Regenerated playlist.m3u8 and playlists/playlist_italy.m3u8 via make_playlist.py. pylint check_channels.py: 10.00/10. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU |
||
|---|---|---|
| .github | ||
| lists | ||
| playlists | ||
| .gitignore | ||
| README.md | ||
| check_channels.py | ||
| epglist.txt | ||
| flag_order.txt | ||
| generate_dashboard.py | ||
| make_flags.sh | ||
| make_playlist.py | ||
| playlist.m3u8 | ||
README.md
Free TV
This is an M3U playlist for free TV channels around the World.
Either free locally (over the air):
Or free on the Internet:
- Plex TV
- Pluto TV (English, Spanish, French, Italian)
- Redbox Live TV
- Roku TV
- Samsung TV Plus
- Youtube live channels
To use it point your IPTV player to https://raw.githubusercontent.com/Free-TV/IPTV/master/playlist.m3u8.
Philosophy
The main goals for this playlist are listed below.
Quality over quantity
The less channels we support the better.
- All channels should work well.
- As much as possible channels should be in HD, not SD.
- Only one URL per channel (no +1, no alternate feeds, no regional declinations)
Only free channels
If a channel is normally only available via commercial subscriptions it has nothing to do in this playlist. If on the other hand it is provided for free to everybody in a particular country, then it should be in this playlist.
- No paid channels
- Only channels which are officially provided for free (via DVB-S, DVB-T, analog, etc..)
Only mainstream channels
This is a playlist for everybody.
- No adult channels
- No channels dedicated to any particular religion
- No channels dedicated to any particular political party
- No channels made for a country and funded by a different country
Feed sources
It can be quite hard to find up to date URLs, here's a list of sources:
- https://github.com/iptv-org/iptv/tree/master/streams
- Youtube: As long as the channel is live and its URL doesn't change (check the age of the stream, the number of viewers..)
- Dailymotion: Same criteria as for youtube
Format
The m3u8 playlist is generated by make_playlist.py, using the .md files located in lists.
Each .md file represents a group. The <h1> line is used as the group title.
Only channels which URL column starts with [>] are included in the playlist.
Channels which are not in HD are marked with an Ⓢ.
Channels which use GeoIP blocking are marked with a Ⓖ.
Channels which are live Youtube channels are marked with a Ⓨ.
Issues
Only create issues for bugs and feature requests.
Do not create issues to add/edit or to remove channels. If you want to add/edit/remove channels, create a pull request directly.
Pull Requests
Only modify .md files
If your Pull Request modifies channels, only modify .md files. Do not modify m3u8 files in your pull request.
Adding a new Channel
To add a new channel, make a Pull Request.
- In your Pull Request you need to provide information to show that the channel is free.
- Use imgur.com to host the channel logo and point to it.
- If you have a valid stream, add it and put
[>]in front of it. - If you don't have an stream for the channel, add
[x]()in the url column and place your channel in the Invalid category. - If you have a stream but it doesn't work well, put the channel in the Invalid category and put
[x]in front of the url. - If you're adding geoblocked URLs specify it in your PR and specify which country they're working in. The PR will only be merged if these URLs can be tested.
Removing a Channel
To remove a channel, make a Pull Request.
In your Pull Request you need to provide information to show that the channel is only available via a private paid subscription.
Note: Public taxes (whether national or regional, whether called TV License or not) do not constitute a private paid subscription.
If a stream is broken, simply move the channel to the invalid category and replace [>] with [x] in the url column.