NH Nieuws had no EPG id, so players cannot match it to guide data.
NH.nl is the channel id used by iptv-org and by epgshare01
(epg_ripper_NL1.xml.gz, listed in epglist.txt). Only the EPG column in lists/netherlands.md changes; the stream URL is untouched.
Side note: several other Dutch ids don't match epgshare01, e.g.
RTVOost.nl vs Oost.nl, OmroepWestTV.nl vs RTV.West.nl and
L1TV.nl vs L1.TV.nl. The Italian list already uses epgshare01 ids.
Would you welcome a follow-up PR aligning the Dutch ids the same way?
FEM3 and Viasat 6 (Hungary) were dead on 88.212.15.19; found alive on
the sibling IP 88.212.15.17 (same path/stream names) via iptv-org's
public aggregator, closes the last remaining gap from #1223/#1228.
Antena 3 CNN (Romania) via antenaplay.ro's free CDN endpoint, closes
the Antena 3 part of #1177 (confirmed live, non-tokened, no session
auth needed - unlike the URL in that issue which does expire).
Added Sports Television (DPR Korea) via koryocdn.org, closes#1202.
Note: this channel only broadcasts Sat/Sun 18:00-22:00 KST, so it will
correctly show as unreachable/dead outside those hours - documented
in the channel name.
All three sources found via iptv-org/iptv's public aggregator
(iptv-org.github.io/iptv/countries/*.m3u), not hand-guessed.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Confirmed live on the same 141.94.193.53 mirror used for M1/M2/M5/Duna/
RTL/TV2/ATV/TV4/Cool/Film+: Spektrum, Spektrum Home, Galaxy4, Sport1,
Sport2, Izaura TV, Film4, Mozi+, AMC, TV Paprika. Fixed M4 Sport with
the same mirror (old connectmedia.hu URL was dead).
DTV is finally live again via cloudfront44.lexanetwork.com relay002
(closes the long-standing gap from #1223/#1228 - FEM3 and Viasat 6
still have no working source and remain in Invalid).
Spektrum Home and Izaura TV were actually fixed once already in a
follow-up commit on the #1244 branch, but that commit landed after
the PR had already been merged, so it never reached master - this
restores that work with fresh URLs.
Replaced the Euronews Hungarian YouTube embed with euronews's own
direct HLS feed (more stable, confirmed live).
Added a new Radio section with 11 Hungarian radio stations from
#1248 (Kossuth, Petőfi, Bartók, Dankó, Rádió1, Retró, Jazzy FM,
Youventus, Hír FM, Spirit FM, Sláger FM), replacing the old YouTube
Radio 1 entry in Music with the direct stream in the new section.
All 66 Hungary entries confirmed alive via check_channels.py.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
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.
Same 141.94.193.53 host as the M1/M2/M5/Duna/RTL/TV2/ATV fixes in this
branch, per #1228. Re-tested all three live just now. TV4 is a genuine
free-to-air DVB-T2 channel; Cool and Film+ are RTL Group's
subscription-tier channels in official distribution, included here
since this mirror serves them without auth (same basis other
already-listed subscription channels in this repo are included on).
Re-tested every URL below just now (curl + real HLS manifest body check)
before restoring, per issue #1226's finding that some Invalid rows have
working streams again:
- Italy: K2, Frisbee, Canale 58 — live again (closes#1205)
- Lebanon: ALWifak News TV, Arabica TV — live again
- Hungary: Hír TV — old onlinestream.live link now serves a player error;
replaced with the working videa.hu relay
- Hungary: M1, M2/Petőfi TV, M5, Duna TV, RTL Klub, TV2, ATV — old
88.212.15.19 links are dead; replaced with the 141.94.193.53 mirror
URLs reported working in #1228 (verified live here too), moved back
out of Invalid
Regenerated playlist.m3u8 and the per-country playlists via
make_playlist.py.
Sources the repo's own check_channels.py (--attempts 4, ffprobe-class
rigor) confirms alive repeatedly, not single-probe guesses:
Japan (#1184) - 5 of 7 terrestrial channels moved from the dead-or-
flaky naori-test.netgenx.site relay to mov3.co mirrors (already the
same provider used for iptv-org/iptv's jp.m3u):
- NHK総合 -> nhk4.mov3.co, テレビ朝日 -> tvasahi.mov3.co,
TBSテレビ -> tbs5.mov3.co, テレビ東京 -> tvtokyo.mov3.co,
フジテレビ -> fujitv4.mov3.co
No public mirror found for NHK Eテレ or 日本テレビ (日テレ) - left on
naori-test, which is flaky rather than confirmed dead so not worth
downgrading to [x] either.
Slovakia (#1153) - 5 of 20 channels moved off the dead-or-flaky
sktv.mxnticek.eu relay:
- Markíza, Klasik -> cdnsk003.panaccess.com (STVR's own CDN, also
serving the already-working MTR.sk entry in iptv-org/iptv's sk.m3u)
- Jednotka, Dvojka -> 88.212.15.19 test streams (from iptv-org/iptv)
- NR SR -> n11.stv.livebox.sk (STVR's own parliament feed)
STVR :24 and Šport have a candidate on 88.212.15.27, but it timed out
repeatedly under check_channels.py despite answering a lone curl, so
it's left unreplaced rather than swapped for an equally unreliable
source. Markíza's JOJ-group siblings (JOJ, Wau, Dajto, Krimi, Doma,
TA3, ...) have no public mirror found - these are commercial
broadcasters whose only known source remains the flaky mxnticek relay.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HnjzQpjtzZkVgRJGZipm44
stream01.willfonk.com has zero "alive" results across 1000+ checks in
the checker history over the last 8 days, and my own multi-attempt
probe (check_channels.py --confirm-dead) confirms it's consistently
unreachable. Part of #1184.
naori-test.netgenx.site and sktv.mxnticek.eu (also reported in #1184
and #1153) are left untouched: the checker history shows both still
returning "alive"/"flaky" results within the last 3 days, so per
check_channels.py's own guidance they're unreliable/geo-sensitive
rather than confirmed dead, and shouldn't be blanket-marked invalid
on a single failed probe.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HnjzQpjtzZkVgRJGZipm44
- Restore TSN Tele Sondrio News (LCN 85, Lombardia) to Regional DVB-T with active Akamai 720p stream
- Upgrade Rtp Tv stream protocol to HTTPS (flash2.xdevel.com)
- Add 29 verified regional DVB-T channels and visual radios in alphabetical order:
* Regional DVB-T: AM Terni Television, Tele Golfo RTG, Tele Granducato, Tele Lacco Ameno, Tele Laser, Tele Ritmo, Tele Stabia / Gigli TV, TGS Telegiornale di Sicilia, TRG Media, TRSP Tele Radio San Pietro
* Visual Radios & Local TVs: Bella e Monella TV, Enjoy Television, Radio Arancia TV, Radio Bianconera TV, Radio Delta 1 TV, Radio Digiesse TV, Radio Iglesias Visual Radio, Radio Juke Box TV, Radio Kiss Kiss Italia TV, Radio Kiss Kiss Napoli TV, Radio Napoli Emme, Radio Number One TV, Radio Padova TV, Radio Punto Zero TV, Radio Ritmo 80 TV, Radio Studio TV, Radio Taormina TV, Radio Televisione Sarda, Radio Tivù Azzurra, RTN Napoli
- All streams verified active on official CDNs (1080p/720p) with on-screen logos
- Only lists/italy.md modified
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 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
CCTV-15 音乐 had no URL. Found it on the same aggregator IP
(74.91.26.218:82) already used successfully for every other CCTV-1
through CCTV-17 entry in this file - just needed the matching
cctv15hd path. Verified alive via check_channels.py (3/3 ok), real
HLS content with sequential live .ts segments.
Researched but left unchanged (no viable replacement found):
- China: FZTV-2 (sibling IDs on the same host work, this one 404s;
no alternate ID discoverable without brute-forcing); CCTV-5, CCTV-5+,
CETV-1 through 4 (Invalid section) - the same aggregator serves
geo-block placeholders or "no server configured" errors for these,
not real streams.
- Israel: Channel 12, Makan 33 - confirmed geo-blocked to Israel by
the broadcaster's own API response, not fixable from outside.
- Azerbaijan: Topaz 2 - no discoverable public web presence, likely
defunct. CBC Sport, İctimai TV newly found dead, no replacement.
- United Arab Emirates: Fujairah TV has a real official stream, but
it's a signed URL that expires the same day - not usable as a
static entry. MBC 2/Action/Max, Al Aan TV, Baynounah TV, Abu Dhabi
Sports 1/2 newly found dead, no replacement. Notably, Abu Dhabi TV,
National Geographic Abu Dhabi, Dubai TV, Dubai One, Dubai Sports
1-3, Dubai Racing 1-3, Dubai Zaman, Sama Dubai, and Noor Dubai (12
channels) all point to CDN subdomains that no longer resolve at all
(confirmed NXDOMAIN) - both Abu Dhabi Media and Dubai Media Inc.
appear to have discontinued free public live streaming entirely
(Abu Dhabi Media moved behind the paid StarzPlay platform, Dubai
Media Inc's rebuilt site has no live section) - a wholesale
infrastructure change worth flagging to maintainers rather than 12
isolated link rots, but not something a replacement URL can fix.
- Somalia: Codka Bariga Afrika, Dacwa TV, Puntland TV - no
discoverable public stream. Somali Cable TV and SBC Somalia have
official YouTube channels, but neither was live at verification
time.
Regenerated playlist.m3u8 and playlists/playlist_china.m3u8 via
make_playlist.py.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
Malta:
- Smash TV: a3.smashmalta.com no longer resolves. Found the current
stream on the station's own official homepage embed. Verified alive
via check_channels.py (3/3 ok), real HLS media playlist with .ts
segments.
North Korea:
- Ryongnamsan TV: had no URL. Found it on the same reputable
koryofront.org aggregator already used successfully for this file's
existing KCTV entry - it explicitly lists a Ryongnamsan TV stream at
a sibling path. Verified alive via check_channels.py (3/3 ok), real
HLS media playlist with live PROGRAM-DATE-TIME tags.
Researched but left unchanged (no durable fix available):
- Malta: TVM2 and NET TV have real official live streams, but both
require session-bound/time-limited signed tokens (a JWT tied to the
requester's IP with a ~24h expiry, and a 12h start/end token window
respectively) - not usable as a static playlist entry. F Living: no
official web presence found.
- North Korea: Mansudae TV - not offered by the koryofront.org
aggregator or any other source found.
- Taiwan: CTV Classic, CTV Bravo - official site has no live player,
only a program schedule.
- Poland: 4fun Dance - official live player is a third-party embed
with no discoverable static stream URL.
- Latvia: TV24 - official site has no live/tiešraide page, only a
VOD archive.
Regenerated playlist.m3u8 and the per-country playlists via
make_playlist.py.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU
- SBS, SBS Viceland, SBS World Movies, SBS Food, NITV: had no URL at
all. Found the correct current channel keys behind the i.mjh.nz
redirector already used successfully by other entries in this file
(Seven, Nine, 7two, etc). The redirector mints a fresh token and
forwards to SBS's real Akamai edge, which explicitly declines
non-Australian requests (X-Error-Reason: geo-blocked) - real,
correctly-functioning access control, not a broken link - so marked
Ⓖ like the file's other geo-blocked entries (9Gem, 9Go!, etc).
- 9Gem, 9Go!, 9Life, 9Rush: the old direct 9now-livestreams.akamaized.net
URLs now 400 (stale signed paths). Replaced with the same i.mjh.nz
redirector mechanism, which mints a fresh token per request instead
of embedding a static one. Verified alive via check_channels.py
(3/3 ok), real HLS master + variant playlists.
- C31 Melbourne: had no URL. The station now operates under the CTV
Plus community-TV platform after a 2016 licensing change; found its
current CloudFront-backed stream via ctvplus.org.au. Verified alive
via check_channels.py (3/3 ok), real HLS content with live segments.
Researched but left unchanged (no viable replacement found):
- Spree TV, M4TV: official domains parked or unresolvable, stations
appear defunct.
- 10 Shake, Racing.com: newly found dead (stale CDN paths), but their
official platforms are JS SPAs with no static stream discoverable.
Regenerated playlist.m3u8 and playlists/playlist_australia.m3u8 via
make_playlist.py.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Enus8N247jHM5r5Som5JuU