Went through the open issue backlog and verified each claim against the live streams with check_channels.py / curl before touching anything, rather than acting on the reports alone. Moved to Invalid (2 attempts, both `gone`, re-verified by hand): - Greece: Start, Thraki Net TV - Slovakia: Doma, Dajto, Krimi, Markíza TN Live, Jojko (joining the JOJ-family channels already Invalid - same upstream host, same missing-channel pattern) - Bosnia and Herzegovina: Sevdah - Spain: Nova, La 7 CYLTV, Canal TE24 - USA: NASA TV Public - USA + zz_news_en: CNN / CNN International - both point at turnerlive.warnermediacdn.com/.../cnn_slate/..., which returns a permanently frozen manifest (#EXT-X-PUBLISHED-TIME and MEDIA-SEQUENCE identical across two fetches 8s apart, dated several months in the past) - a live-looking HTTP 200 that check_channels.py currently has no way to catch, since it never compares a URL against its own earlier response. Also moved the alternate CNN entry in zz_news_en.md (a raw.githubusercontent.com link that 404s outright). - Not moved: N1 Bosna i Hercegovina (`disputed` - ffprobe found a real stream behind the dead-looking HTTP response, needs a human) and everything reported merely `unreachable`/`blocked` across these lists - neither is strong enough evidence on its own, see check_channels.py's own docstring. Japan: added the Ⓖ marker to the 6 terrestrial channels on mov3.co (NHK総合, 日本テレビ, テレビ朝日, TBSテレビ, テレビ東京, フジテレビ) - confirmed HTTP 403 from here on all six, consistent with the geo-restriction every other Ⓖ-marked channel in this repo already documents. They were working `[>]` entries with no Ⓖ, which reads as "this should work from anywhere" when it does not. Left alone after checking (false alarms / already resolved, not a list-file problem): - Croatia HRT 1-4: already Ⓖ-marked and alive. - Mongolia TenGer TV/TV5/TV9: all 40 Mongolia channels alive. - Japan Willfonk/naori-test links: already Invalid on master. - Several `unreachable` entries (Greece ART TV/Epirus TV 1, Croatia's RTL family, half of Spain, Bosnia's BHT/Glas Drine/etc.) - `unreachable` means "every attempt timed out or failed to connect from here", not "confirmed gone" - too weak to act on without a second opinion, and these didn't get one in this pass. ran: python3 make_playlist.py (clean regen) + check_channels.py on every touched list afterward to confirm nothing newly broke and the moved channels no longer show up as working.
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.