Commit Graph

1839 Commits (30b9c0e25e409e8d8fdc83f804609f39efa2b3e0)
 

Author SHA1 Message Date
Kálmán „KAMI” Szalai 30b9c0e25e Fix 5 dead Russian channel links, VGTRK/Smotrim redesign
The old player.smotrim.ru/iframe/stream/live_id/N embeds are all dead -
Smotrim's site redesign replaced them with a client-side API
(player-api.smotrim.ru/api/v1/channel/{id}) that returns the current
stream URL. Traced the old numeric id -> new channel id -> stream
mapping from the site's own JS bundle:

- Россия 1 (id 2961 -> channel 1): live.smotrim.ru, no signature, should
  be durable
- Россия-Культура (id 19201 -> channel 4): same, unsigned
- Москва 24 (id 1661 -> channel 76): stream.smotrim.ru, carries a `sign`
  query param
- Вести ФМ (id 52035 -> channel 199): same, signed
- Соловьёв Live (id 63338 -> channel 292): same, signed

The three signed URLs were stable across repeated fetches in testing
(not IP-bound), but could still rotate server-side - if the checker
flags one of these dead again, re-derive it from
player-api.smotrim.ru/api/v1/channel/{id} rather than assuming the
channel itself is gone.

Not fixed (researched, no working replacement found):
- РТР-Планета: removed from Smotrim entirely - VGTRK now describes it
  as satellite-only for the diaspora, no web stream exists
- Катунь 24 / Кубань 24: both stations' own sites just embed the same
  dead OK.ru video; OK.ru's underlying stream URL is IP-locked and
  expires in ~1 hour, unusable as a static list entry
- Саратов 24: dropped its web player entirely, now Telegram-only
2026-09-05 21:00:23 +02:00
ChannelCheckerBot f2a1e1f9d4 Channel check (fast) - 2026-09-05T18:16:44Z 2026-09-05 18:16:44 +00:00
KAMI e1f16b8c96
Merge pull request #1168 from KAMI911/fix-italy-local-tv-batch1
Fix 14 dead Italian local TV links
2026-09-05 18:08:17 +02:00
KAMI dcbda8ff83
Merge pull request #1167 from KAMI911/fix-italy-local-tv-batch2
Fix 8 dead Italian local TV links, remove a dead TG Norba 24 duplicate
2026-09-05 18:08:07 +02:00
KAMI bcefcd0ead
Merge pull request #1166 from KAMI911/fix-rai-channels
Fix 6 dead RAI channels via a working third-party mirror
2026-09-05 18:07:57 +02:00
KAMI a5265655a1
Merge pull request #1165 from KAMI911/add-hungarian-lexanetwork-channels
Add ES TV (Esztergom) and Komáromi Televízió
2026-09-05 18:07:46 +02:00
Kálmán „KAMI” Szalai ac044f207d Fix 14 dead Italian local TV links
Found via each station's own official "diretta/streaming" page, following
embedded iframes/JS one level deeper to the real .m3u8. No hosting
infrastructure was brute-forced. Verified 3x each with check_channels.py,
all consistently alive:

- Travel TV, Donna TV, Alma TV, Italia 7, Lazio Tv, Gold Tv: new
  5f11919dca3bd.streamlock.net host (old streaming.softwarecreation.it
  provider dead)
- Calabria Uno Tv: same host, working path (ngrp: prefix dropped)
- Canale 21 / Canale 21 Extra: new encoders.immergo.tv provider (old
  msvdn.net dead)
- Fascino Tv, Motori Tv: new 64b16f23efbee.streamlock.net host
- Ran Friul: azotosolutions.com load-balancer (old streamlock.net host dead)
- Love in Venice: same host, working path (.stream suffix added)
- Mediterranea Tv: new xdevel.com stream (old aswifi.it dead)

Castrovillari Tv and Cittaceleste Tv are still on their original URLs
unchanged - the outage looks to have been transient, both returned
live content again on retest.

Sportitalia SOLOCALCIO: found a candidate at
distribution.sportitalialive.it/sportitalia/sisolocalcio_abr/playlist.m3u8
(hardcoded in the official player page), but it returns 403 from here -
looks like a datacenter/ASN block rather than a bad URL, so left
unchanged rather than swap in something equally unverifiable.

19 other stations were also researched but had no findable working
replacement (parked/dead domain, JS-rendered player with no static URL,
or the official embed itself already dead) - left unchanged.
2026-09-05 15:59:26 +02:00
Kálmán „KAMI” Szalai d229c258e8 Fix 8 dead Italian local TV links, remove a dead TG Norba 24 duplicate
Found via each station's own official "diretta/streaming" page, following
embedded iframes (several use a shared white-label player at
player.streamshow.it/hosted/*.php) one level deeper to the real .m3u8.
No hosting infrastructure was brute-forced. Verified 3x each with
check_channels.py, all consistently alive:

- TVL (TV Libera Pistoia): new mariatvcdn.it host (old one dead)
- Teatro Tv: teatrotv.iostream.it (old m.iostream.it path dead)
- Tele Belluno: new mariatvcdn.it host + path
- Tele Cupole: azotosolutions.com load-balancer (old newradio.it dead)
- Tele Ischia: new streamlock.net host
- Tele Radio Ercolano: same saiuzwebnetwork.it provider, working path
- Teleiblea: same streamlock.net provider, working host
- Vera Tv: streamshow.it CDN (old shared streamshow.it host dead)

TG Norba 24 was listed twice under two different EPG rows with the same
tgv-id (TGNorba24.it) - one already pointed at a working
live-telenorba.cdn.netrw.it URL, the other (router.xdevel.com) was dead.
Removed the dead duplicate rather than adding a third entry.

29 other Italian local stations were also researched but had no
findable working replacement (site down, JS-injected player with no
static URL, or official embed itself already dead) - left unchanged.
2026-09-05 15:51:33 +02:00
Kálmán „KAMI” Szalai 1972c39bf9 Fix 6 dead RAI channels via a working third-party mirror
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).
2026-09-05 15:44:27 +02:00
Kálmán „KAMI” Szalai 6612168fd1 Add ES TV (Esztergom) and Komáromi Televízió
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.
2026-09-05 15:41:20 +02:00
KAMI eca1d5ff65
Merge pull request #1164 from KAMI911/fix-kapostv-link
Fix Kapos TV - found a working relay via the official player embed
2026-09-05 15:18:34 +02:00
Kálmán „KAMI” Szalai e8cf7121a6 Fix Kapos TV - found a working relay via the official player embed
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.
2026-09-05 15:14:40 +02:00
KAMI 2c676be88a
Merge pull request #1163 from KAMI911/fix-fehervartv-link
Fix FehérvárTV - old link served an empty playlist
2026-09-05 15:09:56 +02:00
Kálmán „KAMI” Szalai dd46b77562 Fix FehérvárTV - old link served an empty playlist
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.
2026-09-05 15:09:15 +02:00
ChannelCheckerBot 366b3a9293 Channel check (fast) - 2026-09-05T12:18:01Z 2026-09-05 12:18:01 +00:00
KAMI 4264cd01ea
Merge pull request #1162 from KAMI911/add-japan-bs-cids
Add 3 newly-found BS cids without moving existing ones
2026-09-05 12:57:11 +02:00
Kálmán „KAMI” Szalai e7e5ca8a62 Add 3 newly-found BS cids without moving existing ones
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.
2026-09-05 11:05:10 +02:00
PlaylistBot 04cf01884e Update Playlist (GitHub Actions) 2026-09-05 07:34:09 +00:00
KAMI 29d2243eb9
Merge pull request #1159 from frantdse/patch-5
Update streaming links for TV Syd and TV 2/Fyn
2026-09-05 09:34:02 +02:00
KAMI cd71dada8e
Merge pull request #1152 from KAMI911/remove-star-central-greece
Remove Star Central Greece - not a valid stream
2026-09-05 09:30:34 +02:00
KAMI 667e8efb11
Merge pull request #1161 from KAMI911/improve-pr-check
Check the whole touched list at PR time, not just changed lines
2026-09-05 09:27:45 +02:00
ChannelCheckerBot 1b4ca5e480 Channel check (deep) - 2026-09-05T06:39:21Z 2026-09-05 06:39:21 +00:00
ChannelCheckerBot 3f1afe04d4 Channel check (fast) - 2026-09-05T06:18:36Z 2026-09-05 06:18:36 +00:00
Kálmán „KAMI” Szalai 708fd34750 Check the whole touched list at PR time, not just changed lines
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.
2026-09-05 04:40:49 +02:00
ChannelCheckerBot 43031dc60f Channel check (fast) - 2026-09-05T00:24:35Z 2026-09-05 00:24:35 +00:00
Fransitiu! b06f272b65
Update streaming links for TV Syd and TV 2/Fyn 2026-09-04 15:45:03 -03:00
ChannelCheckerBot 26c21f5780 Channel check (fast) - 2026-09-04T18:17:22Z 2026-09-04 18:17:22 +00:00
ChannelCheckerBot a8b9c18ae9 Channel check (fast) - 2026-09-04T12:19:17Z 2026-09-04 12:19:17 +00:00
ChannelCheckerBot a51b411fec Channel check (fast) - 2026-09-04T10:17:38Z 2026-09-04 10:17:38 +00:00
KAMI 90d124bff6
Merge pull request #1158 from KAMI911/fix-incompleteread-crash
Fix crash on IncompleteRead, which killed the first live run
2026-09-04 12:06:01 +02:00
Kálmán „KAMI” Szalai 017955ad9e Fix crash on IncompleteRead, which killed the first live run
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.
2026-09-04 11:49:36 +02:00
KAMI e52f1b34d8
Merge pull request #1157 from KAMI911/add-channel-checker-and-dashboard
Add channel checker, scheduled health checks, and a status dashboard
2026-09-04 10:55:02 +02:00
Kálmán „KAMI” Szalai a86fb23e94 Add channel checker, scheduled health checks, and a status dashboard
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.
2026-09-04 10:21:37 +02:00
PlaylistBot e45cbb8e4b Update Playlist (GitHub Actions) 2026-09-04 04:58:09 +00:00
KAMI f949d167f7
Merge pull request #1155 from frantdse/patch-4
Update France 24 Español streaming URL
2026-09-04 06:58:00 +02:00
Fransitiu! 2a0be35bfd
Update France 24 Español link to new streaming URL 2026-09-03 20:12:25 -03:00
Kálmán „KAMI” Szalai 2ac426ba9c Remove Star Central Greece - not a valid stream
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.
2026-08-31 20:37:44 +02:00
KAMI 1ec930c490
Merge pull request #1151 from KAMI911/fix-greece-ert-world
Restore ERT World (as ERT Cosmos) and Star Central Greece
2026-08-31 20:31:02 +02:00
Kálmán „KAMI” Szalai b91595ee74 Restore ERT World (as ERT Cosmos) and Star Central Greece
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.
2026-08-31 20:26:51 +02:00
PlaylistBot 45748cf796 Update Playlist (GitHub Actions) 2026-08-31 18:26:07 +00:00
KAMI 2c13e34596
Merge pull request #1144 from uditmahato/fix/greece-dead-channels
Remove dead Greek channels and repoint ERT News
2026-08-31 20:25:58 +02:00
PlaylistBot d15910f4f7 Update Playlist (GitHub Actions) 2026-08-31 18:16:54 +00:00
KAMI 278dea8fa8
Merge pull request #1146 from SoulmatelynchVFX/fix-china-broken-streams
Move unreachable China streams (CCTV-5, CCTV-5+, CETV-1..4) to invalid
2026-08-31 20:16:44 +02:00
KAMI 4dbee93092
Merge pull request #1150 from KAMI911/add-japan-rakuten-news
Add 3 working Japanese news channels via Rakuten Amagi CDN
2026-08-31 20:07:13 +02:00
Kálmán „KAMI” Szalai 5839206b3b Add 3 working Japanese news channels via Rakuten Amagi CDN
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.
2026-08-31 20:04:49 +02:00
Seal Wang ecc3de2c2d Move unreachable China streams (CCTV-5, CCTV-5+, CETV-1..4) to invalid 2026-08-26 19:10:23 +08:00
uditmahato 07bfe0c6bc Remove dead Greek channels and repoint ERT News
ERT moved its streams from ert-live.siliconweb.com to
ert-ucdn.broadpeak-aas.com. ERT News still runs on the new host, so it is
repointed rather than removed.

The other five answered 404 on three separate attempts, and I could not
find a working replacement for any of them. Removing the only radio
channel left that section empty, so the heading goes with it.

Channels that merely refused the connection are left alone, since that is
what a channel served only inside Greece looks like from outside it.
2026-08-26 14:43:15 +05:45
PlaylistBot 5e14f0f239 Update Playlist (GitHub Actions) 2026-08-24 09:21:45 +00:00
Kálmán „KAMI” Szalai 49c6125e69 Replace Kanal S dead Wikimedia link with imgur-hosted logo 2026-08-24 10:18:58 +02:00
Kálmán „KAMI” Szalai 4002ccab0e Replace remaining dead logo links with imgur-hosted logos
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.
2026-08-24 10:06:30 +02:00