Compare commits

..

8 Commits

Author SHA1 Message Date
r3414385@gmail.com d7233dcc29
Merge 97c5b4764b into 6ec6fb7c0f 2026-04-11 07:36:20 +02:00
PlaylistBot 6ec6fb7c0f Update Playlist (GitHub Actions) 2026-04-09 03:28:19 +00:00
foratedio 9269fbb122
Update playlist_brazil.m3u8 (#1013) 2026-04-09 05:28:11 +02:00
PlaylistBot 5280f362ca Update Playlist (GitHub Actions) 2026-04-09 03:27:40 +00:00
Miguel Lozano 50ee8e8861
Add RTP Africa and RTP Internacional (#1016)
Thank you for yout work.
2026-04-09 05:27:31 +02:00
PlaylistBot 02c84cb055 Update Playlist (GitHub Actions) 2026-04-09 03:21:33 +00:00
Giacinto Lo Meo ea332da787
Add tvg-chno support using channel number from markdown lists (#1018)
* Add channel number to M3U line formatting

Add tvg-chno support using channel number from markdown lists

- Extract channel number from md lists
- Add tvg-chno attribute to M3U output
- Skip invalid values (e.g. 0)

Improves channel ordering in IPTV clients like Jellyfin

* Update make_playlist.py

Add tvg-chno support using channel number from markdown lists

- Extract channel number from md lists
- Add tvg-chno attribute to M3U output
- Skip invalid values (e.g. 0)

Improves channel ordering in IPTV clients like Jellyfin

* Delete playlists/playlist_italy.m3u8

delete italy playlist for updating with channel number

* Italy playlist updated with channel number
2026-04-09 05:21:25 +02:00
Baleshevich Srdjan 4462172b34
Updated the Bosnia & Herzegovina, Serbia & Montenegro playlist and list (#878)
* Updated the Bosnia and Herzegovina playlist and list

Replaced non-working links of two TV stations for links that work. The source of those links is found on the web sites of those TV stations respectively.

* Update Playlist (GitHub Actions)

* Updated the Bosnia & Herzegovina, Serbia & Montenegro playlist and list

Updated the link of one TV stations in Bosnia and Herzegovina, and remarked a non-HD channel on that list.
Updated all the links of TV stations from Montenegro, marked some of the links with GeoIP blocking (help needed from good, hones & heroic person from Montenegro on this one).
Added TV 3 channels to Serbia's list, and updated 2 links on that list as well.

* Update Playlist (GitHub Actions)

* Update Playlist (GitHub Actions)

---------

Co-authored-by: PlaylistBot <playlistbot@users.noreply.github.com>
2026-04-09 05:15:33 +02:00
89 changed files with 2760 additions and 2735 deletions

View File

@ -4,11 +4,11 @@
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | BHT 1 | [>](https://bhrtstream.bhtelecom.ba/bhrtportal_hd.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/9/93/Logo_of_BHT_1_%282003-2012%29.png" /> | BHT1.ba |
| 2 | Federalna televizija (FTV) Ⓢ | [>](http://94.250.2.6:7374/play/a02s/index.m3u8) | <img height="20" src="https://i.imgur.com/Jpvs4u3.png" /> | FederalnaTV.ba |
| 3 | Televizija Republike Srpske (RTRS) | [>](https://parh.rtrs.tv/tv/live/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/RTRS_Logo.svg/640px-RTRS_Logo.svg.png" /> | RTRSTV.ba |
| 3 | Televizija Republike Srpske (RTRS) | [>](https://parh.rtrs.tv/tv/live/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/RTRS_Logo.svg/640px-RTRS_Logo.svg.png" /> | RTRSTV.ba |
| 3 | RTRS PLUS Ⓢ | [>](https://pluslive.rtrs.tv/plus/plus/playlist.m3u8) | <img height="20" src="https://i.imgur.com/k06WvYl.png"/> | RTRSplus.ba |
| 4 | N1 Bosna i Hercegovina | [>](https://best-str.umn.cdn.united.cloud/stream?channel=n1bos&p=n1Sh4redSecre7iNf0&sp=n1info&stream=sp1400&u=n1info) | <img height="20" src="https://i.imgur.com/72oMSWz.png"/> | N1BosniaHerzegovina.ba |
| 5 | RTV HB Ⓢ | [>](https://prd-hometv-live-open.spectar.tv/ERO_1_083/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/en/6/60/Logo_of_TV_Herceg-Bosne.png"/> | RTVHB.ba |
| 6 | RTV BN | [>](https://rtvbn.tv:8080/live/index.m3u8) | <img height="20" src="https://i.imgur.com/DUBvfWb.png"/> | BNTV.ba |
| 6 | RTV BN | [>](https://stream.rtvbn.tv:8080/live/index.m3u8) | <img height="20" src="https://i.imgur.com/DUBvfWb.png"/> | BNTV.ba |
| 7 | RTV Glas Drine | [>](http://glasdrine.cutuk.net:8081/433ssdsw/GlasDrineSD/playlist.m3u8) | <img height="20" src="https://i.imgur.com/9NgxOdb.png"/> | RTVGlasDrine.ba |
| 8 | Sevdah Ⓢ | [>](https://restreamer2.tnt.ba/hls/stream.m3u8) | <img height="20" src="https://i.imgur.com/V6W3yEp.png"/> | SevdahTV.ba |
| 9 | TNT Kids | [>](https://restreamer1.tnt.ba/hls/tntkids.m3u8) | <img height="20" src="https://i.imgur.com/irTDbpn.png"/> | TNTKidsTV.ba |

View File

@ -2,7 +2,7 @@
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | TVCG 1 | [>](http://cdn3.bcdn.rs:1935/cg1/smil:cg1.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/QORHrXu.png"/> | TVCG1.me |
| 2 | TVCG 2 | [>](http://cdn3.bcdn.rs:1935/cg2/smil:cg2.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/WECmUKH.png"/> | TVCG2.me |
| 3 | TVCG 3 | [>](https://parlament.rtcg.me:1936/pr/smil:parlament.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/XC7zVog.png"/> | Parlamentarnikanal.me |
| 99 | TVCG MNE | [>](http://cdn3.bcdn.rs:1935/cgsat/smil:cgsat.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/pf8VEwf.png"/> | TVCGMNE.me |
| 1 | TVCG 1 Ⓖ | [>](https://rtcg-live-open-geo.morescreens.com/RTCG_1_001/playlist.m3u8) | <img height="20" src="https://i.imgur.com/QORHrXu.png"/> | TVCG1.me |
| 2 | TVCG 2 Ⓖ | [>](https://rtcg-live-open-geo.morescreens.com/RTCG_1_002/playlist.m3u8) | <img height="20" src="https://i.imgur.com/WECmUKH.png"/> | TVCG2.me |
| 3 | TVCG 3 Ⓖ | [>](https://rtcg-live-open-geo.morescreens.com/RTCG_1_003/playlist.m3u8) | <img height="20" src="https://i.imgur.com/XC7zVog.png"/> | TVCG3.me |
| 99 | TVCG MNE | [>](https://rtcg-live-open.morescreens.com/RTCG_1_004/playlist.m3u8) | <img height="20" src="https://i.imgur.com/pf8VEwf.png"/> | TVCGMNE.me |

View File

@ -10,7 +10,9 @@
| 5 | RTP Madeira Ⓢ | [>](https://streaming-live.rtp.pt/liverepeater/smil:rtpmadeira.smil/playlist.m3u8) | <img height="20" src="https://upload.wikimedia.org/wikipedia/en/a/ac/RTP_Madeira_2016.png"/> | RTPMadeira.pt |
| 6 | RTP3 | [>](https://streaming-live.rtp.pt/livetvhlsDVR/rtpnHDdvr.smil/playlist.m3u8?DVR=) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Rtp3.png"/> | RTP3.pt |
| 7 | RTP Memória | [x]() | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/7/79/RtpMemoria_positivo_horiz_RGB.png"/> | RTPMemoria.pt |
| 8 | RTP África | [>](https://streaming-live.rtp.pt/liverepeater/smil:rtpafrica.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/ISFNy17.png"/> | RTPAfrica.pt |
| 9 | RTP Mundo | [>](https://streaming-live.rtp.pt/liverepeater/smil:rtpi.smil/playlist.m3u8) | <img height="20" src="https://i.imgur.com/mJ3gyqx.png"/> | RTPInternacional.pt |
| 1 | Porto Canal Ⓢ | [>](https://streamer-a01.videos.sapo.pt/live/portocanal/playlist.m3u8) | <img height="20" src="https://i.imgur.com/wsyvP2H.png"/> | PortoCanal.pt |
| 2 | ADtv Ⓢ | [>](https://playout172.livextend.cloud/liveiframe/_definst_/ngrp:liveartvabr_abr/playlist.m3u8) | <img height="20" src="https://i.imgur.com/FvlcU3z.png"/> |
| 3 | CNN Portugal | [>](https://sktv-forwarders.7m.pl/get.php?x=CNN_Portugal) | <img height="20" src="https://i.imgur.com/NYH39xs.png"/> | CNNPortugal.pt |
| 2 | ADtv Ⓢ | [>](https://playout172.livextend.cloud/liveiframe/_definst_/ngrp:liveartvabr_abr/playlist.m3u8) | <img height="20" src="https://i.imgur.com/FvlcU3z.png"/> | |
| 3 | CNN Portugal | [>](https://sktv-forwarders.7m.pl/get.php?x=CNN_Portugal) | <img height="20" src="https://i.imgur.com/NYH39xs.png"/> | CNNPortugal.pt |
| 4 | Euronews em Português Ⓨ| [>](https://www.youtube.com/euronewspt/live) | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Euronews_2022.svg/640px-Euronews_2022.svg.png"/> | EuronewsPortuguese.fr |

View File

@ -2,15 +2,18 @@
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | RTS 1 | [>](https://webtvstream.bhtelecom.ba/rts1.m3u8) | <img height="20" src="https://i.imgur.com/S1pKHSR.png"/> | RTS1.rs |
| 2 | RTS 2 | [>](https://webtvstream.bhtelecom.ba/rts2.m3u8) | <img height="20" src="https://i.imgur.com/jltAf5h.png"/> | RTS2.rs |
| 3 | RTS 3 | [x]() | <img height="20" src="https://i.imgur.com/gxuGB4J.png"/> | RTS3.rs |
| 0 | RTS Svet | [x]() | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/8/8a/Rts-svet.png"/> | RTSSvet.rs |
| 0 | Euronews Serbia | [>](https://d1ei8ofhgfmkac.cloudfront.net/app-19518-1306/ngrp:QoZfNjsg_all/playlist.m3u8) | <img height="20" src="https://i.imgur.com/b24QKcq.png"/> | EuroNewsSerbia.rs |
| 1 | RTS 1 | [>](https://webtvstream.bhtelecom.ba/rts1.m3u8) | <img height="20" src="https://i.imgur.com/S1pKHSR.png"/> | RTS1.rs |
| 2 | RTS 2 | [>](https://webtvstream.bhtelecom.ba/rts2.m3u8) | <img height="20" src="https://i.imgur.com/jltAf5h.png"/> | RTS2.rs |
| 3 | RTS 3 | [x]() | <img height="20" src="https://i.imgur.com/gxuGB4J.png"/> | RTS3.rs |
| 4 | Red TV | [>](https://edge8.pink.rs/redtv/chunklist_w1213385221.m3u8) | <img height="20" src="https://i.imgur.com/cpN7NrL.png"/> | RedTV.rs |
| 5 | Kurir TV | [>](https://static.am.mediaoutcast.com/storage/nQJnjJkO/nQJnjJkO/stream/O68x4o8g/720p/720p.m3u8) | <img height="20" src="https://i.imgur.com/HBPnUD5.png"/> | KurirTV.rs |
| 6 | Informer TV | [>](https://edge-rs-03.maksnet.tv/informertv-secure/web/playlist.m3u8) | <img height="20" src="https://i.imgur.com/9wdEHRf.png"/> | InformerTV.rs |
| 0 | RTS Svet | [x]() | <img height="20" src="https://upload.wikimedia.org/wikipedia/commons/8/8a/Rts-svet.png"/> | RTSSvet.rs |
| 0 | Euronews Serbia | [x](https://d1ei8ofhgfmkac.cloudfront.net/app-19518-1306/ngrp:QoZfNjsg_all/playlist.m3u8) | <img height="20" src="https://i.imgur.com/b24QKcq.png"/> | EuroNewsSerbia.rs |
<h3>Vojvodina</h3>
| # | Channel | Link | Logo | EPG id |
|:---:|:--------------:|:-----:|:----:|:------:|
| 1 | RTV 1 | [>](rtsp://212.200.255.151/rtv1) | <img height="20" src="https://i.imgur.com/CG44YT3.png"/> | RTV1.rs |
| 2 | RTV 2 | [>](rtsp://212.200.255.151/rtv2) | <img height="20" src="https://i.imgur.com/skpr66t.png"/> | RTV2.rs |
| 1 | RTV 1 | [>](rtmp://212.200.230.50:1935/RTV/rtv1) | <img height="20" src="https://i.imgur.com/CG44YT3.png"/> | RTV1.rs |
| 2 | RTV 2 | [>](rtmp://212.200.230.50:1935/RTV/rtv2) | <img height="20" src="https://i.imgur.com/skpr66t.png"/> | RTV2.rs |

View File

@ -103,6 +103,9 @@ class Channel:
self.url = self.url[self.url.find("(")+1:self.url.rfind(")")]
self.logo = parts[4].strip()
self.logo = self.logo[self.logo.find('src="')+5:self.logo.rfind('"')]
self.chno = self.number if self.number and self.number != "0" else None
if len(parts) > 6:
self.epg = parts[5].strip()
else:
@ -110,10 +113,11 @@ class Channel:
def to_m3u_line(self):
country = f' tvg-country="{self.country_code}"' if self.country_code else ""
chno = f' tvg-chno="{self.chno}"' if self.chno else ""
if self.epg is None:
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}"{country} group-title="{self.group}",{self.name}\n{self.url}')
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}"{chno}{country} group-title="{self.group}",{self.name}\n{self.url}')
else:
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}" tvg-id="{self.epg}"{country} group-title="{self.group}",{self.name}\n{self.url}')
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}" tvg-id="{self.epg}"{chno}{country} group-title="{self.group}",{self.name}\n{self.url}')
def main():

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long