mediapolis.rai.it's relinker service is now Italy-IP-gated: with
forceUserAgent it 302s to a "video not available" placeholder MP4
(the "raw binary" symptom this repo's checker was seeing), without it
Akamai returns a plain 403. RAI's own official pages (raiplay.it) still
embed the same dead relinker pattern, and no working parameter/domain
variant was found - this isn't a broken link, it's a geo-restriction
that happens to also break for the CI runner's non-Italian IP.
Found a third-party CDN mirror (d3k8wzt41aflvx.cloudfront.net) already
re-serving RAI's linear feeds unrestricted, in the same vein as the
existing Rai4K/UniNettuno akamaized.net mirrors already in this list.
Verified each with curl (multi-quality master playlist, real segment
references) and with check_channels.py (3x each): Rai 2/3/Premium/
Storia/Scuola came back consistently alive, Rai 1 flaky (2/3 ok, real
content each time) - consistent with general CDN flakiness elsewhere
in this list, not a sign the URL is wrong.
Dropped the Ⓖ marker on these 6 since the mirror isn't geo-blocked.
Rai 4, Rai 5, Rai Movie, Rai Gulp, Rai YoYo, Rai Sport, and Rai Radio 2
Visual Radio are not on this mirror and were left unchanged (still
pointing at the geo-gated relinker, since that's genuinely the current
official source and may still work for viewers with an Italian IP).
Both use the same lexanetwork.com infrastructure as FehérvárTV (#1163)
and Kapos TV (#1164). Found via each station's own official live page
(estv.hu homepage, komaromtv.hu/online-adas/), which embeds a player
resolving to a working relay URL. Verified 4x each, consistently alive.
Also searched ~45 other Hungarian local TV stations for lexanetwork.com
usage - none of the others use it (mostly WordPress/YouTube embeds, or
the station's own site is dead), so no further additions from this pass.
Was marked [x] (dead relay01/livestream004.sdp on cloudfront63). Found
the current URL the same way as FehérvárTV (#1163): the official site's
"Élő adás" page embeds an iframe at cloudfront63.lexanetwork.com/itplayer/
LIVE016_inc.php, which resolves to a real master playlist (bitrate/
resolution/codec info + segment reference) on a different host/path -
relay01/broadcast004.sdp on cloudfront44. Verified 4x, consistently alive.
Also checked the site's other dead ([x]) lexanetwork.com entries this
same way: AlföldTV's domain now redirects to a news portal with no live
player, Zugló TV's and Bajai TV's sites don't resolve/load at all, and
Lóverseny közvetítés is an event-only feed (found a newer loverseny3.sdp
path via the same method, but it's only live during actual races, so
nothing to verify against right now). None of those looked fixable.
The old URL (freerelay/fehervartv.sdp) answered HTTP 200 with a
technically-valid HLS header but nothing else - no #EXT-X-STREAM-INF,
no segment reference, just two lines. That passes a header-only check
(and did - the current checker reports it "alive") while being
unplayable in any real player, since there's nothing to play.
Found the working URL by fetching the official player embed at
https://www.fehervartv.hu/elo_adas (an iframe pointing at the same
lexanetwork.com host, but a different relay path - relay44_1/HDE046.sdp
- that does return a real master playlist with bitrate/resolution/codec
info and a segment reference). Verified 4x, consistently alive.
Follow-up to #1156. That PR found working cids (01, 08, 12 - the range
was 02-07,10,11 before) for channels previously marked [NO PUBLIC
STREAM], which is valuable, but it also reassigned the cid of every
already-known-working channel (NHK BS, BS日テレ, BS朝日, BS-TBS,
BSテレ東, BSフジ) to its neighbor's old value - a clean cyclic shift
across exactly six channels, which is what a list/list zip misaligned
by one produces, not what channel-by-channel verification produces.
Neither the old nor the new mapping carries any content-level proof
(the streams have no identifying metadata), so there's no way to tell
which is right - only that the shift itself isn't evidence of anything.
This takes only the part that's unambiguous: three cids nobody had
before, given to the three channels that had nothing. bs07 was one of
the "new" ones in #1156, but it's already BS10スターチャンネル's cid,
so WOWOWシネマ gets bs08 instead - the only other free value.
Verified each new cid resists a single flaky read (checked 4x): bs01
and bs12 came back flaky (3/4 ok) but real, bs08 came back alive (4/4).
That's consistent with how naori-test.netgenx.site behaves generally
(see check_channels.py's docstring), not a sign these three are wrong.
Replaces iptv-checker (npm + ffmpeg) with check_channels.py:
- Checks every channel in a list a PR touches, existing and new, not just
the added/changed rows - a PR editing italy.md now surfaces already-dead
channels in italy.md too, not only the one line it changed.
- Uses check_channels.py's dead/blocked/unreachable/flaky states instead
of a binary online/failed, so the summary no longer needs the "some of
these failures are geo-blocks, use your judgment" disclaimer without
telling reviewers which failures those are - blocked channels are now
named as such.
- Summary separates what the PR actually added/changed from what was
already broken in the same file, so a reviewer isn't left guessing
whether a failure is theirs to fix.
- No ffprobe pass here (kept fast for a PR gate) - anything this flags as
dead gets a second opinion from the scheduled Channel check (deep)
workflow before anyone acts on it.
Verified end to end against a simulated PR diff.
The first scheduled run of #1157's workflows failed outright: a server
started a chunked HTTP response and then hung up mid-chunk, which
urllib surfaces as http.client.IncompleteRead - a subclass of
http.client.HTTPException, not of OSError/URLError/ValueError, so
probe()'s except clause let it propagate and took the whole run down
before it wrote anything to --json, including check_channels_fast.yml's
run.jsonl.
Catch http.client.HTTPException alongside the existing exceptions and
treat it as unreachable, same as any other broken connection. Verified
against the exact exception (mocked) and against the live lists.
Builds on the idea in #1145 (a checker that maps failures back to a channel
and list, and tells a geo-blocked channel from a dead one) with a few
additions:
check_channels.py
- Standard library only, same as #1145's version.
- Adds a `disputed` state: an optional --confirm-dead pass gives ffprobe a
second opinion on anything that looks dead over HTTP, before it gets
reported as dead. This is one-directional (can only pull a verdict out
of `dead`, never push one into it) because ffprobe itself is not
reliable enough to trust in the other direction - a known-good DASH
channel needed longer than any sane per-channel budget to open while
testing this, and a header check alone had already been fooled by an
isolated media fragment sitting at a URL that looked like a live channel
(a mistake made and caught while triaging #1149/#1151 - see the
docstring for the details).
- Restructured to share one worker pool across every list in a run
instead of a fresh pool per list, which stopped small lists from paying
the same wall-clock floor as large ones; a full run across all lists
dropped from not finishing in 15 minutes to about 10.
- --json writes one record per channel per run, for building a history.
generate_dashboard.py
- Turns that history into a single self-contained docs/index.html: current
state breakdown, an alive-share trend across every run kept, a per-list
breakdown, and a searchable/filterable table of everything that is not
currently alive.
Two new scheduled workflows
- check_channels_fast.yml: every 6 hours, HTTP checks only.
- check_channels_deep.yml: every 2 days, with --confirm-dead (needs ffmpeg).
Both append to .github/checker-history/history.jsonl (pruned to 90 days),
then build and deploy the dashboard to GitHub Pages.
Corrects a mistake in the previous PR (#1151): the URL answers with
HTTP 200 and binary data, but that payload is a raw MP4 fragment
(ftyp/moov boxes), not an HLS or DASH playlist a player can open.
No working replacement was found, so removing it rather than
mis-marking it as fixed.
Follow-up to #1144.
- ERT World was renamed to ERT Cosmos. Added back under the new name,
pointed at the same ERT CDN host used by the other ERT channels
(verified HTTP 200 with a valid DASH manifest).
- Star Central Greece was returning 404 when #1144 was tested (Aug 26)
but is back up now - verified 3x with a real MP4/DASH payload, not
an error page. Restored with its original link.
Added to the existing Rチャンネル/Rakuten section: NTV News (日テレNEWS),
FNN Prime Online (FNNプライムオンライン), and MBS News (MBSニュース),
via Rakuten's official Amagi CDN (cdn-apne1/cdn-uw2-prod.tsv2.amagi.tv),
same source already used for the existing Tokyo MX channel.
Verified HTTP 200 for all three, not geo-blocked.
Sourced current logos for Space TV, Səhiyyə TV, ATV, MTV Azerbaijan,
5Star, Pixel TV and Virgin Media Four from iptv-org's public logo
database (imgur-hosted, cross-referenced against their channel list)
and verified each one visually before swapping it in.
Found current Commons/Wikipedia file names for logos whose old files
were renamed or superseded (TF1, 6ter, RMC Découverte, Chérie 25,
TVP1-3, İctimai TV, CStar, UTV, MBC, UBC TV, Chamber TV, Venevisión,
Sky News Australia, KVF Sjónvarp, Telenorba, ReTV), reused an
already-working duplicate row for NRJ 12 and TaiwanPlus, and verified
every replacement resolves and shows the right logo.
ITV2, ITV3, and Challenge logos were pointing at Wikimedia files that
no longer exist; restored the imgur-hosted logos these rows used
before they were switched over.
Wikimedia now rejects direct thumbnail requests for widths outside the
fixed set 20/40/60/120/250/330/500/960/1280/1920/3840px. Rounded all
remaining off-size occurrences to the nearest allowed width.
Wikimedia only serves fixed thumbnail widths (20/40/60/120/250/330/
500/960/1280/1920/3840px); 640px returns a 400 error. Switched all
occurrences to the nearest allowed size, 500px.
Fixes#1135
Chile: fix broken NTV link (403), keep existing working T13/Mega links.
Argentina: fix broken El Trece/El Nueve links, switch Canal 26 and
América to direct streams, rename IP Noticias to Argentina/12
(channel rebranded 2025-11-12, Grupo Octubre).
Cherry-picked from #1139 and #1138.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Issue #483: these circled-letter suffixes are in-list markers for
human readers (subscription-required, geo-blocked, YouTube-sourced,
etc.), but were leaking into the generated tvg-name verbatim (e.g.
tvg-name="Rai 1 Ⓖ"), breaking EPG matching for any provider keying
off channel name. Now stripped from tvg-name only; the display name
after the comma still shows the marker as before.
Issue #427: the 4ce5e2d62ee2c10e43c709f9b87c44d5.streamhost.cc CDN used
by 9 Belgian channels is only partially alive - Tipik still works, but
RTL-Be, La Une, Club RTL, La Trois, Plug RTL, Canvas, VTM, VIER and VIJF
all 404. Marked those invalid. EEN, LN24, RTS Un and RSI (raw-IP hosts)
time out at the connection level rather than returning an HTTP error -
left as-is since that could be a Belgium/Switzerland-only block rather
than genuinely dead, and can't be told apart from here.
Switzerland: TVO's Kaltura URL now 404s, marked invalid.
Issue #409: ye23.vip (used by KBS 2TV, KBS News D, KBS Drama, KBS Joy,
KBS Kids, KBS Life, KBS Story, KBS World - 8 channels) is DNS-sinkholed,
resolving to 127.0.0.1 - the domain's been taken down. MBC TV's URL
404s. KBS 1TV, EBS (all variants), SBS TV, Arirang, CJB/JIBS/OBS TV are
confirmed working. KNN/KBC/TJB/UBC/JTV TV time out at the TCP level -
could be genuinely dead or Korea-only firewalled, left as-is since that
can't be told apart from here.
Fixed NHK World Japan, TRT World and Bloomberg TV with working sources.
Sky News was missing its Ⓖ marker (403 is the expected UK-only
geo-block, not dead). Moved 22 channels with no working replacement
found (Channel 4, E4, Film4, 4Music, 4seven, Arise News, BBC World
News, Create & Craft, GemsTV, Hobby Maker, Jewellery Maker, Kerrang!,
KISS, Magic, PBS America, TalkTV, The Box, EarthXTV, TJC, SportyStuff
TV, France 24, Ideal World) to Invalid. Partial progress on #703.
Issue #680 asked for several country-music channels; only Stryk TV's
stream URL (from the site's page source) actually resolves to a live
HLS feed. ACN, Stars Over Texas and The Country Network don't expose
a direct stream link on their sites.
The 212.79.122.11:5014 UDP-relay server (1+1 Ukraina, Inter, 2+2, M1,
Mega, K1, Enter-Film, TET, ДІМ) refuses connections now. Fixed 9
channels with working sources (mostly stream.mcquack.net / antik.sk).
6 more on the same dead server (Bigudi, Novyi Kanal, ПлюсПлюс,
Ми — Україна, Оце ТБ, Піксель TV) had no replacement found - marked
Invalid. Also fixed/cleaned up entries on a separate dead
nashnet.tv/ott.blue/tvstitch.com cluster. Partial progress on #986.
Spain: Televisión Melilla's domain no longer resolves, marked
Invalid (#1012 - no working replacement found for it or Rioja TV).
- Telenorba was added via YouTube live (issue #1015 asked for the
play.telenorba.it site). That site is a JS SPA; traced its player
bundle to play.norbaonline.it, which resolves to the same
live-telenorba.cdn.netrw.it CDN already used by Antenna Sicilia.
Swapped in the direct HLS master playlist.
- Added TG Norba 24 as a separate channel (same CDN, different path),
with its Wikimedia Commons logo.
- Antenna Sud / Antenna Sud Extra (live.antennasudwebtv.it:9443) now
time out; replaced with working URLs from the sibling
live-antennasud.cdn.netrw.it CDN.
Issues #865, #1036, #1064: Japanese TV list (~80 channels) was dependent on
single private willfonk.com token now blocking external requests.
Solution: Replace with naori-test.netgenx.site community relay providing:
- All 8 terrestrial channels (NHK, Nippon TV, TBS, TV Asahi, TV Tokyo, Fuji TV)
- All 6 major BS satellite channels
- Working HTTP 200 verified links
- Community-maintained but reliable fallback (mov3.co mirrors available)
Marked premium/subscription channels (WOWOW, J-SPORTS, Animax) as [NO PUBLIC STREAM]
- New lists/turkmenistan.md: all 8 national channels from issue #1023,
verified working.
- Italy: added Telenorba (Puglia regional) via its YouTube live
channel, the given URL was an HTML embed page not a stream. #1015
- France: added Handicap TV, verified working. #1049
- North Macedonia: the MRT public broadcaster channels use Windows
Media auth tokens with validminutes=30 baked into the URL - they
expire 30 minutes after being generated regardless of viewer
location, so no static URL can fix them. Moved 10 other dead
channels (timeout/404, no replacement found) to Invalid. #1025
CBC Toronto and TVA had dead URLs; replaced with current akamaized.net
sources (both now correctly geo-blocked to Canada, matching the Ⓖ
convention, instead of dead for everyone). Citytv, CTV Toronto, Global
Toronto/Calgary/Edmonton, TVO, ONNtv Ontario, Star TV, CTV News and 7
of the Global News regional feeds are dead with no replacement found -
marked [x] in place rather than left as fake-working entries.
Partial progress on #812.
- Turkey: TRT Belgesel's URL was dead, applied the new -dai path from
issue #810.
- Spain: the 185.189.225.150:85 server (Antena 3, Cuatro, Telecinco,
La Sexta, Neox, Nova, Mega, FDF, Boing, and a duplicate TV3 entry)
is entirely dead. Fixed Paramount Network via a working Pluto TV
source; moved the rest to Invalid since no replacement was found.
The TV3 entry was a pure duplicate of the already-working TV3Cat
entry, no loss removing it. Fixes#746, #749 (partially - Mediaset/
Atresmedia channels still need real replacements).
- Netherlands: NPO 1/2/3 have been dead since 2022 per #879, with no
replacement found anywhere; marked [x] with no URL, matching how
RTL 4/5/7/8 are already handled in the same file. Fixes#879.
- Norway: NRK1/2/3/Super's old akamaized path returned "Invalid URL"
for everyone; replaced with the current path (now correctly
geo-blocked instead of broken for everyone). Kanal 10 Norge's CDN
is dead, switched to its YouTube channel. TV 2 Sport 1 and TV 2
Nyheter are dead with no free source found (TV 2 Sport appears to
require a paid TV 2 Play subscription now) - moved to Invalid.
Fixes#1113.
- Portugal: SIC's cloudfront URL was dead, replaced with a working
okast.tv source. Fixes#1109.
- Venezuela: "Venezolana de Televisión" pointed at a Dailymotion embed
page instead of a stream URL, which explains why it showed
unrelated content - moved to Invalid, no working replacement found
yet. Fixes#969.
The whole tvkaista.net stream-forwarder service (11 channels used it)
now returns 502 for every request - dead service, not a per-channel
issue. The 109.205.166.68/server124 CDN (4 channels) returns 403 for
everything. Found working replacements for 5 channels via current
sources; the rest share one of those two dead providers with nothing
found to replace them, moved to Invalid. AzStarTV was already working,
CBC Sport's 403 is the same expected Ⓖ geo-block iptv-org's own list
shows for the identical URL.
This completes the sweep through the "genuinely broken, not a
geoblocking artifact" country group (Somalia, Macau, Peru, Kosovo,
Armenia, Paraguay, San Marino, Monaco, Denmark, Cyprus, Moldova,
Romania, Azerbaijan).
- Romania: all TVR channels (1/2/3, Info, International, Cluj, Craiova,
Timișoara, Târgu-Mureș) used a dead mn-nl.mncdn.com path; found the
provider's current tvr-*.lg.mncdn.com pattern and verified each one.
TVR Iași and Telestar1 also had dead URLs, replaced. Prima TV: no
working source found, moved to Invalid. Pro TV and România TV were
already fine (the România TV 403 is the existing Ⓖ geo-block working
as intended, not a broken link).
- Denmark: DR1/DR2/DR Ramasjang's 403s are the same expected Ⓖ
geo-block, left as-is; Folketinget TV already works. All 7 TV 2
regional stations use dead Kaltura-tokenized URLs and/or domains
that no longer resolve, and their current sites block non-browser
requests (406) so no replacement could be extracted; TV Storbyen,
Kanal Hovedstaden and KKRtv are also dead with no fix found - moved
all 10 to Invalid.
- Cyprus: RIK 1/2/HD's cloudskep.com raw-TS URLs were 404; found a
working UDP-to-HTTP multicast proxy source and verified with real
binary TS data. Ada TV's sc-kuzeykibrissmarttv.ercdn.net domain no
longer resolves; found a working alternate CDN. BRT 1/2, Kıbrıs Genç
TV, Kanal T, Kıbrıs TV, TV 2020 share that same dead domain with no
replacement found - moved to Invalid.
- Moldova: Moldova 1/2 and TVR Moldova had dead URLs, replaced with
current sources (trm.md's own CDN, mncdn.com). Publika TV, Canal 2,
Canal 3 and Prime are all part of the same media group whose
broadcast license was suspended by Moldovan authorities in October
2023 - these aren't broken links, the channels are discontinued.
Vocea Basarabiei and Balti TV are also dead with no fix found.
Moved all to Invalid.
- Peru: Panamericana TV, ATV+ Noticias, Karibeña TV had dead CDN URLs
(host resolution failures / 404s), replaced with working sources.
Top Latino TV: no replacement found, moved to Invalid.
- Somalia: MM Somali TV's CDN URL was a 404, switched to its official
YouTube channel (768k subs, verified). The other 7 channels share
the same ap02.iqplay.tv / mediavisionuae.com infrastructure, which
is currently unreachable (connection timeouts) - but iptv-org's own
community list uses the exact same URLs right now too, so this
looks like a provider-side outage rather than dead/wrong links.
Left unchanged rather than moving working entries to Invalid on a
possibly-temporary outage.
- Macau: all 6 TDM channels' CDN (live4.tdm.com.mo) no longer
resolves. TDM's site is now a heavy Vue SPA with no stream URL in
the static HTML or common API guesses - moved to Invalid.
Replace with official/Wikimedia logos:
- Spektrum Home: Wikimedia Commons official
- DikhTv: Wikimedia Commons official
- Euronews Hungarian: Wikimedia Commons 2016 logo
- CityTV: Official website logo
Part of a broader link-health sweep across lists/. Tested every URL
directly (curl/ffprobe), replaced dead ones where a working source
was findable, moved the rest to each file's Invalid section.
- Monaco: both channels were dead (S3 access denied / DNS failure);
found current sources for TV Monaco (okast.tv master.m3u8, no
per-session token) and Monaco Info (webtv.monacoinfo.com).
- Paraguay: Unicanal and ABC TV's direct CDN URLs were dead; both run
active official YouTube channels, switched to the same Ⓨ /live
pattern already used elsewhere in the repo. Trece's stream is dead
and its own site actually embeds Unicanal's feed instead of its
own, so no fix found - moved to Invalid.
- Kosovo: RTK 1/2/4's tokenized URLs are dead and no current source
found; RTK 3 has a working non-tokenized URL, kept.
- Armenia: Armenia 1, Kentron TV and Armenia TV had dead URLs; found
working replacements. 5TV only has a short-lived (~5h) signed-token
URL with no stable gateway, so it wasn't worth hardcoding - moved
to Invalid.
- New lists/zz_music_en.md for the "NOW" retro-music FAST channels
(Now 70's/80's, NOW Rock) - no existing thematic list fit them.
PR #963 dumped 84 mixed-country channels into a single raw .m3u8 file
in the repo root, which doesn't follow the contribution format at all
and mostly duplicates channels already in the repo (BBC News, DW,
Al Jazeera, CGTN, TRT World, NHK World, Arirang, KBS World, Bloomberg,
Carousel, Domashniy, Friday, RBK are all already present under
lists/zz_news_en.md, korea.md or russia.md with different sources).
Tested every URL directly; only kept ones that actually work.
- New lists/mongolia.md: 40 working national Mongolian channels
(skygo.mn), 8 dead ones filed under its own Invalid section
(TV4, Premier Sports 1-5, Mongol TV, NTN).
- New lists/kazakhstan.md: Balapan TV and Qazaqstan International;
QazSport redirects to a geoblock placeholder, filed as Invalid.
- lists/russia.md: added "Че" (Peretz/Che), a genuine RTRS multiplex-2
free-to-air channel that wasn't in the list yet.
- lists/zz_movies.md: added "Action Hollywood Movies" (Amagi FAST
channel), fits the existing Pluto TV/FilmRise/Stirr pattern there.
- make_playlist.py: added "mongolia": "MN" and "kazakhstan": "KZ" to
COUNTRY_CODES; README.md and flag_order.txt updated to match.
Left out: the various *-samsungnz.amagi.tv channels (Samsung TV Plus
NZ's own licensed feeds, not a public source), CJ OnStyle (home
shopping), NHK World Premium (paid tier), BBC Earth/Cbeebies Asia
feeds and FashionTV (no clean existing home, source legitimacy
unclear) - can revisit if there's a good place for them.
- M1 previously linked to the "M1 Hiradó" YouTube channel, which only
carries news bulletins, not the actual M1 programming. Replaced with
the real M1 live feed (same mediaklikk source already used for
M2/M4 Sport/M5/Duna TV), kept M1 Hiradó as a separate YouTube-based
entry since it's non-geoblocked and covers different content.
- M1, M2, M4 Sport, M5 and Duna TV's connectmedia.hu manifests
explicitly label their audio tracks "*_HUGEO_*" (MTVA's own
Hungary-only geo variant), confirmed by inspecting the HLS output -
marked all five with Ⓖ per the README convention.
M3 investigated further (nemzetiarchivum.hu/api/m3/v3/stream): the
live feed is FairPlay DRM-protected (skd:// key scheme via
fairplay.keyos.com), so it cannot be played by a plain M3U8/HLS
client regardless of URL freshness - stays in Invalid.
The "| * | * | [x]() |" row was leftover template cruft, unique to
this file (no other list in lists/ has it) and never matched by
make_playlist.py's [>] check anyway, so it never affected the
generated playlist.
Checked each remaining Invalid channel's own homepage/domain for a
current stream, per the pattern that already worked for Hegyvidék TV
in the previous commit:
- Spektrum Home: confirmed free on MinDig TV, found a working direct
stream, moved from Invalid into Commercial.
- Hegyvidék TV: rebranded to "Buda TV" (tvbuda.hu); hegyvidektv.hu now
embeds a new working stream; restored to Regional under a clarified
name.
- Fix TV, ErdélyTV, Radio 1, DikhTv: their old domains/CDNs are dead,
but each runs an active official YouTube channel (verified via
yt-dlp, 19k-467k subscribers) using the same /live pattern already
used for M1 Hiradó/ATV/Euronews Hungarian. Restored with Ⓨ marker.
Still unresolved (own domain checked, genuinely dead or parked):
M3, Duna World / M4+ Sport, MUSICPlus, Budakalász, VTV Füzesabony,
Putnok Városi TV, Miskolc TV (miskolctv.hu is a parked/for-sale
domain), Hatoscsatorna (site unreachable). MAX4 confirmed as a real
free MinDig TV channel but no working stream found anywhere - not
added since there is no URL to reference at all.
Found via onlinestream.live's own sitemap, then resolved to the
underlying origin URLs (stream2.nmih.hu / live.tiszatv.hu) rather than
linking through the onlinestream.live redirector itself. Verified
playable with curl + ffmpeg. Budakalász resolved successfully only
once out of several attempts (matches its "not 24/7" status elsewhere),
so it stays in Invalid rather than being restored on a single hit.
Tested every stream in lists/hungary.md against a live connection
(from a Hungarian IP, so no false negatives from geo-blocking) using
curl/ffprobe/yt-dlp. See issue #1104.
- M2/Petőfi TV, M4 Sport, M5 and Duna TV were all dead but still
marked [>], meaning they were shipping as broken entries in the
live playlist despite sitting in the "Invalid" section (make_playlist.py
only checks the [>] marker, not the section). Replaced with fresh
URLs sourced from mediaklikk's own player API and moved them into
the National section where they belong.
- RTL Klub, TV2, ATV, Izaura TV, Ózdi Városi TV: replaced dead URLs
with working ones. ATV now uses its official YouTube live channel,
same pattern as M1 Hiradó.
- Fix TV, MUSICPlus, Radio 1, Budakalász, Pannon RTV, VTV Füzesabony,
Hegyvidék TV, Tisza TV, Putnok Városi TV, Miskolc TV, Hatoscsatorna:
no working source found, moved to Invalid with [x] per repo
convention (not deleted).
- Duna World / M4+ Sport: no working live feed found on mediaklikk
anymore, changed from [>] to [x].
Note: the mediaklikk-sourced connectmedia.hu URLs are session-tokenized
and will likely need refreshing again in the future - this is the same
reason the previous URLs for these channels went dead.
- Sanitize the channel number field for embedded double quotes; the
previous fix (#1124) covered group/name/logo/epg but missed
tvg-chno, leaving the same attribute-injection vector open via the
"#" column.
- Add missing "kenya" and "nigeria" entries to COUNTRY_CODES so those
channels get a tvg-country attribute in the generated playlist.
- Sync README.md and flag_order.txt with lists/: add missing flags for
chile, egypt, saudi_arabia, indonesia, kenya, nigeria in their
proper geographic groups.
- Add .gitignore for __pycache__/*.pyc.