Provider matrix
The seven providers the addon supports, side by side. For detail on any one provider click its catalogue/resolver page.
Capability matrix
| Provider | Live | VOD | Auth | DRM | Catalogue fetch | Sync frequency |
|---|---|---|---|---|---|---|
| BBC iPlayer | yes | yes | none (UK-IP geofenced) | none (clear DASH) | HTML scrape (__IPLAYER_REDUX_STATE__) | BBC |
| ITVX | yes | yes | OAuth (JWT, refresh-token + 4h proactive) | Widevine L3 | HTML scrape (__NEXT_DATA__) | ITVX |
| Channel 4 | yes | yes | none (anonymous web client) | Widevine via Redbeemedia | HTML + __PARAMS__ inline JSON | C4 |
| My5 | yes | yes | HMAC + AES keys extracted from live C5 player JS; optional user sign-in via AWS Cognito (Bearer attached on Cassie requests when session active) | Widevine | JSON API (corona.channel5.com) | My5 |
| STV | yes | yes | none (free) | Widevine (PSSH in MPD) | JSON API (player.api.stv.tv) | STV |
| Blaze TV | yes | yes | none | none | HTML scrape | Blaze |
| Sky News | yes | no | none (XFF spoof) | Widevine optional | — (single channel) | — |
Endpoint matrix
| Provider | Catalogue endpoint | Stream-resolve endpoint | License endpoint |
|---|---|---|---|
| BBC | bbc.co.uk/iplayer/categories/ (HTML) | open.live.bbc.co.uk/mediaselector/6/.../vpid/ | — (clear) |
| ITVX | www.itv.com/watch/categories/ (HTML, Next.js) | magni.itv.com/playlist/itvonline/ITV/ (live: simulcast.itv.com) | From playlist response's KeyServiceUrl |
| Channel 4 | channel4.com/categories/ | channel4.com/vod/stream/ (live: simulcast/channels/) | c4.eme.lp.aws.redbeemedia.com/.../acquire (Redbee, fixed) |
| My5 | corona.channel5.com/shows/search.json + seasons/episodes | cassie.channel5.com/api/v2/{media|live_media}/my5desktopng/ | From Cassie response's keyserver |
| STV | player.api.stv.tv/v1/programmes | player.api.stv.tv/v1/channels/ (live); Brightcove Playback API (VOD) | From Brightcove response's key_systems |
| Blaze | watch.blaze.tv/series (HTML) | watch.blaze.tv/streams/api/{replay|live}/stream/ | — (no DRM) |
| Sky News | — | Brightcove Playback API | From Brightcove response's key_systems |
User-Agent strategy
| Provider | UA | Reason |
|---|---|---|
| BBC | shared desktop Chrome (from get_ua()) | BBC doesn't sniff aggressively |
| ITVX catalog | Firefox 145 (hardcoded) | ITV sniffs and blocks the desktop-Chrome UA when there's a UA/JWT mismatch on session |
| ITVX playlist | Firefox 131 (hardcoded) | Tighter sniff at the auth-gated endpoint |
| Channel 4 | shared desktop Chrome | C4's web client uses different UAs for different endpoints (apple universal vs desktop); we mimic the desktop-website client |
| My5 | shared desktop Chrome | Cassie sniffs Roku/Android and rejects them |
| STV | shared desktop Chrome | STV doesn't sniff |
| Blaze | shared desktop Chrome + platform=chrome query param | Blaze explicitly checks the platform= param |
| Sky News | shared desktop Chrome | BrightcovePlayback doesn't sniff |
Genre coverage
| Genre | BBC | ITVX | C4 | My5 | STV | Blaze |
|---|---|---|---|---|---|---|
| Films | ✓ | ✓ | ✓ | ✓ | ✓ | — |
| Drama & Soaps | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Comedy | ✓ | ✓ | ✓ | — | ✗ (only comedy-drama sub) | — |
| Documentaries | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Sport | ✓ | ✓ | — | ✓ | — | — |
| News | ✓ | ✓ | — | — | ✓ | — |
| Entertainment | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Kids | — | ✓ | ✓ | ✓ (milkshake!) | — | — |
| Music | ✓ | — | — | — | — | — |
| Food | ✓ | — | — | — | ✓ | — |
| Lifestyle | ✓ | — | — | — | ✓ | — |
| History | ✓ | — | — | — | ✓ (history-hit) | ✓ |
| Science & Nature | ✓ | — | — | — | — | — |
| Arts | ✓ | — | — | — | — | — |
| Signed / BSL | ✓ | ✓ | — | — | — | — |
| True Crime | — | — | — | — | ✓ | ✓ |
| Scottish | — | — | — | — | ✓ | — |
Live channel matrix
The live channels the addon exposes (resources/lib/channels.py:
iter_all_channels() — BBC, CUTV, ITVX and the Freely expansion
lists):
| Provider | Live channels | Resolver |
|---|---|---|
| BBC | BBC One, BBC Two, BBC Three, BBC Four, CBBC, CBeebies, BBC News, BBC Parliament, Alba, BBC Scotland, S4C | bbc.resolve(channel_id) |
| Sky | Sky News | sky.resolve(listitem) |
| STV | STV, STV +1 | stv.resolve(item_id) |
| Channel 4 | Channel 4, E4, More4, Film4, 4seven | c4.resolve(item_id) |
| My5 | Channel 5, 5 Star, 5 USA, 5 Action, 5 Select | my5.resolve(item_id) |
| Blaze | Blaze | blaze.resolve(item_id) |
| ITVX | ITV1, ITV2, ITV3, ITV4, ITVBe, ITV Quiz (via inherited ITVBe simulcast slug) | itvx.resolve(channel) |
| HLS (direct) | Great! Movies, Great! Mystery, Great! Romance, True Crime, TBN UK, GB News, QVC family, Pop family, Now 70s/80s/Rock, Gems TV, Jewellery Maker, Hobby Maker | hls_url in PVR_CHANNEL_MAP |
Freely expansion: stubbed channels and why they don't play
The addon lists the full Freeview/Freely lineup (London NID 64865 +
Central Scotland NID 64993, selectable via the Freely region
setting). Channels without a free IP stream resolve through a stub resolver
that shows a “not implemented” popup. Nine more Freely channels were wired in Aug 2026 from clear Samsung TV Plus feeds:
5 Cops, LOVE AFTER LOCKUP, TRUE CRIME UK, EVIDENCE OF EVIL, BLOODLINE DETECTIVES,
AMC REALITY, CNN Headlines International, Ketchup TV and talkSPORT (radio). Later attempts added WildEarth (Roku), 5 Trucking Hell (Pluto) and France 24
(Samsung) — France 24's own public URL serves dead child manifests.
Direct-HLS channels send a browser User-Agent: Pluto's stitcher rejects any UA
containing Kodi with HTTP 403. Two further gotchas when testing:
jmp2.uk rate-limits bursts with transient 403s, and geo/promo slates look like
healthy streams — compare segment sizes across variants to spot them.
Stub-resolver channels render greyed-out ([COLOR gray]) in the addon grid
and PVR channel list. This is what was tried for
each blocked group:
| Channel(s) | Sources tried | Outcome |
|---|---|---|
| TLC, Quest, Quest Red LCN 17/18/34 | Samsung TV Plus GB list; Pluto UK; Roku; Plex UK; iptv-org streams DB | blocked WBD stated (Dec 2025) Freely is the only free streaming home for these six FTA linears. Freely's own feed is Widevine L3/Irdeto — same Pi DRM wall as ITVX audio. |
| Sky Arts, Sky Mix LCN 24/23 | Samsung TV Plus GB via jmp2.uk/stvp-GB60000197/-GBBD3100006XM — worked briefly | DRM-locked Samsung flipped both to HLS_CMAF_DRM: SAMPLE-AES-CTR Widevine licensed by BuyDRM KeyOS. Clear HLS_CMAF rendition returns HTTP 400. Playing needs Samsung device-auth emulation to mint KeyOS licences per session — not maintainable. |
| Great! TV, Great! Action LCN 32/33 stubbed v1.2.0 | Amagi playout probe (612 host/slug combinations across LG/Samsung/Rakuten); community telecloud.tv relay behind GitHub master playlist; Plex UK | no source Amagi hosts the Movies/Mystery/Romance sisters but no greattv/greataction slugs exist. The relay's child manifests return “No segments” (playback token isn't propagated to inner requests). Plex UK carries the sisters clear but not these two. |
| Pop Max LCN 208 stubbed v1.2.0 | Community feed 45.153.35.210:8000/play/UK_pop_max_sd; iptv-org; Plex UK | channel closed Pop Max ceased broadcast Apr 2025; briefly returned as FAST on Freeview then closed again. No free simulcast exists. |
| Talking Pictures TV LCN 36 stubbed v1.2.0 | Community feed 92.114.85.72:8000/play/a0la; iptv-org; Plex UK | feed 403 Shared community relay host now returns HTTP 403 for all UAs. No alternative free IP stream found. |
| Together TV LCN 52 stubbed v1.2.0 | Community feed 92.114.85.72:8000/play/a0j8; iptv-org; Plex UK | feed 403 Same relay host as Talking Pictures TV, blocking all UK IPs. |
| Challenge LCN 43 | Samsung TV Plus GB (jmp2.uk/stvp-GBBD3100005RX) | DRM-locked BuyDRM KeyOS Widevine, same as Sky Arts/Mix. |
| London TV LCN 8 | uklocal.tv / londonlive.co.uk page scrape; old Akamai live endpoint; iptv-org | no source Player config is AJAX-gated (JW Player WordPress plugin), no media id in static HTML. Akamai endpoint died with the Jan 2025 London Live → London TV rebrand. |
| That's TV, That's TV 2 LCN 9/45 | Community feed 92.114.85.72:8000/play/a0lb; Pluto/Rakuten/LG FAST listings | no source Community feed now returns 403 from UK IPs. Only the music spin-offs moved to FAST platforms (Feb 2026); main channels remain aerial-only on Freely. |
| All remaining stubs (minor FAST + radio) | Samsung TV Plus GB, Pluto UK, Roku, Plex UK, iptv-org cross-reference | no source No free unencrypted simulcasts identified. Radio has none outside BBC Sounds (login-gated). |
Pluto TV direct integration (pluto resolver)
Pluto's Feb 2026 API migration killed the old anonymous stitcher URLs — they now serve a logo slate for some device profiles. The working flow mirrors Pluto's own web player:
GET https://boot.pluto.tv/v4/start?appName=web&deviceType=web&deviceMake=chrome&...— JSON reply containssessionToken, valid ~24h (EasyPlayTV caches 12h in the addon profile)GET https://cfd-v4-service-channel-stitcher-use1-1.prd.pluto.tv/v2/stitch/hls/channel/{ID}/master.m3u8?includeExtendedEvents=true&masterJWTPassthrough=true&jwt={token}- Clear HLS; play with a browser User-Agent
Channels carry a pluto_id field and use the
pluto resolver. 13 channels ride it: That's 60s/70s, QVC2,
EuroNews, Nosey, 5 Cops, LOVE AFTER LOCKUP, TRUE CRIME UK, EVIDENCE OF EVIL,
BLOODLINE DETECTIVES, AMC REALITY, CNN Headlines, 5 Trucking Hell.
WATCH FREE UK live streams (Simplestream recipe)
The Social Communications channels stream free via the WATCH FREE UK Simplestream player. Extraction flow:
GET watchfreeuk.co.uk/live— scrapedata-token/-expiry/-userid/-key/-id/-uvid(fresh token per page load; uvids: 1312=True Crime, 1313=Evidence of Evil, 1314=Bloodline Detectives)GET mm-v2.simplestream.com/ssmp/api.php?id={id}&env=production—response.api_hostnameGET {api_hostname}/streams/api/live/stream/{uvid}?key=..&cc=GB&platform=chrome&url=..&gdpr=1with headersToken/Token-Expiry/Userid— JSONresponse.stream= clear HLS master
Gotchas: platform=chrome is required
(web → "Invalid Platform"); legacy v1 path shape applies
unless api_hostname contains "api". Currently unused by the addon (Pluto
covers these channels) but documented as a fallback.
Alternate source registry
Verified sources kept on file for future wiring attempts:
| Source | Coverage | Notes |
|---|---|---|
| i.mjh.nz SamsungTVPlus gb.xml + BuddyChewChew generated M3U | Samsung TV Plus GB, 263 channels | Streams proxied as jmp2.uk/stvp-<id>; regenerated daily. Channels with a license_url in mjh's .channels.json.gz are DRM-locked (Sky Arts/Mix are now in this set). |
| i.mjh.nz Plex gb.xml | Plex UK FAST, 362 channels | Carries Great! Movies/Mystery/Romance clear — fallback if the Amagi URLs die; candidate pool for filling other stubs. |
iptv-org API (streams.json, channels.json) | Community index, all platforms | Cross-reference by channel id; many entries stale — always test before wiring. |
| Amagi playout URL pattern | Narrative and other FAST broadcasters | amgXXXXX-narrativeuk-amgXXXXXc{N}-{platform}-gb-{id}.playouts.now.amagi.tv/playlist/amgXXXXX-narrativeuk-{slug}-{lggb|samsunggb|rakutengb}/playlist.m3u8. Host+slug pairing is exact; wrong combos answer HEAD 200 with error bodies — always GET and check for #EXTM3U. |
| ITVX simulcast endpoint | All ITV linear channels incl. ITV Quiz | https://simulcast.itv.com/playlist/itvonline/{SLUG}; slugs upper-case, Quiz rides the retired ITVBe slot (mapped in itvx.py CHANNEL_SLUGS). Requires ITVX sign-in; Widevine L3 only. |