Compare commits

...

4 Commits

Author SHA1 Message Date
xykt-fix 53f7a9020d
Merge 686b7d39aa into 43b8dced11 2026-03-08 07:58:27 -05:00
KAMI 43b8dced11
Add tvg-country attribute to M3U8 playlist entries (#990)
Add ISO 3166-1 alpha-2 country codes via tvg-country attribute
to all #EXTINF lines, enabling IPTV players to filter and display
channels by country.

Co-authored-by: Kálmán „KAMI” Szalai <kami911gmail.com>
2026-03-08 09:29:23 +01:00
KAMI 8a67a85d1a
Improve make_playlist.py code quality and fix bugs (#989)
* Improve make_playlist.py code quality and fix bugs

- Fix group name bug: replace underscores with spaces before title()
  so filenames like north_korea.md produce "North Korea" not "North_Korea"
- Fix resource leaks: use context managers for all file handles including
  EPG list and per-country playlist files
- Remove os.chdir() global side effect: use absolute paths derived from
  the script location instead
- Avoid calling to_m3u_line() twice per channel by caching the result
- Fix redundant trailing colon in filename[:-3:] slice
- Consistent use of write() for headers instead of mixing print/write
- Strip blank lines from EPG URL list when reading

* Skip commit and push when playlist has no changes

Prevents the workflow from failing with exit code 1 when the generated
playlist is identical to the previous run and there is nothing to commit.

* Use current branch instead of hardcoded master for push

Replace hardcoded origin/master reference with @{u} (upstream of current
branch) for the diff check, and use HEAD for the push target so the
workflow works correctly on any branch.

---------

Co-authored-by: Kálmán „KAMI” Szalai <kami911gmail.com>
2026-03-08 07:40:47 +01:00
xykt-fix 686b7d39aa
Create xyktstreamcdn.m3u8 2026-02-12 08:02:20 +08:00
87 changed files with 3559 additions and 3293 deletions

View File

@ -17,5 +17,5 @@ jobs:
git config user.email "playlistbot@users.noreply.github.com" || true
python3 ./make_playlist.py
git add .
git commit --quiet -m "Update Playlist (GitHub Actions)"
git push -f origin master
git diff --staged --quiet || git commit --quiet -m "Update Playlist (GitHub Actions)"
git diff --quiet HEAD @{u} || git push -f origin HEAD

View File

@ -3,11 +3,98 @@
import os
import re
EPG_LIST = open('epglist.txt',"r") # for a clean code
COUNTRY_CODES = {
"albania": "AL",
"andorra": "AD",
"argentina": "AR",
"armenia": "AM",
"australia": "AU",
"austria": "AT",
"azerbaijan": "AZ",
"belarus": "BY",
"belgium": "BE",
"bosnia_and_herzegovina": "BA",
"brazil": "BR",
"bulgaria": "BG",
"canada": "CA",
"chad": "TD",
"chile": "CL",
"china": "CN",
"costa_rica": "CR",
"croatia": "HR",
"cyprus": "CY",
"czech_republic": "CZ",
"denmark": "DK",
"dominican_republic": "DO",
"egypt": "EG",
"estonia": "EE",
"faroe_islands": "FO",
"finland": "FI",
"france": "FR",
"georgia": "GE",
"germany": "DE",
"greece": "GR",
"greenland": "GL",
"hong_kong": "HK",
"hongkong": "HK",
"hungary": "HU",
"iceland": "IS",
"india": "IN",
"indonesia": "ID",
"iran": "IR",
"iraq": "IQ",
"ireland": "IE",
"israel": "IL",
"italy": "IT",
"japan": "JP",
"korea": "KR",
"kosovo": "XK",
"latvia": "LV",
"lithuania": "LT",
"luxembourg": "LU",
"macau": "MO",
"malta": "MT",
"mexico": "MX",
"moldova": "MD",
"monaco": "MC",
"montenegro": "ME",
"netherlands": "NL",
"north_korea": "KP",
"north_macedonia": "MK",
"norway": "NO",
"paraguay": "PY",
"peru": "PE",
"poland": "PL",
"portugal": "PT",
"qatar": "QA",
"romania": "RO",
"russia": "RU",
"san_marino": "SM",
"saudi_arabia": "SA",
"serbia": "RS",
"slovakia": "SK",
"slovenia": "SI",
"somalia": "SO",
"spain": "ES",
"spain_vod": "ES",
"sweden": "SE",
"switzerland": "CH",
"taiwan": "TW",
"trinidad": "TT",
"turkey": "TR",
"uk": "GB",
"ukraine": "UA",
"united_arab_emirates": "AE",
"usa": "US",
"usa_vod": "US",
"venezuela": "VE",
}
class Channel:
def __init__(self, group, md_line):
def __init__(self, group, md_line, country_code=""):
self.group = group
self.country_code = country_code
md_line = md_line.strip()
parts = md_line.split("|")
self.number = parts[1].strip()
@ -22,39 +109,49 @@ class Channel:
self.epg = None
def to_m3u_line(self):
country = f' tvg-country="{self.country_code}"' if self.country_code else ""
if self.epg is None:
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}" group-title="{self.group}",{self.name}\n{self.url}')
return (f'#EXTINF:-1 tvg-name="{self.name}" tvg-logo="{self.logo}"{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}" 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}"{country} group-title="{self.group}",{self.name}\n{self.url}')
def main():
dir_playlists = 'playlists'
if not (os.path.isdir(dir_playlists)):
base_dir = os.path.dirname(os.path.abspath(__file__))
lists_dir = os.path.join(base_dir, "lists")
dir_playlists = os.path.join(base_dir, "playlists")
if not os.path.isdir(dir_playlists):
os.mkdir(dir_playlists)
with open("playlist.m3u8", "w", encoding='utf-8') as playlist:
processed_epg_list = ", ".join(EPG_LIST).replace('\n', '')
head_playlist = f'#EXTM3U x-tvg-url="{processed_epg_list}"'
print(f'#EXTM3U x-tvg-url="{processed_epg_list}"', file=playlist)
os.chdir("lists")
for filename in sorted(os.listdir(".")):
with open(os.path.join(base_dir, "epglist.txt"), encoding='utf-8') as epg_file:
epg_urls = [line.strip() for line in epg_file if line.strip()]
processed_epg_list = ", ".join(epg_urls)
head_playlist = f'#EXTM3U x-tvg-url="{processed_epg_list}"\n'
with open(os.path.join(base_dir, "playlist.m3u8"), "w", encoding='utf-8') as playlist:
playlist.write(head_playlist)
for filename in sorted(os.listdir(lists_dir)):
if filename == "README.md" or not filename.endswith(".md"):
continue
with open(filename, encoding='utf-8') as markup_file:
file_country = os.path.join("..", dir_playlists, "playlist_" + filename[:-3:] + ".m3u8")
playlist_country = open(file_country, "w", encoding='utf-8')
playlist_country.write(head_playlist + "\n")
group = filename.replace(".md", "").title()
print(f"Generating {group}")
markup_path = os.path.join(lists_dir, filename)
country_path = os.path.join(dir_playlists, "playlist_" + filename[:-3] + ".m3u8")
country_key = filename[:-3]
group = country_key.replace("_", " ").title()
country_code = COUNTRY_CODES.get(country_key, "")
print(f"Generating {group}")
with open(markup_path, encoding='utf-8') as markup_file, \
open(country_path, "w", encoding='utf-8') as playlist_country:
playlist_country.write(head_playlist)
for line in markup_file:
if "<h1>" in line.lower() and "</h1>" in line.lower():
group = re.sub('<[^<>]+>', '', line.strip())
if not "[>]" in line:
if "[>]" not in line:
continue
channel = Channel(group, line)
print(channel.to_m3u_line(), file=playlist)
print(channel.to_m3u_line(), file=playlist_country)
playlist_country.close()
channel = Channel(group, line, country_code)
m3u_line = channel.to_m3u_line()
print(m3u_line, file=playlist)
print(m3u_line, file=playlist_country)
if __name__ == "__main__":
main()

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

File diff suppressed because one or more lines are too long

169
xyktstreamcdn.m3u8 100644
View File

@ -0,0 +1,169 @@
#EXTM3U
#EXTINF:-1 tvg-id="MNB.mn@SD",MNB HD
https://cdn4.skygo.mn/live/disk1/MNB/HLSv3-FTA/MNB.m3u8
#EXTINF:-1 tvg-id="MNBMongoliinMedee.mn@SD",MNB Монголын Мэдээ
https://cdn4.skygo.mn/live/disk1/MNB2/HLSv3-FTA/MNB2.m3u8
#EXTINF:-1 tvg-id="MNBSport.mn@SD",MNB Sport
https://live.mnb.mn/hls/mnb_sport.stream.m3u8
#EXTINF:-1 tvg-id="MNBWorld.mn@SD",MNB International
https://cdn4.skygo.mn/live/disk1/MNB_World/HLSv3-FTA/MNB_World.m3u8
#EXTINF:-1 tvg-id="TV25.mn@SD",MN25
https://cdn4.skygo.mn/live/disk1/MN25/HLSv3-FTA/MN25.m3u8
#EXTINF:-1 tvg-id="TV5.mn@SD",TV5
https://cdn4.skygo.mn/live/disk1/TV5HD/HLSv3-FTA/TV5HD.m3u8
#EXTINF:-1 tvg-id="TV8.mn@SD",TV8 HD
https://cdn4.skygo.mn/live/disk1/TV8HD/HLSv3-FTA/TV8HD.m3u8
#EXTINF:-1 tvg-id="TV9.mn@SD",TV9
https://cdn4.skygo.mn/live/disk1/TV9HD/HLSv3-FTA/TV9HD.m3u8
#EXTINF:-1 tvg-id="NTV.mn@SD",NTV
https://cdn4.skygo.mn/live/disk1/NTVHD/HLSv3-FTA/NTVHD.m3u8
#EXTINF:-1 tvg-id="EagleNews.mn@SD",Eagle News HD
https://cdn4.skygo.mn/live/disk1/Eagle/HLSv3-FTA/Eagle.m3u8
#EXTINF:-1 tvg-id="UBS.mn@SD",UBS (720p)
https://cdn4.skygo.mn/live/disk1/UBSHD/HLSv3-FTA/UBSHD.m3u8
#EXTINF:-1 tvg-id="SBN.mn@SD",SBN
https://cdn4.skygo.mn/live/disk1/SBN/HLSv3-FTA/SBN.m3u8
#EXTINF:-1 tvg-id="C1.mn@SD",C1
https://cdn4.skygo.mn/live/disk1/C1/HLSv3-FTA/C1.m3u8
#EXTINF:-1 tvg-id="CentralTV.mn@SD",Central HD
https://cdn4.skygo.mn/live/disk1/Ekh_Oron/HLSv3-FTA/Ekh_Oron.m3u8
#EXTINF:-1 tvg-id="MovieBox.mn@SD",MovieBox
https://cdn4.skygo.mn/live/disk1/Moviebox/HLSv3-FTA/Moviebox.m3u8
#EXTINF:-1 tvg-id="",CNBC MGL
https://cdn4.skygo.mn/live/disk1/CNBC/HLSv3-FTA/CNBC.m3u8
#EXTINF:-1 tvg-id="AsianBox.mn@SD",AsianBox
https://cdn4.skygo.mn/live/disk1/AsianBOX/HLSv3-FTA/AsianBOX.m3u8
#EXTINF:-1 tvg-id="EdutainmentTV.mn@SD",Education TV
https://cdn4.skygo.mn/live/disk1/Education/HLSv3-FTA/Education.m3u8
#EXTINF:-1 tvg-id="ETV.mn@SD",ETV
https://cdn4.skygo.mn/live/disk1/ETV/HLSv3-FTA/ETV.m3u8
#EXTINF:-1 tvg-id="ONTV.mn@SD",N Sports
https://cdn4.skygo.mn/live/disk1/ONTV/HLSv3-FTA/ONTV.m3u8
#EXTINF:-1 tvg-id="Channel11.mn@SD",Channel 11
https://cdn4.skygo.mn/live/disk1/Channel11/HLSv3-FTA/Channel11.m3u8
#EXTINF:-1 tvg-id="GTV.mn@SD",Gandan TV
https://cdn4.skygo.mn/live/disk1/GTV/HLSv3-FTA/GTV.m3u8
#EXTINF:-1 tvg-id="SoyonGegeeruulegchTV.mn@SD",Soyon Geegerulch
https://cdn4.skygo.mn/live/disk1/SoyonGegeeruulegch/HLSv3-FTA/SoyonGegeeruulegch.m3u8
#EXTINF:-1 tvg-id="TMTV.mn@SD",Tanin Mehehgui TV
https://cdn4.skygo.mn/live/disk1/TM/HLSv3-FTA/TM.m3u8
#EXTINF:-1 tvg-id="TV4.mn@SD",TV 4
https://cdn4.skygo.mn/live/disk1/TV4/HLSv3-FTA/TV4.m3u8
#EXTINF:-1 tvg-id="TenGerTV.mn@SD",TenGer TV (720p)
https://cdn4.skygo.mn/live/disk1/VTV/HLSv3-FTA/VTV.m3u8
#EXTINF:-1 tvg-id="UlziiTV.mn@SD",UlZii
https://cdn4.skygo.mn/live/disk1/UlziiTV/HLSv3-FTA/UlziiTV.m3u8
#EXTINF:-1 tvg-id="MalchinTV.mn@SD",Malchin TV
https://cdn4.skygo.mn/live/disk1/Malchin/HLSv3-FTA/Malchin.m3u8
#EXTINF:-1 tvg-id="ParliamentTV.mn@SD",Parliament TV
https://cdn4.skygo.mn/live/disk1/Parlament/HLSv3-FTA/Parlament.m3u8
#EXTINF:-1 tvg-id="StarTV.mn@SD",Star TV
https://cdn4.skygo.mn/live/disk1/Star/HLSv3-FTA/Star.m3u8
#EXTINF:-1 tvg-id="SuldTV.mn@SD",Suld TV
https://cdn4.skygo.mn/live/disk1/SuldTV/HLSv3-FTA/SuldTV.m3u8
#EXTINF:-1 tvg-id="SevenChannel.mn@SD",Seven Channel
https://cdn4.skygo.mn/live/disk1/TV7/HLS-FTA/TV7.m3u8
#EXTINF:-1 tvg-id="AistGlobaltv.mn@SD",Aist Global
https://cdn4.skygo.mn/live/disk1/GlobalTV/HLSv3-FTA/GlobalTV.m3u8
#EXTINF:-1 tvg-id="",MNB Гэр бүл
https://cdn4.skygo.mn/live/disk1/MNB_Family/HLSv3-FTA/MNB_Family.m3u8
#EXTINF:-1 tvg-id="MongolianNewsChannel.mn@SD",MNC
https://cdn4.skygo.mn/live/disk1/MNCTV/HLSv3-FTA/MNCTV.m3u8
#EXTINF:-1 tvg-id="",Premier Sports 1
https://cdn4.skygo.mn/live/disk1/SPSPrime/HLSv3-FTA/SPSPrime.m3u8
#EXTINF:-1 tvg-id="",Premier Sports 2
https://cdn4.skygo.mn/live/disk1/SPSPlay/HLSv3-FTA/SPSPlay.m3u8
#EXTINF:-1 tvg-id="",Premier Sports 3
https://cdn4.skygo.mn/live/disk1/SPSNational/HLSv3-FTA/SPSNational.m3u8
#EXTINF:-1 tvg-id="PremierSports4.mn@SD",Premier Sports 4
http://cdn4.skygo.mn/live/disk1/SPSFight/HLS-FTA/SPSFight.m3u8
#EXTINF:-1 tvg-id="",Premier Sports 5
https://cdn4.skygo.mn/live/disk1/SPSPlus/HLSv3-FTA/SPSPlus.m3u8
#EXTINF:-1 tvg-id="",Bantan
https://cdn4.skygo.mn/live/disk1/Popcorn/HLSv3-FTA/Popcorn.m3u8
#EXTINF:-1 tvg-id="",Mongol TV
https://cdn4.skygo.mn/live/disk1/Mongol_TV/HLSv3-FTA/Mongol_TV.m3u8
#EXTINF:-1 tvg-id="",Auto TV (720p)
https://cdn4.skygo.mn/live/disk1/AutoTV/HLSv3-FTA/AutoTV.m3u8
#EXTINF:-1 tvg-id="BloombergTVMongolia.mn@SD",Bloomberg TV Mongolia HD (720p)
https://cdn4.skygo.mn/live/disk1/BloombergMon/HLSv3-FTA/BloombergMon.m3u8
#EXTINF:-1 tvg-id="Cinema.mn@SD",Cinema
https://cdn4.skygo.mn/live/disk1/CinemaTV/HLSv3-FTA/CinemaTV.m3u8
#EXTINF:-1 tvg-id="Ntn.mn@SD",NTN
https://cdn4.skygo.mn/live/disk1/NTN/HLSv3-FTA/NTN.m3u8
#EXTINF:-1 tvg-id="Volplus.mn@SD",Mongolian Plus1
https://cdn4.skygo.mn/live/disk1/VolumePlus/HLSv3-FTA/VolumePlus.m3u8
#EXTINF:-1 tvg-id="", Mongolia Music
https://cdn4.skygo.mn/live/disk1/Khugjim/HLSv3-FTA/Khugjim.m3u8
#EXTINF:-1 tvg-id="BBCNews.uk@AsiaPacific",BBC News HD
https://cdn4.skygo.mn/live/disk1/BBC_News/HLSv3-FTA/BBC_News.m3u8
#EXTINF:-1 tvg-id="",Canela Clasicos
https://stream.ads.ottera.tv/playlist.m3u8?network_id=652
#EXTINF:-1 tvg-id="TV5MondeAsia.fr@SD",TV5Monde Asie
https://liveh12.vtvprime.vn/hls/TV5/03.m3u8
#EXTINF:-1 tvg-id="AlJazeera.qa@English",Al Jazeera English
https://live-hls-apps-aje-fa.getaj.net/AJE/index.m3u8
#EXTINF:-1 tvg-id="France24.fr@French",France 24
https://dash4.antik.sk/live/test_france24_france/playlist.m3u8
#EXTINF:-1 tvg-id="DW.de@English",DW English HD
https://dwamdstream102.akamaized.net/hls/live/2015525/dwstream102/master.m3u8
#EXTINF:-1 tvg-id="NHKWorldJapan.jp@SD",NHK World-Japan
https://cdn4.skygo.mn/live/disk1/NHK_World/HLSv3-FTA/NHK_World.m3u8
#EXTINF:-1 tvg-id="CGTN.cn@SD",CGTN
https://dash4.antik.sk/live/test_cgtn/playlist.m3u8
#EXTINF:-1 tvg-id="TRTWorld.tr@HD",TRT World HD
https://dash2.antik.sk/live/test_trt_world_atktv/playlist.m3u8
#EXTINF:-1 tvg-id="NHKWorldPremium.jp@SD",NHK World Premium
https://cdn.skygo.mn/live/disk1/NHK_World_Premium/HLSv3-FTA/NHK_World_Premium.m3u8
#EXTINF:-1 tvg-id="AFV.us@SD",Always Funny!
https://linear-12.frequency.stream/dist/plex/12/hls/master/playlist.m3u8
#EXTINF:-1 tvg-id="ToonGoggles.us@SD",Toon Goggles
https://stream-us-east-1.getpublica.com/playlist.m3u8?network_id=37
#EXTINF:-1 tvg-id="3ABNInternational.us@SD",3ABN International Network
https://3abn.bozztv.com/3abn2/Int_live/smil:Int_live.smil/playlist.m3u8
#EXTINF:-1 tvg-id="CarouselInternational.ru@SD",Carousel
https://cdn4.skygo.mn/live/disk1/Karusel/HLSv3-FTA/Karusel.m3u8
#EXTINF:-1 tvg-id="Balapan.kz@SD",Balapan TV
https://balapantv-stream.qazcdn.com/balapantv/balapantv/playlist.m3u8
#EXTINF:-1 tvg-id="DaVinciAsia.de@Vietnam",Da Vinci HD
https://liveh12.vtvprime.vn/hls/DAVINVY/04.m3u8
#EXTINF:-1 tvg-id="Detskoekino.ru@International",Detskoe Kino
https://autopilot.catcast.tv/content/38720/index.m3u8
#EXTINF:-1 tvg-id="Bloomberg.us@Asia",Bloomberg
https://cdn4.skygo.mn/live/disk1/Bloomberg/HLSv3-FTA/Bloomberg.m3u8
#EXTINF:-1 tvg-id="ArirangTV.kr@SD",Arirang Korea
https://cdn4.skygo.mn/live/disk1/Arirang/HLSv3-FTA/Arirang.m3u8
#EXTINF:-1 tvg-id="FashionTVParisLOriginal.fr@SD",FashionTV HD
https://edge-fast3.evrideo.tv/bfdbb576-83f7-11f0-9f89-0200170e3e04_1000028043_HLS/manifest.m3u8
#EXTINF:-1 tvg-id="CJOnStyle.kr@SD",CJ OnStyle
https://live-ch1.cjonstyle.net/cjmalllive/stream2/playlist.m3u8
#EXTINF:-1 tvg-id="KbsWorld.kr@SD",KBS World HD
https://cdn4.skygo.mn/live/disk1/KBSWorld/HLSv3-FTA/KBSWorld.m3u8
#EXTINF:-1 tvg-id="BBCEarth.uk@Asia",BBC Earth HD
https://cdn4.skygo.mn/live/disk1/BBC_earth/HLSv3-FTA/BBC_earth.m3u8
#EXTINF:-1 tvg-id="Cbeebies.uk@Asia",Cbeebies
https://cdn4.skygo.mn/live/disk1/Cbeebies/HLSv3-FTA/Cbeebies.m3u8
#EXTINF:-1 tvg-id="DomashniyInternational.ru@SD",Domashni
https://cdn4.skygo.mn/live/disk1/Domashni/HLSv3-FTA/Domashni.m3u8
#EXTINF:-1 tvg-id="PeretzInternational.ru@SD",Che
https://cdn4.skygo.mn/live/disk1/Che/HLSv3-FTA/Che.m3u8
#EXTINF:-1 tvg-id="FridayInternational.ru@SD",Friday Russia
https://cdn4.skygo.mn/live/disk1/Friday/HLSv3-FTA/Friday.m3u8
#EXTINF:-1 tvg-id="RBKTV.ru@SD", RBK
http://online-video.rbc.ru/online2/rbctv.m3u8
#EXTINF:-1 tvg-id="QazaqstanInternational.kz@SD",Qazaqstan
https://qazaqstantv-stream.qazcdn.com/international/international/playlist.m3u8
#EXTINF:-1 tvg-id="QazSport.kz@SD",QazSport
https://qazsporttv-stream.qazcdn.com/qazsporttv/qazsporttv/playlist.m3u8
#EXTINF:-1 tvg-id="",Action Hollywood Movies
https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-actionhollywood-samsungnz/playlist.m3u8
#EXTINF:-1 tvg-id="KartoonChannel.us@SD",Kartoon Channel
https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-kartoonchannel-samsungnz/playlist.m3u8
#EXTINF:-1 tvg-id="Now70s.uk@SD",Now 70's
https://lightning-now70s-samsungnz.amagi.tv/playlist.m3u8
#EXTINF:-1 tvg-id="Now80s.uk@SD",Now 80's
https://lightning-now80s-samsungnz.amagi.tv/playlist.m3u8
#EXTINF:-1 tvg-id="NOWRock.uk@SD",NOW Rock
https://lightning-now90s-samsungnz.amagi.tv/playlist.m3u8
#EXTINF:-1 tvg-id="OutdoorChannel.us@SD",Outdoor Channel
https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg00718-outdoorchannela-outdoortvnz-samsungnz/playlist.m3u8