From ed648ebcfa121b06270df1e3007813b98b9241d6 Mon Sep 17 00:00:00 2001 From: Shadix A Date: Thu, 29 Jul 2021 23:40:15 +0200 Subject: [PATCH 01/51] ES : Cleaning + Adaptive links --- channels/es.m3u | 54 +++++++------------------------------------------ 1 file changed, 7 insertions(+), 47 deletions(-) diff --git a/channels/es.m3u b/channels/es.m3u index c893d4bd8..c4e8422e9 100644 --- a/channels/es.m3u +++ b/channels/es.m3u @@ -81,20 +81,14 @@ https://streamtv.mediasector.es/hls/activatv/.m3u8 https://streaming01.gestec-video.com/hls/artequatreAlacanti.m3u8 #EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV http://217.182.77.27/live/alcarriatv-livestream.m3u8 -#EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="" tvg-logo="https://i.imgur.com/aJL1mjy.png" group-title="",Alcarria TV (576p) +#EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV http://cls.alcarria.tv/alcarriatv/livestream/playlist.m3u8 -#EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Alcarria TV +#EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV https://cls.alcarria.tv/live/alcarriatv-livestream.m3u8 -#EXTINF:-1 tvg-id="Antena3.es" tvg-name="Antena 3" tvg-country="ES" tvg-language="Spanish" tvg-logo="" group-title="",Antena 3 -http://190.61.37.173:8000/play/a006/index.m3u8 #EXTINF:-1 tvg-id="AragonRadioZaragoza.es" tvg-name="Aragón Radio (Zaragoza)" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Aragón Radio (Zaragoza) https://cartv.streaming.aranova.es/hls/live/aragonradio_aragonradio1.m3u8 #EXTINF:-1 tvg-id="AragonTV.es" tvg-name="Aragón TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/d4/Logo_aragon_tv_2016.png" group-title="",Aragón TV (720p) https://cartv.streaming.aranova.es/hls/live/aragontv_canal1.m3u8 -#EXTINF:-1 tvg-id="Atreseries.es" tvg-name="Atreseries" tvg-country="ES" tvg-language="Spanish" tvg-logo="" group-title="",Atreseries -http://186.101.216.211:8000/play/a0dv -#EXTINF:-1 tvg-id="Atreseries.es" tvg-name="Atreseries" tvg-country="MX" tvg-language="Spanish" tvg-logo="" group-title="",Atreseries -http://190.61.37.173:8000/play/a00b/index.m3u8 #EXTINF:-1 tvg-id="BailenTV.es" tvg-name="Bailén TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Bailén TV (720p) http://cpd.bailen.tv:8080/Playlist_CANAL_24H/playlist.m3u8 #EXTINF:-1 tvg-id="BARVATV.es" tvg-name="BARVA.TV" tvg-country="ES" tvg-language="" tvg-logo="http://barvatvplus.com/wp-content/uploads/2020/12/PicsArt_11-24-11.04.44.png" group-title="",BARVA.TV @@ -112,7 +106,7 @@ https://cdn01.yowi.tv/4131RI73I9/master.m3u8 #EXTINF:-1 tvg-id="Canal10Emporda.es" tvg-name="Canal 10 Empordà" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Canal 10 Empordà http://ventdelnord.tv:8080/escala/directe.m3u8 #EXTINF:-1 tvg-id="Canal2000LaSolana.es" tvg-name="Canal 2000 La Solana" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Canal 2000 La Solana -http://canal2000.berkano-systems.net/streaming/streams/canal2000-720p.m3u8 +http://canal2000.berkano-systems.net/streaming/streams/canal2000.m3u8 #EXTINF:-1 tvg-id="Canal25TV.es" tvg-name="Canal 25 TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/2BBGZ1H.png" group-title="Local",Canal 25 TV (Barbastro) [Not 24/7] https://common01.todostreaming.es/live/tvbarbastro-livestream.m3u8 #EXTINF:-1 tvg-id="Canal33Madrid.es" tvg-name="Canal 33 Madrid" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/1zJpDIX.png" group-title="",Canal 33 Madrid (1080p) @@ -372,43 +366,27 @@ http://streamer1.streamhost.org/salive/logosH/playlist.m3u8 #EXTINF:-1 tvg-id="LogosTV.es" tvg-name="Logos TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://proyectoesperanza.es/wp-content/uploads/2017/02/logos-logo-big.png" group-title="",Logos TV (720p) https://streamer1.streamhost.org/salive/logosH/master.m3u8 #EXTINF:-1 tvg-id="MAccion.es" tvg-name="M. Accion" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Accion -http://212.224.98.207:2200/NL/maccion-esp/index.m3u8?token= -#EXTINF:-1 tvg-id="MAccion.es" tvg-name="M. Accion" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Accion http://5.255.90.184:2001/play/a048 #EXTINF:-1 tvg-id="MComedia.es" tvg-name="M. Comedia" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Comedia -http://212.224.98.207:2200/NL/mcomedia-esp/index.m3u8?token= -#EXTINF:-1 tvg-id="MComedia.es" tvg-name="M. Comedia" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Comedia http://5.255.90.184:2001/play/a03y #EXTINF:-1 tvg-id="MComedia.es" tvg-name="M. Comedia" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Comedia http://5.255.90.184:2001/play/a05f #EXTINF:-1 tvg-id="MDeportes.es" tvg-name="M. Deportes" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Deportes -http://212.224.98.207:2200/NL/mdeporteshd-esp/index.m3u8?token= -#EXTINF:-1 tvg-id="MDeportes.es" tvg-name="M. Deportes" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Deportes http://5.255.90.184:2001/play/a04h #EXTINF:-1 tvg-id="MDeportes.es" tvg-name="M. Deportes" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Deportes http://5.255.90.184:2001/play/a057 #EXTINF:-1 tvg-id="MDrama.es" tvg-name="M. Drama" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Drama -http://212.224.98.207:2200/NL/mdrama-esp/index.m3u8?token= -#EXTINF:-1 tvg-id="MDrama.es" tvg-name="M. Drama" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Drama http://5.255.90.184:2001/play/a049 #EXTINF:-1 tvg-id="MFest.es" tvg-name="M. Fest" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Fest http://5.255.90.184:2001/play/a046 #EXTINF:-1 tvg-id="MFest.es" tvg-name="M. Fest" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Fest http://5.255.90.184:2001/play/a058 #EXTINF:-1 tvg-id="MLaLiga.es" tvg-name="M. La Liga" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. La Liga -http://212.224.98.207:2200/NL/mlaligahd-esp/index.m3u8?token= -#EXTINF:-1 tvg-id="MLaLiga.es" tvg-name="M. La Liga" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. La Liga http://5.255.90.184:2001/play/a04b #EXTINF:-1 tvg-id="MLaLiga.es" tvg-name="M. La Liga" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. La Liga http://5.255.90.184:2001/play/a059 #EXTINF:-1 tvg-id="MLaLiga2.es" tvg-name="M. La Liga 2" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. La Liga 2 -http://212.224.98.207:2200/NL/mlaliga2hd-esp/index.m3u8?token= -#EXTINF:-1 tvg-id="MLaLiga2.es" tvg-name="M. La Liga 2" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. La Liga 2 http://5.255.90.184:2001/play/a03u -#EXTINF:-1 tvg-id="MLigadeCampeones.es" tvg-name="M. Liga de Campeones" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Liga de Campeones -http://212.224.98.207:2200/NL/mlcampeonhd-esp/playlist.m3u8?token= -#EXTINF:-1 tvg-id="MLigadeCampeones2.es" tvg-name="M. Liga de Campeones 2" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",M. Liga de Campeones 2 [Not 24/7] -http://212.224.98.207:2200/NL/mlcampeon2hd-esp/playlist.m3u8?token= #EXTINF:-1 tvg-id="M95TelevisionMarbella.es" tvg-name="M95 Televisión Marbella" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/m95tvmarbella/picture?width=320&height=320" group-title="Local",M95 Televisión Marbella https://limited2.todostreaming.es/live/m95-livestream.m3u8 #EXTINF:-1 tvg-id="MaestratTV.es" tvg-name="Maestrat TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Maestrat TV @@ -445,8 +423,6 @@ https://iptv-all.lanesh4d0w.codes/special/olympics https://adc-hls.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="OndaMadrid.es" tvg-name="Onda Madrid" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/ondamadridradio/picture?width=320&height=320" group-title="",Onda Madrid (360p) http://ondamadridhls-live.hls.adaptive.level3.net/telemadrid/ondamadrid1/index.m3u8 -#EXTINF:-1 tvg-id="OndaMadrid.es" tvg-name="Onda Madrid" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/gh5VQtG.jpg" group-title="",Onda Madrid -http://telemadridhls-live.hls.adaptive.level3.net/telemadrid/tvradio/bitrate_2.m3u8 #EXTINF:-1 tvg-id="OndaMadrid.es" tvg-name="Onda Madrid" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/BA6HVt3.png" group-title="",Onda Madrid (360p) http://telemadridhls-live.hls.adaptive.level3.net/telemadrid/tvradio/index.m3u8 #EXTINF:-1 tvg-id="OndaMezquita7TV.es" tvg-name="OndaMezquita 7 TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",OndaMezquita 7 TV @@ -459,8 +435,6 @@ https://deaplaneta-planetakidz-1-es.samsung.wurl.com/manifest/playlist.m3u8 https://limited12.todostreaming.es/live/ptvcantabria-livestream.m3u8 #EXTINF:-1 tvg-id="PopularTVMelilla.es" tvg-name="Popular TV Melilla" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Popular TV Melilla http://5940924978228.streamlock.net:1935/8009/8009/playlist.m3u8 -#EXTINF:-1 tvg-id="PopularTVMelilla.es" tvg-name="Popular TV Melilla" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Popular TV Melilla -https://5940924978228.streamlock.net/8009/8009/chunklist_w922827150.m3u8 #EXTINF:-1 tvg-id="PopularTVMelilla.es" tvg-name="Popular TV Melilla" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/hwlTrtF.png" group-title="Local",Popular TV Melilla (720p) https://5940924978228.streamlock.net/8009/8009/master.m3u8 #EXTINF:-1 tvg-id="PopularTVMurcia.es" tvg-name="Popular TV Murcia" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Popular TV Murcia [Not 24/7] @@ -713,12 +687,8 @@ https://cdn01.yowi.tv/FFFFFFFFFF/master.m3u8 http://212.104.160.156:1935/live/trebujenatv2/master.m3u8 #EXTINF:-1 tvg-id="TrebujenaTV.es" tvg-name="Trebujena TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://bopiweb.com/imagenes/2580/tomo.1.M-3503739-3.jpg" group-title="Local",Trebujena TV (360p) https://wowzaprod256-i.akamaihd.net/hls/live/779970/7e9bac89/playlist.m3u8 -#EXTINF:-1 tvg-id="TRECE.es" tvg-name="TRECE" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TRECE -https://play.cdn.enetres.net/091DB7AFBD77442B9BA2F141DCC182F5021/live.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="TreceTV.es" tvg-name="Trece TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Trece TV -https://play.cdn.enetres.net/091DB7AFBD77442B9BA2F141DCC182F5021/021/playlist.m3u8 #EXTINF:-1 tvg-id="TRECETV.es" tvg-name="TRECE TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Trece.svg/320px-Trece.svg.png" group-title="",TRECE TV -https://streaming.enetres.net/091DB7AFBD77442B9BA2F141DCC182F5021/live.smil/master.m3u8 +https://play.cdn.enetres.net/091DB7AFBD77442B9BA2F141DCC182F5021/live.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TuyaLaJandaTelevision.es" tvg-name="Tuya La Janda Televisión" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/8lajanda/picture?width=320&height=320" group-title="",Tuya La Janda Televisión http://185.210.20.13:8080/0.m3u8 #EXTINF:-1 tvg-id="TVArtequatre.es" tvg-name="TV Artequatre" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TV Artequatre @@ -745,10 +715,8 @@ https://directes-tv-int.ccma.cat/int/ngrp:tvi_web/playlist_DVR.m3u8 https://unlimited1-us.dps.live/tv5/tv5.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TV5LIMARESHD.es" tvg-name="TV5 LIMARES HD" tvg-country="ES" tvg-language="" tvg-logo="https://pbs.twimg.com/profile_images/1192795318749945858/o-jIBTK-_400x400.jpg" group-title="",TV5 LIMARES HD https://unlimited6-cl.dps.live/tv5/tv5.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="TVG.es" tvg-name="TVG" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVG -http://europa-crtvg.flumotion.com/crtvg/europa_med/chunks.m3u8 -#EXTINF:-1 tvg-id="TVGAmerica.es" tvg-name="TVG América" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/1Z6svKc.jpg" group-title="General",TVG América (720p) -https://america-crtvg.flumotion.com/crtvg/america_high/playlist.m3u8 +#EXTINF:-1 tvg-id="TVGGalicia.es" tvg-name="TVG Galicia" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVG Galicia +http://europa-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGAmerica.es" tvg-name="TVG América" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/1Z6svKc.jpg" group-title="General",TVG América (720p) https://america-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGCultural.es" tvg-name="TVG Cultural" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/KgbNv4G.png" group-title="Local",TVG Cultural (720p) @@ -761,22 +729,18 @@ https://events1-crtvg.flumotion.com/playlist.m3u8 https://amodino-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGInfantil.es" tvg-name="TVG Infantil" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/KgbNv4G.png" group-title="Local",TVG Infantil (720p) https://infantil-crtvg.flumotion.com/playlist.m3u8 -#EXTINF:-1 tvg-id="TVGMomento.es" tvg-name="TVG Momento" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVG Momento -http://momentog-crtvg.flumotion.com:80/playlist.m3u8 #EXTINF:-1 tvg-id="TVGMomento.es" tvg-name="TVG Momento" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/QkhxAuY.png" group-title="Local",TVG Momento (720p) https://momentog-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGMusigal.es" tvg-name="TVG Musigal" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/KgbNv4G.png" group-title="Local",TVG Musigal (360p) https://musigal-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGXabarin.es" tvg-name="TVG Xabarin" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVG Xabarin -http://infantil-crtvg.flumotion.com/chunks.m3u8 +https://infantil-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="tvG2.es" tvg-name="tvG2" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/YAnSTc6.jpg" group-title="Local",tvG2 (720p) https://events2-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="tvG2.es" tvg-name="tvG2" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.ibb.co/2jtvMq0/TVG-GALICIA-2.png" group-title="Local",tvG2 (720p) https://events3-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVMCordoba.es" tvg-name="TVM Córdoba" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/TVM.Cordoba/picture?width=320&height=320" group-title="",TVM Córdoba (414p) http://teledifusion.tv/cordoba/cordobalive/playlist.m3u8 -#EXTINF:-1 tvg-id="TVMCordoba.es" tvg-name="TVM Córdoba" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/HAbq91X.png" group-title="",TVM Córdoba (414p) -http://teledifusion.tv:1935/cordoba/cordobalive/.m3u8 #EXTINF:-1 tvg-id="TVMCordoba.es" tvg-name="TVM Córdoba" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVM Córdoba (414p) https://5924d3ad0efcf.streamlock.net/cordoba/cordobalive/playlist.m3u8 #EXTINF:-1 tvg-id="UDLasPalmasTV.es" tvg-name="UD Las Palmas TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",UD Las Palmas TV @@ -787,10 +751,6 @@ http://78.41.83.88:8880/hls/unesd.m3u8 http://ventdelnord.tv:8080/hls/directe.m3u8 #EXTINF:-1 tvg-id="Vision6TV.es" tvg-name="Visión 6 TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/TB1wMQ7.jpg" group-title="",Visión 6 TV https://secure3.todostreaming.es/live/visionseis-livestream.m3u8 -#EXTINF:-1 tvg-id="WebcamOndaMadrid.es" tvg-name="Webcam OndaMadrid" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Webcam OndaMadrid (360p) -https://telemadridhls2-live-hls.secure2.footprint.net/egress/chandler/telemadrid/ondamadrid_1/index.m3u8 -#EXTINF:-1 tvg-id="WebcamOndaMadrid.es" tvg-name="Webcam OndaMadrid" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Webcam OndaMadrid (720p) -https://telemadridhls2-live-hls.secure2.footprint.net/egress/chandler/telemadrid/tvradio_1/index.m3u8 #EXTINF:-1 tvg-id="XtraTVHD.es" tvg-name="Xtra TV HD" tvg-country="ES" tvg-language="" tvg-logo="https://i.imgur.com/w1Lc150.jpg" group-title="Music",Xtra TV HD https://mccdn-hls-a01-rbx.datah0stn3t.com/live/xtra/playlist.m3u8 #EXTINF:-1 tvg-id="XtraHitsTV.es" tvg-name="XtraHits TV" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",XtraHits TV From 4a8a634d119ff5e2e0fd6e9254ff8c8acbd0e0e1 Mon Sep 17 00:00:00 2001 From: Shadix A Date: Fri, 30 Jul 2021 00:16:45 +0200 Subject: [PATCH 02/51] CN : Beginning cleaning and correcting tvg-ids --- channels/cn.m3u | 108 +++++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/channels/cn.m3u b/channels/cn.m3u index aea30a3f6..d3c9a184e 100644 --- a/channels/cn.m3u +++ b/channels/cn.m3u @@ -1,14 +1,12 @@ #EXTM3U -#EXTINF:-1 tvg-id="ATVAsiaYaZhouDianShiTai.cn" tvg-name="ATV Asia (亞洲電視台)" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://www.hkatv.com/images/logo.png" group-title="",ATV Asia (亞洲電視台) -https://15813114727637862976168173814320.live.prod.hkatv.com/a1_cbr_hi_1080p.m3u8 -#EXTINF:-1 tvg-id="BlueMeiJuPinDao.cn" tvg-name="Blue 美剧频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/BLUE.png" group-title="",Blue 美剧频道 -http://210.210.155.35:80/session/676c25ba-724e-11e9-834b-8ac28bf32f5a/dr9445/h/h16/02.m3u8 #EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV 3" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/HqScjKW.jpg" group-title="",CCTV 3 http://183.207.249.14/PLTV/3/224/3221225588/index.m3u8 #EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV 4" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/l8PQ7fy.jpg" group-title="",CCTV 4 https://cctvcnch5ca.v.wscdns.com/live/cctveurope_2/index.m3u8 #EXTINF:-1 tvg-id="CCTVPLUSLD.cn" tvg-name="CCTV PLUS LD" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS LD (360p) http://cd-live-stream.news.cctvplus.com/live/CHANNEL1_360p/playlist.m3u8 +#EXTINF:-1 tvg-id="CCTVPLUS.cn" tvg-name="CCTV PLUS" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS (720p) +http://cd-live-stream.news.cctvplus.com/live/CHANNEL1/playlist.m3u8 #EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV-1" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV-1 http://223.110.245.159/ott.js.chinamobile.com/PLTV/3/224/3221225852/index.m3u8 #EXTINF:-1 tvg-id="CCTV10.cn" tvg-name="CCTV-10" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV-10 @@ -37,99 +35,99 @@ http://223.110.243.171/PLTV/3/224/3221227204/index.m3u8 http://223.82.250.72/live/cctv-9/1.m3u8 #EXTINF:-1 tvg-id="CCTVNuXingShiShang.cn" tvg-name="CCTV-女性时尚" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV-女性时尚 http://223.110.245.153/ott.js.chinamobile.com/PLTV/3/224/3221227026/index.m3u8 -#EXTINF:-1 tvg-id="1" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 +#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 http://117.148.187.37/PLTV/88888888/224/3221226154/index.m3u8 -#EXTINF:-1 tvg-id="1" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 +#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 http://117.169.120.140:8080/live/cctv-1/.m3u8 -#EXTINF:-1 tvg-id="1" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 +#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 http://121.31.30.90:8085/ysten-business/live/cctv-1/1.m3u8 -#EXTINF:-1 tvg-id="1" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 +#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 http://125.210.152.10:8060/live/CCTV1HD_H265.m3u8 -#EXTINF:-1 tvg-id="1" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 +#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/6/65/CCTV-1_Logo.png" group-title="General",CCTV中国中央电视台-1 综合 http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -#EXTINF:-1 tvg-id="11" tvg-name="CCTV10" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/fd/CCTV-10_Logo.png" group-title="Education",CCTV中国中央电视台-10 科教 +#EXTINF:-1 tvg-id="CCTV10.cn" tvg-name="CCTV10" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/fd/CCTV-10_Logo.png" group-title="Education",CCTV中国中央电视台-10 科教 http://117.169.120.140:8080/live/cctv-10/.m3u8 -#EXTINF:-1 tvg-id="11" tvg-name="CCTV10" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/fd/CCTV-10_Logo.png" group-title="Education",CCTV中国中央电视台-10 科教 +#EXTINF:-1 tvg-id="CCTV10.cn" tvg-name="CCTV10" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/fd/CCTV-10_Logo.png" group-title="Education",CCTV中国中央电视台-10 科教 http://121.31.30.90:8085/ysten-business/live/cctv-10/yst.m3u8 -#EXTINF:-1 tvg-id="12" tvg-name="CCTV11" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9c/CCTV-11_Logo.png" group-title="",CCTV中国中央电视台-11 戏曲 +#EXTINF:-1 tvg-id="CCTV11.cn" tvg-name="CCTV11" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9c/CCTV-11_Logo.png" group-title="",CCTV中国中央电视台-11 戏曲 http://117.148.187.37/PLTV/88888888/224/3221226219/index.m3u8 -#EXTINF:-1 tvg-id="12" tvg-name="CCTV11" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9c/CCTV-11_Logo.png" group-title="",CCTV中国中央电视台-11 戏曲 +#EXTINF:-1 tvg-id="CCTV11.cn" tvg-name="CCTV11" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9c/CCTV-11_Logo.png" group-title="",CCTV中国中央电视台-11 戏曲 http://117.169.120.140:8080/live/cctv-11/.m3u8 -#EXTINF:-1 tvg-id="12" tvg-name="CCTV11" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9c/CCTV-11_Logo.png" group-title="",CCTV中国中央电视台-11 戏曲 +#EXTINF:-1 tvg-id="CCTV11.cn" tvg-name="CCTV11" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9c/CCTV-11_Logo.png" group-title="",CCTV中国中央电视台-11 戏曲 http://121.31.30.90:8085/ysten-business/live/cctv-11/1.m3u8 -#EXTINF:-1 tvg-id="13" tvg-name="CCTV12" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/7/71/CCTV-12_Logo.png" group-title="",CCTV中国中央电视台-12 社会与法制 +#EXTINF:-1 tvg-id="CCTV12.cn" tvg-name="CCTV12" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/7/71/CCTV-12_Logo.png" group-title="",CCTV中国中央电视台-12 社会与法制 http://117.148.187.37/PLTV/88888888/224/3221226167/index.m3u8 -#EXTINF:-1 tvg-id="13" tvg-name="CCTV12" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/7/71/CCTV-12_Logo.png" group-title="",CCTV中国中央电视台-12 社会与法制 +#EXTINF:-1 tvg-id="CCTV12.cn" tvg-name="CCTV12" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/7/71/CCTV-12_Logo.png" group-title="",CCTV中国中央电视台-12 社会与法制 http://121.31.30.90:8085/ysten-business/live/cctv-12/1.m3u8 -#EXTINF:-1 tvg-id="14" tvg-name="CCTV13" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0b/CCTV-13_Logo.png" group-title="News",CCTV中国中央电视台-13 新闻 +#EXTINF:-1 tvg-id="CCTV13.cn" tvg-name="CCTV13" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0b/CCTV-13_Logo.png" group-title="News",CCTV中国中央电视台-13 新闻 http://117.148.187.37/PLTV/88888888/224/3221226193/index.m3u8 -#EXTINF:-1 tvg-id="14" tvg-name="CCTV13" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0b/CCTV-13_Logo.png" group-title="News",CCTV中国中央电视台-13 新闻 +#EXTINF:-1 tvg-id="CCTV13.cn" tvg-name="CCTV13" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0b/CCTV-13_Logo.png" group-title="News",CCTV中国中央电视台-13 新闻 http://117.169.120.140:8080/live/cctv-13/.m3u8 -#EXTINF:-1 tvg-id="14" tvg-name="CCTV13" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0b/CCTV-13_Logo.png" group-title="News",CCTV中国中央电视台-13 新闻 +#EXTINF:-1 tvg-id="CCTV13.cn" tvg-name="CCTV13" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0b/CCTV-13_Logo.png" group-title="News",CCTV中国中央电视台-13 新闻 http://121.31.30.90:8085/ysten-business/live/cctv-13/1.m3u8 -#EXTINF:-1 tvg-id="15" tvg-name="CCTV14" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/c8/CCTV-14_Logo.png" group-title="Kids",CCTV中国中央电视台-14 少儿 +#EXTINF:-1 tvg-id="CCTV14.cn" tvg-name="CCTV14" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/c8/CCTV-14_Logo.png" group-title="Kids",CCTV中国中央电视台-14 少儿 http://117.148.187.37/PLTV/88888888/224/3221226126/index.m3u8 -#EXTINF:-1 tvg-id="15" tvg-name="CCTV14" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/c8/CCTV-14_Logo.png" group-title="Kids",CCTV中国中央电视台-14 少儿 +#EXTINF:-1 tvg-id="CCTV14.cn" tvg-name="CCTV14" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/c8/CCTV-14_Logo.png" group-title="Kids",CCTV中国中央电视台-14 少儿 http://117.148.187.37/PLTV/88888888/224/3221226565/index.m3u8 -#EXTINF:-1 tvg-id="15" tvg-name="CCTV14" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/c8/CCTV-14_Logo.png" group-title="Kids",CCTV中国中央电视台-14 少儿 +#EXTINF:-1 tvg-id="CCTV14.cn" tvg-name="CCTV14" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/c/c8/CCTV-14_Logo.png" group-title="Kids",CCTV中国中央电视台-14 少儿 http://121.31.30.90:8085/ysten-business/live/cctv-14/1.m3u8 -#EXTINF:-1 tvg-id="16" tvg-name="CCTV15" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f8/CCTV-15_Logo.png" group-title="Music",CCTV中国中央电视台-15 音乐 +#EXTINF:-1 tvg-id="CCTV15.cn" tvg-name="CCTV15" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f8/CCTV-15_Logo.png" group-title="Music",CCTV中国中央电视台-15 音乐 http://121.31.30.90:8085/ysten-business/live/cctv-15/1.m3u8 -#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 +#EXTINF:-1 tvg-id="CCTV2.cn" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 http://117.148.187.37/PLTV/88888888/224/3221226138/index.m3u8 -#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 +#EXTINF:-1 tvg-id="CCTV2.cn" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 http://117.169.120.140:8080/live/cctv-2/.m3u8 -#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 +#EXTINF:-1 tvg-id="CCTV2.cn" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 http://121.31.30.90:8085/ysten-business/live/cctv-2/1.m3u8 -#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 +#EXTINF:-1 tvg-id="CCTV2.cn" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 http://121.31.30.90:8085/ysten-business/live/cctv-2/yst.m3u8 -#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 +#EXTINF:-1 tvg-id="CCTV2.cn" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 http://125.210.152.10:8060/live/CCTV2HD_H265.m3u8 -#EXTINF:-1 tvg-id="2" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 +#EXTINF:-1 tvg-id="CCTV2.cn" tvg-name="CCTV2" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/3/34/CCTV-2_Logo.svg/800px-CCTV-2_Logo.svg.png" group-title="",CCTV中国中央电视台-2 财经 http://ivi.bupt.edu.cn/hls/cctv2.m3u8 -#EXTINF:-1 tvg-id="3" tvg-name="CCTV3" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV中国中央电视台-3 综艺 +#EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV3" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV中国中央电视台-3 综艺 http://117.169.120.140:8080/live/cctv-3/.m3u8 -#EXTINF:-1 tvg-id="3" tvg-name="CCTV3" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV中国中央电视台-3 综艺 +#EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV3" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV中国中央电视台-3 综艺 http://121.31.30.90:8085/ysten-business/live/cctv-3/1.m3u8 -#EXTINF:-1 tvg-id="3" tvg-name="CCTV3" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV中国中央电视台-3 综艺 +#EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV3" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/34/CCTV-3_Logo.png" group-title="Entertainment",CCTV中国中央电视台-3 综艺 http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8 -#EXTINF:-1 tvg-id="4" tvg-name="CCTV4" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/0/07/CCTV-4_Logo.svg/800px-CCTV-4_Logo.svg.png" group-title="General",CCTV中国中央电视台-4 中文国际 +#EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV4" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/0/07/CCTV-4_Logo.svg/800px-CCTV-4_Logo.svg.png" group-title="General",CCTV中国中央电视台-4 中文国际 http://117.148.187.37/PLTV/88888888/224/3221226171/index.m3u8 -#EXTINF:-1 tvg-id="4" tvg-name="CCTV4" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/0/07/CCTV-4_Logo.svg/800px-CCTV-4_Logo.svg.png" group-title="General",CCTV中国中央电视台-4 中文国际 +#EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV4" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/0/07/CCTV-4_Logo.svg/800px-CCTV-4_Logo.svg.png" group-title="General",CCTV中国中央电视台-4 中文国际 http://117.169.120.140:8080/live/cctv-4/.m3u8 -#EXTINF:-1 tvg-id="4" tvg-name="CCTV4" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/0/07/CCTV-4_Logo.svg/800px-CCTV-4_Logo.svg.png" group-title="General",CCTV中国中央电视台-4 中文国际 +#EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV4" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/0/07/CCTV-4_Logo.svg/800px-CCTV-4_Logo.svg.png" group-title="General",CCTV中国中央电视台-4 中文国际 http://121.31.30.90:8085/ysten-business/live/cctv-4/1.m3u8 -#EXTINF:-1 tvg-id="5" tvg-name="CCTV5" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/33/CCTV-5_Logo.png" group-title="Sports",CCTV中国中央电视台-5 体育 +#EXTINF:-1 tvg-id="CCTV5.cn" tvg-name="CCTV5" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/33/CCTV-5_Logo.png" group-title="Sports",CCTV中国中央电视台-5 体育 http://117.148.187.37/PLTV/88888888/224/3221226400/index.m3u8 -#EXTINF:-1 tvg-id="5" tvg-name="CCTV5" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/33/CCTV-5_Logo.png" group-title="Sports",CCTV中国中央电视台-5 体育 +#EXTINF:-1 tvg-id="CCTV5.cn" tvg-name="CCTV5" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/33/CCTV-5_Logo.png" group-title="Sports",CCTV中国中央电视台-5 体育 http://121.31.30.90:8085/ysten-business/live/cctv-5/yst.m3u8 -#EXTINF:-1 tvg-id="6" tvg-name="CCTV5+" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/90/CCTV-5%2B_Logo.png" group-title="Sports",CCTV中国中央电视台-5+ 体育赛事 +#EXTINF:-1 tvg-id="CCTV5.cn" tvg-name="CCTV5+" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/90/CCTV-5%2B_Logo.png" group-title="Sports",CCTV中国中央电视台-5+ 体育赛事 http://121.31.30.90:8085/ysten-business/live/hdcctv05plus/yst.m3u8 -#EXTINF:-1 tvg-id="6" tvg-name="CCTV5+" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/90/CCTV-5%2B_Logo.png" group-title="Sports",CCTV中国中央电视台-5+ 体育赛事 +#EXTINF:-1 tvg-id="CCTV5Plus.cn" tvg-name="CCTV5+" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/90/CCTV-5%2B_Logo.png" group-title="Sports",CCTV中国中央电视台-5+ 体育赛事 http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8 -#EXTINF:-1 tvg-id="7" tvg-name="CCTV6" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0c/CCTV-6_Logo.png" group-title="Movies",CCTV中国中央电视台-6 电影 +#EXTINF:-1 tvg-id="CCTV6.cn" tvg-name="CCTV6" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0c/CCTV-6_Logo.png" group-title="Movies",CCTV中国中央电视台-6 电影 http://117.169.120.140:8080/live/cctv-6/.m3u8 -#EXTINF:-1 tvg-id="7" tvg-name="CCTV6" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0c/CCTV-6_Logo.png" group-title="Movies",CCTV中国中央电视台-6 电影 +#EXTINF:-1 tvg-id="CCTV6.cn" tvg-name="CCTV6" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0c/CCTV-6_Logo.png" group-title="Movies",CCTV中国中央电视台-6 电影 http://121.31.30.90:8085/ysten-business/live/cctv-6/1.m3u8 -#EXTINF:-1 tvg-id="7" tvg-name="CCTV6" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0c/CCTV-6_Logo.png" group-title="Movies",CCTV中国中央电视台-6 电影 +#EXTINF:-1 tvg-id="CCTV6.cn" tvg-name="CCTV6" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/0c/CCTV-6_Logo.png" group-title="Movies",CCTV中国中央电视台-6 电影 http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8 -#EXTINF:-1 tvg-id="8" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 +#EXTINF:-1 tvg-id="CCTV7.cn" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 http://117.148.187.37/PLTV/88888888/224/3221226122/index.m3u8 -#EXTINF:-1 tvg-id="8" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 +#EXTINF:-1 tvg-id="CCTV7.cn" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 http://117.148.187.37/PLTV/88888888/224/3221226470/index.m3u8 -#EXTINF:-1 tvg-id="8" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 +#EXTINF:-1 tvg-id="CCTV7.cn" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 http://117.169.120.140:8080/live/cctv-7/.m3u8 -#EXTINF:-1 tvg-id="8" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 +#EXTINF:-1 tvg-id="CCTV7.cn" tvg-name="CCTV7" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/f/f0/CCTV-7_Logo.png" group-title="",CCTV中国中央电视台-7 国防军事 http://121.31.30.90:8085/ysten-business/live/cctv-7/1.m3u8 -#EXTINF:-1 tvg-id="9" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 +#EXTINF:-1 tvg-id="CCTV8.cn" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 http://117.148.187.37/PLTV/88888888/224/3221226493/index.m3u8 -#EXTINF:-1 tvg-id="9" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 +#EXTINF:-1 tvg-id="CCTV8.cn" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 http://117.169.120.140:8080/live/cctv-8/.m3u8 -#EXTINF:-1 tvg-id="9" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 +#EXTINF:-1 tvg-id="CCTV8.cn" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 http://121.31.30.90:8085/ysten-business/live/cctv-8/1.m3u8 -#EXTINF:-1 tvg-id="9" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 +#EXTINF:-1 tvg-id="CCTV8.cn" tvg-name="CCTV8" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/49/CCTV-8_Logo.png" group-title="",CCTV中国中央电视台-8 电视剧 http://ivi.bupt.edu.cn/hls/cctv8hd.m3u8 -#EXTINF:-1 tvg-id="10" tvg-name="CCTV9" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/1/11/CCTV-9_Logo.png" group-title="Documentary",CCTV中国中央电视台-9 纪录 +#EXTINF:-1 tvg-id="CCTV9.cn" tvg-name="CCTV9" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/1/11/CCTV-9_Logo.png" group-title="Documentary",CCTV中国中央电视台-9 纪录 http://117.148.187.37/PLTV/88888888/224/3221226156/index.m3u8 #EXTINF:-1 tvg-id="CGTN.cn" tvg-name="CGTN" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6rlt5Ph.png" group-title="",CGTN http://live.cgtn.com/500/prog_index.m3u8 @@ -331,15 +329,13 @@ http://111.231.194.231:85/live/lyzx.m3u8 http://111.231.194.231:85/live/lyzx_500k.m3u8 #EXTINF:-1 tvg-id="YunNanGongGong.cn" tvg-name="云南公共" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/yunnan.png" group-title="",云南公共 http://yntvpullhls.ynradio.com/live/yunnangonggong/playlist.m3u8 -#EXTINF:-1 tvg-id="58" tvg-name="云南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",云南卫视 +#EXTINF:-1 tvg-id="YunNanWeiShi.cn" tvg-name="云南卫视" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",云南卫视 http://121.31.30.90:8085/ysten-business/live/yunnanstv/1.m3u8 -#EXTINF:-1 tvg-id="58" tvg-name="云南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",云南卫视 -http://121.31.30.90:8085/ysten-business/live/yunnanstv/yst.m3u8 #EXTINF:-1 tvg-id="YunNanWeiShi.cn" tvg-name="云南卫视" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",云南卫视 http://223.110.245.157/ott.js.chinamobile.com/PLTV/3/224/3221225591/index.m3u8 -#EXTINF:-1 tvg-id="58" tvg-name="云南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",云南卫视 +#EXTINF:-1 tvg-id="YunNanWeiShi.cn" tvg-name="云南卫视" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",云南卫视 http://ivi.bupt.edu.cn/hls/yntv.m3u8 -#EXTINF:-1 tvg-id="58" tvg-name="云南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",云南卫视 +#EXTINF:-1 tvg-id="YunNanWeiShi.cn" tvg-name="云南卫视" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",云南卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/yunnanstv/1.m3u8 #EXTINF:-1 tvg-id="YunNanGuoJi.cn" tvg-name="云南国际" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/yunnan.png" group-title="",云南国际 http://yntvpullhls.ynradio.com/live/yunnanguoji/playlist.m3u8 From dfd86b5cbcc56ba65cc07191b46baae8d9d96e43 Mon Sep 17 00:00:00 2001 From: Omega Date: Mon, 2 Aug 2021 01:27:00 +0200 Subject: [PATCH 03/51] Update us.m3u --- channels/us.m3u | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/channels/us.m3u b/channels/us.m3u index eb0b125f9..ee4f7f15a 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -5675,18 +5675,10 @@ http://stadium.sinclair.wurl.com/manifest/playlist.m3u8 https://dai.google.com/linear/hls/event/0jRU1DBXSW6a_TFheLfAUQ/master.m3u8 #EXTINF:-1 tvg-id="StadiumLiveHD.us" tvg-name="Stadium | Live HD" tvg-country="US" tvg-language="English" tvg-logo="https://raw.githubusercontent.com/geonsey/Free2ViewTV/master/images/logos/Stadium.png" group-title="Sports",Stadium | Live HD (720p) https://bcovlive-a.akamaihd.net/e64d564b9275484f85981d8c146fb915/us-east-1/5994000126001/f3d8696d886f4c3b9612132643061743/playlist_ssaiM.m3u8 -#EXTINF:-1 tvg-id="STARAction.us" tvg-name="STAR Action Latinoamérica" tvg-country="LATAM" tvg-language="Spanish" tvg-logo="" group-title="",STAR Action Latinoamérica -http://209.91.213.10:8088/play/a02b #EXTINF:-1 tvg-id="STARChannel.us" tvg-name="STAR Channel (Spain)" tvg-country="ES" tvg-language="Spanish;English" tvg-logo="https://i.imgur.com/e4izZbC.jpg" group-title="",STAR Channel (Spain) http://45.179.140.242:8000/play/a0h5 -#EXTINF:-1 tvg-id="STARClassics.us" tvg-name="STAR Classics Latinoamérica" tvg-country="LATAM" tvg-language="Spanish" tvg-logo="" group-title="",STAR Classics Latinoamérica -http://209.91.213.10:8088/play/a02d -#EXTINF:-1 tvg-id="STARFun.us" tvg-name="STAR Fun Latinoamérica" tvg-country="LATAM" tvg-language="Spanish" tvg-logo="" group-title="",STAR Fun Latinoamérica -http://209.91.213.10:8088/play/a02c #EXTINF:-1 tvg-id="STARLife.us" tvg-name="STAR Life (Spain)" tvg-country="ES" tvg-language="Spanish;English" tvg-logo="https://i.imgur.com/e4izZbC.png" group-title="",STAR Life (Spain) http://45.179.140.242:8000/play/a0h4 -#EXTINF:-1 tvg-id="STARLife.us" tvg-name="STAR Life Latinoamérica" tvg-country="LATAM" tvg-language="English;Spanish" tvg-logo="https://i.imgur.com/e4izZbC.png" group-title="",STAR Life Latinoamérica -http://209.91.213.10:8088/play/a00q #EXTINF:-1 tvg-id="STARMOVIEMIHDSTIRR.us" tvg-name="STAR MOVIEMI HD (STIRR)" tvg-country="US" tvg-language="English" tvg-logo="https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcT2kTZnEQilym8ptRCEoFwFHsTvp0m_y-VOdvWZSFErs4Nyke_m&usqp=CAU" group-title="",STAR MOVIEMI HD (STIRR) https://sonar.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="KVBCLP2.us" tvg-name="StartTV West (13.2 KVBC-LP2)" tvg-country="US" tvg-language="English" tvg-logo="https://media-usba.mybtv.net/logos/starttv.png" group-title="Entertainment",StartTV West (13.2 KVBC-LP2) @@ -5780,7 +5772,7 @@ https://tastemade-xumo.amagi.tv/hls/amagi_hls_data_tastemade-tastemadefreetv16xu #EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade https://tastemade.samsung.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade -https://tastemadefr16min-redbox.amagi.tv/hls/amagi_hls_data_tastemade-tastemadefreetv16-redbox/CDN/playlist.m3u8?p=Redbox&deviceid=&is_lat=&subp=RedboxdesktopWebWindows +https://tastemadefr16min-redbox.amagi.tv/hls/amagi_hls_data_tastemade-tastemadefreetv16-redbox/CDN/playlist.m3u8 #EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade (1080p) https://tastemadessai.akamaized.net/amagi_hls_data_tastemade-tastemade/CDN/playlist.m3u8 #EXTINF:-1 tvg-id="TastemadeBrazil.us" tvg-name="Tastemade (Brazil)" tvg-country="US" tvg-language="" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade (Brazil) From d09d098a890bbc182dec0f5afaece21a4fae1fcf Mon Sep 17 00:00:00 2001 From: Shadix A Date: Sat, 7 Aug 2021 13:56:08 +0200 Subject: [PATCH 04/51] Provide adaptive links + add CCTV+ Channel 2 Channel 2 is mostly retransmitting CGTN programmation in both Chinese and English. --- channels/cn.m3u | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/channels/cn.m3u b/channels/cn.m3u index e427b39ec..659c5e3c3 100644 --- a/channels/cn.m3u +++ b/channels/cn.m3u @@ -1,12 +1,14 @@ #EXTM3U #EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV 3" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/HqScjKW.jpg" group-title="",CCTV 3 http://183.207.249.14/PLTV/3/224/3221225588/index.m3u8 +#EXTINF:-1 tvg-id="BlueMeiJuPinDao.cn" tvg-name="Blue 美剧频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/BLUE.png" group-title="",Blue 美剧频道 [Geo-blocked] +http://210.210.155.35:80/dr9445/h/h16/02.m3u8 #EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV 4" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/l8PQ7fy.jpg" group-title="",CCTV 4 https://cctvcnch5ca.v.wscdns.com/live/cctveurope_2/index.m3u8 -#EXTINF:-1 tvg-id="CCTVPLUSLD.cn" tvg-name="CCTV PLUS LD" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS LD (360p) -http://cd-live-stream.news.cctvplus.com/live/CHANNEL1_360p/playlist.m3u8 -#EXTINF:-1 tvg-id="CCTVPLUS.cn" tvg-name="CCTV PLUS" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS (720p) -http://cd-live-stream.news.cctvplus.com/live/CHANNEL1/playlist.m3u8 +#EXTINF:-1 tvg-id="CCTVPLUS.cn" tvg-name="CCTV PLUS" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS Channel 1 (720p) +https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/playlist.m3u8 +#EXTINF:-1 tvg-id="CCTVPLUS.cn" tvg-name="CCTV PLUS" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS Channel 2 (720p) +https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL2.smil/playlist.m3u8 #EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV-1" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV-1 http://223.110.245.159/ott.js.chinamobile.com/PLTV/3/224/3221225852/index.m3u8 #EXTINF:-1 tvg-id="CCTV10.cn" tvg-name="CCTV-10" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV-10 From e5ae5d8f34d1eb4db853b8306ed325f03cb0ac4b Mon Sep 17 00:00:00 2001 From: Shadix A Date: Sat, 7 Aug 2021 14:43:17 +0200 Subject: [PATCH 05/51] Continue updating CN --- channels/cn.m3u | 204 +++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 113 deletions(-) diff --git a/channels/cn.m3u b/channels/cn.m3u index 659c5e3c3..58ad374a6 100644 --- a/channels/cn.m3u +++ b/channels/cn.m3u @@ -131,44 +131,26 @@ http://121.31.30.90:8085/ysten-business/live/cctv-8/1.m3u8 http://ivi.bupt.edu.cn/hls/cctv8hd.m3u8 #EXTINF:-1 tvg-id="CCTV9.cn" tvg-name="CCTV9" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/1/11/CCTV-9_Logo.png" group-title="Documentary",CCTV中国中央电视台-9 纪录 http://117.148.187.37/PLTV/88888888/224/3221226156/index.m3u8 -#EXTINF:-1 tvg-id="CGTN.cn" tvg-name="CGTN" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6rlt5Ph.png" group-title="",CGTN -http://live.cgtn.com/500/prog_index.m3u8 -#EXTINF:-1 tvg-id="CGTN.cn" tvg-name="CGTN" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CGTN (432p) +#EXTINF:-1 tvg-id="CGTNEnglish.cn" tvg-name="CGTN English" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN English (720p) https://dai.google.com/linear/hls/event/r4sa-f6GSN2XIvzKv5jVng/master.m3u8 -#EXTINF:-1 tvg-id="18" tvg-name="CGTN" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN (720p) +#EXTINF:-1 tvg-id="CGTNEnglish.cn" tvg-name="CGTN English" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN English (720p) https://news.cgtn.com/resource/live/english/cgtn-news.m3u8 -#EXTINF:-1 tvg-id="CGTN.cn" tvg-name="CGTN" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CGTN (720p) +#EXTINF:-1 tvg-id="CGTNEspanol.cn" tvg-name="CGTN Español" tvg-country="CN" tvg-language="Spanish" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN Español (720p) https://news.cgtn.com/resource/live/espanol/cgtn-e.m3u8 -#EXTINF:-1 tvg-id="CGTN1.cn" tvg-name="CGTN 1" tvg-country="CN" tvg-language="Spanish" tvg-logo="https://astrocontent.s3.amazonaws.com/Images/ChannelLogo/Pos/509_300.png" group-title="",CGTN 1 -https://livees.cgtn.com/1000e/prog_index.m3u8 -#EXTINF:-1 tvg-id="CGTNArabic.cn" tvg-name="CGTN Arabic" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CGTN Arabic -http://livear.cgtn.com/1000a/prog_index.m3u8 -#EXTINF:-1 tvg-id="CGTNArabic.cn" tvg-name="CGTN Arabic" tvg-country="CN" tvg-language="Arabic" tvg-logo="https://ui.cgtn.com/static/resource/images/icon_new/live/live_AR.png" group-title="",CGTN Arabic (720p) +#EXTINF:-1 tvg-id="CGTNArabic.cn" tvg-name="CGTN Arabic" tvg-country="CN" tvg-language="Arabic" tvg-logo="https://ui.cgtn.com/static/resource/images/icon_new/live/live_AR.png" group-title="News",CGTN Arabic (720p) https://news.cgtn.com/resource/live/arabic/cgtn-a.m3u8 -#EXTINF:-1 tvg-id="472" tvg-name="CGTNDocumentary" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/d6/CGTN_Documentary_logo.png" group-title="Documentary",CGTN Documentary +#EXTINF:-1 tvg-id="CGTNDocumentary.cn" tvg-name="CGTN Documentary" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/d6/CGTN_Documentary_logo.png" group-title="Documentary",CGTN Documentary (English) http://121.31.30.90:8085/ysten-business/live/cctv-9/yst.m3u8 -#EXTINF:-1 tvg-id="CGTNDocumentary.cn" tvg-name="CGTN Documentary" tvg-country="CN" tvg-language="" tvg-logo="" group-title="Documentary",CGTN Documentary -https://livedoc.cgtn.com/500d/prog_index.m3u8 -#EXTINF:-1 tvg-id="CGTNDocumentaryEN.cn" tvg-name="CGTN Documentary EN" tvg-country="CN" tvg-language="" tvg-logo="" group-title="Documentary",CGTN Documentary EN (720p) +#EXTINF:-1 tvg-id="CGTNDocumentary.cn" tvg-name="CGTN Documentary" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/d6/CGTN_Documentary_logo.png" group-title="Documentary",CGTN Documentary (English) https://news.cgtn.com/resource/live/document/cgtn-doc.m3u8 -#EXTINF:-1 tvg-id="CGTNDocumentaryZhongGuo.cn" tvg-name="CGTN Documentary(中国)" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://static.epg.best/au/CGTNDocu.au.png" group-title="News",CGTN Documentary(中国) -https://livedoc.cgtn.com/1000d/prog_index.m3u8 -#EXTINF:-1 tvg-id="CGTNEspanol.cn" tvg-name="CGTN Español" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CGTN Español -http://livees.cgtn.com/500e/prog_index.m3u8 -#EXTINF:-1 tvg-id="CGTNFrance.cn" tvg-name="CGTN France" tvg-country="FR" tvg-language="French" tvg-logo="https://i.imgur.com/yXc4j9J.png" group-title="",CGTN France -http://livefr.cgtn.com/1000f/prog_index.m3u8 #EXTINF:-1 tvg-id="CGTNFrancais.cn" tvg-name="CGTN Français" tvg-country="CN" tvg-language="French" tvg-logo="" group-title="",CGTN Français (720p) https://news.cgtn.com/resource/live/french/cgtn-f.m3u8 -#EXTINF:-1 tvg-id="CGTNZhongGuo.cn" tvg-name="CGTN(中国)" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://static.epg.best/au/CGTN.au.png" group-title="News",CGTN(中国) -https://live.cgtn.com/1000/prog_index.m3u8 #EXTINF:-1 tvg-id="ChannelV.cn" tvg-name="Channel V" tvg-country="APAC" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Channel_V_Logo.svg/1200px-Channel_V_Logo.svg.png" group-title="Music",Channel V rtmp://ivi.bupt.edu.cn:1935/livetv/channelv -#EXTINF:-1 tvg-id="6241" tvg-name="CHC高清电影" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://i.imgur.com/GjGiNIA.jpg" group-title="Movies",CHC高清电影 +#EXTINF:-1 tvg-id="CHCGaoQīngDianYing.cn" tvg-name="CHC高清电影" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://i.imgur.com/GjGiNIA.jpg" group-title="Movies",CHC高清电影 http://ivi.bupt.edu.cn/hls/chchd.m3u8 -#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",CNC中文 +#EXTINF:-1 tvg-id="CNCZhongWen.cn" tvg-name="CNC中文" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",CNC中文 http://source07.v.news.cn/live/CNC_CN/playlist.m3u8 -#EXTINF:-1 tvg-id="CCTV1.cn" tvg-name="CCTV1" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",CNC英文 -http://source07.v.news.cn/live/CNC_EN/playlist.m3u8 #EXTINF:-1 tvg-id="HunanCity.cn" tvg-name="Hunan City" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",Hunan City (576p) http://hnsd.chinashadt.com:2036/live/stream:hunandushi.stream/playlist.m3u8 #EXTINF:-1 tvg-id="iHOTAiDongMan.cn" tvg-name="iHOT爱动漫" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",iHOT爱动漫 @@ -234,9 +216,9 @@ http://123.146.162.24:8013/tslslive/vWlnEzU/hls/live_sd.m3u8 #EXTINF:-1 tvg-id="WanShengXinWenZongHe.cn" tvg-name="万盛新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",万盛新闻综合 (576p) http://qxlmlive.cbg.cn:1935/app_2/ls_40.stream/playlist.m3u8 #EXTINF:-1 tvg-id="SanMingGongGongPinDao.cn" tvg-name="三明公共频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",三明公共频道 -http://stream.smntv.cn/smtv2/sd/live.m3u8 +http://stream.smntv.cn/smtv2/playlist.m3u8 #EXTINF:-1 tvg-id="SanMingXinWenZongHe.cn" tvg-name="三明新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",三明新闻综合 -http://stream.smntv.cn/smtv1/sd/live.m3u8 +http://stream.smntv.cn/smtv1/playlist.m3u8 #EXTINF:-1 tvg-id="SanLiXinWen.cn" tvg-name="三立新聞" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/gt/SETNews.png" group-title="News",三立新聞 http://seb.sason.top/sc/sllive_fhd.m3u8 #EXTINF:-1 tvg-id="ShangHaiDongFangWeiShi.cn" tvg-name="上海东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",上海东方卫视 @@ -251,27 +233,25 @@ http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8 http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8 #EXTINF:-1 tvg-id="DongXiangDianShiTai.cn" tvg-name="东乡电视台" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/2/28/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png" group-title="",东乡电视台 http://117.156.28.119/270000001111/1110000131/index.m3u8 -#EXTINF:-1 tvg-id="41" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 +#EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://121.31.30.90:8085/ysten-business/live/dongnanstv/1.m3u8 -#EXTINF:-1 tvg-id="41" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 +#EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://121.31.30.90:8085/ysten-business/live/dongnanstv/yst.m3u8 -#EXTINF:-1 tvg-id="41" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 +#EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://ivi.bupt.edu.cn/hls/dntv.m3u8 -#EXTINF:-1 tvg-id="41" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 +#EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/dongnanstv/1.m3u8 -#EXTINF:-1 tvg-id="41" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视高清 +#EXTINF:-1 tvg-id="DongNanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://117.169.120.140:8080/live/dongnanstv/.m3u8 -#EXTINF:-1 tvg-id="31" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东方卫视 -http://121.31.30.90:8085/ysten-business/live/dongfangstv/1.m3u8 -#EXTINF:-1 tvg-id="31" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东方卫视 -http://121.31.30.90:8085/ysten-business/live/dongfangstv/yst.m3u8 #EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 -http://ivi.bupt.edu.cn/hls/dftv.m3u8 -#EXTINF:-1 tvg-id="31" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东方卫视FHD +http://121.31.30.90:8085/ysten-business/live/dongfangstv/1.m3u8 +#EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 +http://121.31.30.90:8085/ysten-business/live/dongfangstv/yst.m3u8 +#EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 HD http://117.148.187.37/PLTV/88888888/224/3221226142/index.m3u8 -#EXTINF:-1 tvg-id="31" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东方卫视HD +#EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 HD http://121.31.30.90:8085/ysten-business/live/hddongfangstv/1.m3u8 -#EXTINF:-1 tvg-id="31" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东方卫视HD +#EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 HD http://223.82.250.72/live/hddongfangstv/1.m3u8 #EXTINF:-1 tvg-id="DongChangDaoShiPinDao.cn" tvg-name="东昌导视频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东昌导视频道 (576p) http://sddc.chinashadt.com:1936/live/gonggong.stream/playlist.m3u8 @@ -363,16 +343,16 @@ http://220.180.110.101:8083/videos/live/39/13/o4ncrHkSp7q09/o4ncrHkSp7q09.M3U8 http://220.180.110.101:8083/videos/live/33/59/NC7XQdEveyncq/NC7XQdEveyncq.M3U8 #EXTINF:-1 tvg-id="JinRiELuoSi.cn" tvg-name="今日俄罗斯" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Russia-today-logo.svg/1200px-Russia-today-logo.svg.png" group-title="",今日俄罗斯 https://rt-news-gd.secure2.footprint.net/1103_2500Kb.m3u8 -#EXTINF:-1 tvg-id="6605" tvg-name="优优宝贝" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.wangjing.cn/upload/ypshop/1363166697e721a.jpg" group-title="",优优宝贝 +#EXTINF:-1 tvg-id="YouYouBaoBei.cn" tvg-name="优优宝贝" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.wangjing.cn/upload/ypshop/1363166697e721a.jpg" group-title="",优优宝贝 http://112.17.40.140/PLTV/88888888/224/3221226829/index.m3u8 -#EXTINF:-1 tvg-id="1046" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 +#EXTINF:-1 tvg-id="YouManKaTon.cn" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 http://121.31.30.90:8085/ysten-business/live/youmankaton/1.m3u8 -#EXTINF:-1 tvg-id="1046" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 +#EXTINF:-1 tvg-id="YouManKaTon.cn" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 http://121.31.30.90:8085/ysten-business/live/youmankaton/yst.m3u8 -#EXTINF:-1 tvg-id="1046" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 +#EXTINF:-1 tvg-id="YouManKaTon.cn" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/youmankaton/1.m3u8 #EXTINF:-1 tvg-id="YouShiPinDao.cn" tvg-name="优视频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",优视频道 -http://1-fss24-s0.streamhoster.com/lv_uchannel/_definst_/broadcast1/chunklist.m3u8 +http://1-fss24-s0.streamhoster.com/lv_uchannel/broadcast1/playlist.m3u8 #EXTINF:-1 tvg-id="YuYaoXinWenZongHe.cn" tvg-name="余姚新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",余姚新闻综合 http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8 #EXTINF:-1 tvg-id="QiaoXiangPinDao.cn" tvg-name="侨乡频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="qiaoxiangpingdao.png" group-title="",侨乡频道 @@ -386,27 +366,25 @@ http://121.31.30.91:8081/ysten-business/live/ljiankangyouyue/1.m3u8 #EXTINF:-1 tvg-id="GongGongNongCun.cn" tvg-name="公共农村" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",公共农村 http://219.153.252.50/PLTV/88888888/224/3221225626/chunklist.m3u8 #EXTINF:-1 tvg-id="LiuAnGongGongPinDao.cn" tvg-name="六安公共频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.china-latv.com/t/icon/201901/20190107160038YJK.png" group-title="",六安公共频道 -http://live.china-latv.com/channel2/sd/live.m3u8 +http://live.china-latv.com/channel2/playlist.m3u8 #EXTINF:-1 tvg-id="LiuAnXinWenZongHe.cn" tvg-name="六安新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.china-latv.com/t/icon/201901/20190107160038YJK.png" group-title="",六安新闻综合 -http://live.china-latv.com/channel1/sd/live.m3u8 -#EXTINF:-1 tvg-id="61" tvg-name="兵团卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.tvyan.com/uploads/dianshi/bingtuantv.jpg" group-title="",兵团卫视 +http://live.china-latv.com/channel1/playlist.m3u8 +#EXTINF:-1 tvg-id="BingTuanWeiShi.cn" tvg-name="兵团卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.tvyan.com/uploads/dianshi/bingtuantv.jpg" group-title="",兵团卫视 http://112.17.40.140/PLTV/88888888/224/3221226186/index.m3u8 -#EXTINF:-1 tvg-id="61" tvg-name="兵团卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",兵团卫视 +#EXTINF:-1 tvg-id="BingTuanWeiShi.cn" tvg-name="兵团卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.tvyan.com/uploads/dianshi/bingtuantv.jpg" group-title="",兵团卫视 http://ivi.bupt.edu.cn/hls/bttv.m3u8 -#EXTINF:-1 tvg-id="61" tvg-name="兵团卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",兵团卫视 (360p) +#EXTINF:-1 tvg-id="BingTuanWeiShi.cn" tvg-name="兵团卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.tvyan.com/uploads/dianshi/bingtuantv.jpg" group-title="",兵团卫视 (360p) http://v.btzx.com.cn:1935/live/weishi.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="BingTuanJianShe.cn" tvg-name="兵团建设" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",兵团建设 (360p) +#EXTINF:-1 tvg-id="BingTuanJianShe.cn" tvg-name="兵团建设" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.tvyan.com/uploads/dianshi/bingtuantv.jpg" group-title="",兵团建设 News (360p) http://v.btzx.com.cn:1935/live/news.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="52" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",内蒙古卫视 +#EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 http://117.169.120.140:8080/live/neimenggustv/.m3u8 -#EXTINF:-1 tvg-id="52" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",内蒙古卫视 -http://121.31.30.90:8085/ysten-business/live/neimenggustv/1.m3u8 -#EXTINF:-1 tvg-id="52" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",内蒙古卫视 -http://121.31.30.90:8085/ysten-business/live/neimenggustv/yst.m3u8 +#EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 +http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/neimenggustv/1.m3u8 +#EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 +http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/neimenggustv/yst.m3u8 #EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 http://live.m2oplus.nmtv.cn/1/playlist.m3u8 -#EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",内蒙古卫视 -http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/neimenggustv/1.m3u8 #EXTINF:-1 tvg-id="MianNingDianShiTai.cn" tvg-name="冕宁电视台" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.sichuanmianning.com/images/mianlin_tv/img/logo.png" group-title="",冕宁电视台 http://live.sichuanmianning.com/live/xwpd.m3u8 #EXTINF:-1 tvg-id="JunShiPingLun.cn" tvg-name="军事评论" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/new13.png" group-title="",军事评论 @@ -453,29 +431,29 @@ http://121.31.30.90:8085/ysten-business/live/beijingstv/1.m3u8 http://121.31.30.90:8085/ysten-business/live/beijingstv/yst.m3u8 #EXTINF:-1 tvg-id="BeiJingWeiShi.cn" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/bjbtv.jpg" group-title="",北京卫视 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv1.m3u8 -#EXTINF:-1 tvg-id="30" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京卫视 +#EXTINF:-1 tvg-id="BeiJingWeiShi.cn" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/bjbtv.jpg" group-title="",北京卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/beijingstv/1.m3u8 -#EXTINF:-1 tvg-id="30" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京卫视HD +#EXTINF:-1 tvg-id="BeiJingWeiShi.cn" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/bjbtv.jpg" group-title="",北京卫视HD http://121.31.30.90:8085/ysten-business/live/hdbeijingstv/1.m3u8 -#EXTINF:-1 tvg-id="30" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京卫视HD +#EXTINF:-1 tvg-id="BeiJingWeiShi.cn" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/bjbtv.jpg" group-title="",北京卫视HD http://121.31.30.90:8085/ysten-business/live/hdbeijingstv/yst.m3u8 -#EXTINF:-1 tvg-id="30" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京卫视HD +#EXTINF:-1 tvg-id="BeiJingWeiShi.cn" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/bjbtv.jpg" group-title="",北京卫视HD http://223.82.250.72/live/hdbeijingstv/1.m3u8 -#EXTINF:-1 tvg-id="30" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京卫视HD +#EXTINF:-1 tvg-id="BTVWeiShi.cn" tvg-name="BTV卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV卫视HD http://ivi.bupt.edu.cn/hls/btv1hd.m3u8 -#EXTINF:-1 tvg-id="BTVYingShi.cn" tvg-name="BTV影视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京影视 [Not 24/7] +#EXTINF:-1 tvg-id="BTVYingShi.cn" tvg-name="BTV影视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV影视 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv4.m3u8 -#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京文艺 [Not 24/7] +#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV文艺 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv2.m3u8 -#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京文艺HD +#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV文艺HD http://ivi.bupt.edu.cn/hls/btv2hd.m3u8 -#EXTINF:-1 tvg-id="BTVXinWen.cn" tvg-name="BTV新闻" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京新闻 +#EXTINF:-1 tvg-id="BTVXinWen.cn" tvg-name="BTV新闻" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV新闻 http://ivi.bupt.edu.cn/hls/btv9.m3u8 -#EXTINF:-1 tvg-id="BTVShengHuo.cn" tvg-name="BTV生活" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京生活 [Not 24/7] +#EXTINF:-1 tvg-id="BTVShengHuo.cn" tvg-name="BTV生活" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV生活 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv7.m3u8 -#EXTINF:-1 tvg-id="BTVKeJiao.cn" tvg-name="BTV科教" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京科教 [Not 24/7] +#EXTINF:-1 tvg-id="BTVKeJiao.cn" tvg-name="BTV科教" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV科教 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv3.m3u8 -#EXTINF:-1 tvg-id="1872" tvg-name="北京纪实" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京纪实 +#EXTINF:-1 tvg-id="BTVJiShi.cn" tvg-name="BTV纪实" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV纪实HD http://ivi.bupt.edu.cn/hls/btv11hd.m3u8 #EXTINF:-1 tvg-id="BTVCaiJing.cn" tvg-name="BTV财经" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京财经 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv5.m3u8 @@ -553,15 +531,15 @@ http://stream1.jlntv.cn/xcpd/sd/live.m3u8 http://stream1.jlntv.cn/ggpd/sd/live.m3u8 #EXTINF:-1 tvg-id="JiLinGongGongXinWen.cn" tvg-name="吉林公共新闻" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林公共新闻 http://stream1.jlntv.cn/ggpd/sd/live.m3u8?_upt=b95938311531576098 -#EXTINF:-1 tvg-id="51" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林卫视 +#EXTINF:-1 tvg-id="JiLinWeiShi.cn" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林卫视 http://121.31.30.90:8085/ysten-business/live/jilinstv/1.m3u8 -#EXTINF:-1 tvg-id="51" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林卫视 +#EXTINF:-1 tvg-id="JiLinWeiShi.cn" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林卫视 http://121.31.30.90:8085/ysten-business/live/jilinstv/yst.m3u8 #EXTINF:-1 tvg-id="JiLinWeiShi.cn" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201511/20/564ebec005f68.png" group-title="",吉林卫视 http://ivi.bupt.edu.cn/hls/jltv.m3u8 #EXTINF:-1 tvg-id="JiLinWeiShi.cn" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/jilin.png" group-title="",吉林卫视 http://stream4.jlntv.cn/test2/sd/live.m3u8 -#EXTINF:-1 tvg-id="51" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林卫视高清 +#EXTINF:-1 tvg-id="JiLinWeiShi.cn" tvg-name="吉林卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林卫视高清 http://117.169.120.140:8080/live/jilinstv/.m3u8 #EXTINF:-1 tvg-id="JiLinShanCun.cn" tvg-name="吉林山村" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",吉林山村 http://stream1.jlntv.cn/xcpd/sd/live.m3u8?_upt=ed8b01841531576074 @@ -603,15 +581,15 @@ http://149.129.100.78/guangdong.php?id=66 http://112.17.40.140/PLTV/88888888/224/3221226358/index.m3u8 #EXTINF:-1 tvg-id="SCTV9.cn" tvg-name="SCTV9" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv9.png" group-title="",四川公共乡村 (720p) http://scgctvshow.sctv.com/hdlive/sctv9/index.m3u8 -#EXTINF:-1 tvg-id="56" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 +#EXTINF:-1 tvg-id="SiChuanWeiShi.cn" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 http://121.31.30.90:8085/ysten-business/live/sichuanstv/1.m3u8 -#EXTINF:-1 tvg-id="56" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 +#EXTINF:-1 tvg-id="SiChuanWeiShi.cn" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 http://121.31.30.90:8085/ysten-business/live/sichuanstv/yst.m3u8 -#EXTINF:-1 tvg-id="56" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 +#EXTINF:-1 tvg-id="SiChuanWeiShi.cn" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 http://223.82.250.72/live/sichuanstv/1.m3u8 #EXTINF:-1 tvg-id="SiChuanWeiShi.cn" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201511/20/564ebb7c2f272.png" group-title="",四川卫视 http://ivi.bupt.edu.cn/hls/sctv.m3u8 -#EXTINF:-1 tvg-id="56" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 +#EXTINF:-1 tvg-id="SiChuanWeiShi.cn" tvg-name="四川卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四川卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/sichuanstv/1.m3u8 #EXTINF:-1 tvg-id="SCTV7.cn" tvg-name="SCTV7" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv7.png" group-title="",四川妇女儿童 (720p) http://scgctvshow.sctv.com/hdlive/sctv7/index.m3u8 @@ -621,13 +599,13 @@ http://scgctvshow.sctv.com/hdlive/sctv5/index.m3u8 http://scgctvshow.sctv.com/hdlive/sctv2/index.m3u8 #EXTINF:-1 tvg-id="SCTV4.cn" tvg-name="SCTV4" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv4.png" group-title="",四川新闻 http://scgctvshow.sctv.com/hdlive/sctv4/index.m3u8 -#EXTINF:-1 tvg-id="SiChuanXingKongGouWu.cn" tvg-name="四川星空购物" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv6.png" group-title="",四川星空购物 +#EXTINF:-1 tvg-id="SCTV6.cn" tvg-name="SCTV6" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv6.png" group-title="",四川星空购物 http://scgctvshow.sctv.com/hdlive/sctv6/index.m3u8 #EXTINF:-1 tvg-id="SCTV3.cn" tvg-name="SCTV3" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv3.png" group-title="",四川经济 http://scgctvshow.sctv.com/hdlive/sctv3/index.m3u8 #EXTINF:-1 tvg-id="SiPingXinWenZongHe.cn" tvg-name="四平新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",四平新闻综合 http://stream2.jlntv.cn/sptv/sd/live.m3u8 -#EXTINF:-1 tvg-id="6606" tvg-name="四海钓鱼" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://p2.diaoyu.com/M01/15/16/CgAAilUJTaOAWJnRAAA2KD1DMWU213.png" group-title="",四海钓鱼 +#EXTINF:-1 tvg-id="SiHaiDiaoYu.cn" tvg-name="四海钓鱼" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://p2.diaoyu.com/M01/15/16/CgAAilUJTaOAWJnRAAA2KD1DMWU213.png" group-title="",四海钓鱼 http://112.17.40.140/PLTV/88888888/224/3221226533/index.m3u8 #EXTINF:-1 tvg-id="GuoJiXinWen.cn" tvg-name="国际新闻" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/TELESUR.png" group-title="",国际新闻 (1080p) https://d2ajt1gpdtnw25.cloudfront.net/mbliveMain/hd/playlist.m3u8 @@ -649,19 +627,19 @@ https://pulltv3.wanfudaluye.com/live/tv3.m3u8 https://liveanevia.mncnow.id/live/eds/CelestialClassic/sa_dash_vmx/CelestialClassic.mpd #EXTINF:-1 tvg-id="TianYingPinDao.cn" tvg-name="天映频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://console.celestialtiger.com/images/upload/f50f7261d3c260ac6e3a38f85152b3f33833fc52.png" group-title="",天映频道 https://liveanevia.mncnow.id/live/eds/CelestialMovie/sa_dash_vmx/CelestialMovie.mpd -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://121.31.30.90:8085/ysten-business/live/tianjinstv/1.m3u8 -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://121.31.30.90:8085/ysten-business/live/tianjinstv/yst.m3u8 -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://ivi.bupt.edu.cn/hls/tjtv.m3u8 -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdtianjinstv/1.m3u8 -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://121.31.30.90:8085/ysten-business/live/hdtianjinstv/1.m3u8 -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://121.31.30.90:8085/ysten-business/live/hdtianjinstv/yst.m3u8 -#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视高清 +#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://117.169.120.140:8080/live/hdtianjinstv/.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShiGaoQing.cn" tvg-name="天津卫视高清" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/TJWS.png" group-title="",天津卫视高清 http://ivi.bupt.edu.cn/hls/tjhd.m3u8 @@ -677,15 +655,15 @@ http://mms.ldntv.cn:1935/live/zonghe/playlist.m3u8 http://218.77.102.118:1935/live/zonghe_iphone/playlist.m3u8 #EXTINF:-1 tvg-id="NingHuaDianShiYiTao.cn" tvg-name="宁化电视一套" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁化电视一套 (576p) http://fjnh.chinashadt.com:2036/live/stream:nh1.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="53" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 +#EXTINF:-1 tvg-id="NingXiaWeiShi.cn" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 http://117.169.120.140:8080/live/ningxiastv/.m3u8 -#EXTINF:-1 tvg-id="53" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 +#EXTINF:-1 tvg-id="NingXiaWeiShi.cn" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 http://121.31.30.90:8085/ysten-business/live/ningxiastv/1.m3u8 -#EXTINF:-1 tvg-id="53" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 +#EXTINF:-1 tvg-id="NingXiaWeiShi.cn" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 http://121.31.30.90:8085/ysten-business/live/ningxiastv/yst.m3u8 -#EXTINF:-1 tvg-id="53" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 +#EXTINF:-1 tvg-id="NingXiaWeiShi.cn" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 http://ivi.bupt.edu.cn/hls/nxtv.m3u8 -#EXTINF:-1 tvg-id="53" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 +#EXTINF:-1 tvg-id="NingXiaWeiShi.cn" tvg-name="宁夏卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",宁夏卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/ningxiastv/1.m3u8 #EXTINF:-1 tvg-id="NingBoShaoEr.cn" tvg-name="宁波少儿" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",宁波少儿 http://149.129.100.78/ningbo.php?id=5 @@ -705,20 +683,20 @@ http://149.129.100.78/anhui.php?id=69 http://149.129.100.78/anhui.php?id=50 #EXTINF:-1 tvg-id="AnHuiNongYeKeJiao.cn" tvg-name="安徽农业科教" tvg-country="CN" tvg-language="" tvg-logo="http://www.tvyan.com/uploads/dianshi/ahkj.jpg" group-title="",安徽农业科教 http://149.129.100.78/anhui.php?id=51 -#EXTINF:-1 tvg-id="32" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽卫视 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://121.31.30.90:8085/ysten-business/live/anhuistv/1.m3u8 -#EXTINF:-1 tvg-id="32" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽卫视 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://121.31.30.90:8085/ysten-business/live/anhuistv/yst.m3u8 -#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",安徽卫视 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://223.110.245.143/ott.js.chinamobile.com/PLTV/3/224/3221225800/index.m3u8 -#EXTINF:-1 tvg-id="32" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽卫视 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://ivi.bupt.edu.cn/hls/ahhd.m3u8 #EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://ivi.bupt.edu.cn/hls/ahtv.m3u8 -#EXTINF:-1 tvg-id="32" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽卫视高清 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://125.210.152.10:8060/live/AHWSHD_H265.m3u8 -#EXTINF:-1 tvg-id="32" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽卫视高清 -http://219.153.252.50/PLTV/88888888/224/3221225534/chunklist.m3u8 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 +http://219.153.252.50/PLTV/88888888/224/3221225534/playlist.m3u8 #EXTINF:-1 tvg-id="AnHuiXiaoShuoPingShuGuangBo.cn" tvg-name="安徽小说评书广播" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽小说评书广播 http://stream1.ahrtv.cn/xspsgb/sd/live.m3u8 #EXTINF:-1 tvg-id="AnHuiYingShi.cn" tvg-name="安徽影视" tvg-country="CN" tvg-language="" tvg-logo="http://www.tvyan.com/uploads/dianshi/anhys.jpg" group-title="",安徽影视 @@ -799,15 +777,15 @@ http://livealone302.iqilu.com/iqilu/zypd.m3u8 http://livealone302.iqilu.com/iqilu/qlpd.m3u8 #EXTINF:-1 tvg-id="ShanXiGongGong.cn" tvg-name="山西公共" tvg-country="CN" tvg-language="" tvg-logo="http://app.sxrtv.com/images/2019/5/15/20195151557897422066_33_t1080.jpg" group-title="",山西公共 http://149.129.100.78/tv.php?id=sxgg -#EXTINF:-1 tvg-id="54" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 +#EXTINF:-1 tvg-id="ShanXiWeiShi.cn" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 http://117.169.120.140:8080/live/shanxistv/.m3u8 -#EXTINF:-1 tvg-id="54" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 +#EXTINF:-1 tvg-id="ShanXiWeiShi.cn" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 http://121.31.30.90:8085/ysten-business/live/shanxistv/1.m3u8 -#EXTINF:-1 tvg-id="54" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 +#EXTINF:-1 tvg-id="ShanXiWeiShi.cn" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 http://121.31.30.90:8085/ysten-business/live/shanxistv/yst.m3u8 -#EXTINF:-1 tvg-id="54" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 +#EXTINF:-1 tvg-id="ShanXiWeiShi.cn" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 http://125.210.152.10:8060/live/SXWS.m3u8 -#EXTINF:-1 tvg-id="54" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 +#EXTINF:-1 tvg-id="ShanXiWeiShi.cn" tvg-name="山西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",山西卫视 http://223.82.250.72/live/shanxistv/1.m3u8 #EXTINF:-1 tvg-id="ShanXiYingShi.cn" tvg-name="山西影视" tvg-country="CN" tvg-language="" tvg-logo="http://app.sxrtv.com/images/2019/5/15/20195151557897361061_33_t1080.jpg" group-title="",山西影视 http://149.129.100.78/tv.php?id=sxys @@ -839,13 +817,13 @@ http://hbpx.chinashadt.com:2036/live/px1.stream/chunklist.m3u8 http://hbpx.chinashadt.com:2036/live/px1.stream/playlist.m3u8 #EXTINF:-1 tvg-id="GuangDongTiYu.cn" tvg-name="广东体育" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",广东体育 http://149.129.100.78/guangdong.php?id=47 -#EXTINF:-1 tvg-id="33" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广东卫视 +#EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视 http://121.31.30.90:8085/ysten-business/live/guangdongstv/1.m3u8 -#EXTINF:-1 tvg-id="33" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广东卫视 +#EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdguangdongstv/1.m3u8 -#EXTINF:-1 tvg-id="33" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广东卫视HD +#EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD http://121.31.30.90:8085/ysten-business/live/hdguangdongstv/1.m3u8 -#EXTINF:-1 tvg-id="GuangDongWeiShiGaoQing.cn" tvg-name="广东卫视高清" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视高清 +#EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD http://ivi.bupt.edu.cn/hls/gdhd.m3u8 #EXTINF:-1 tvg-id="GuangDongGuoJi.cn" tvg-name="广东国际" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",广东国际 http://149.129.100.78/guangdong.php?id=46 @@ -893,16 +871,16 @@ http://149.129.100.78/gztv.php?id=zhonghe https://iptv--iptv.repl.co/Chinese/zhonghe/ #EXTINF:-1 tvg-id="GuangShuiXinWenZongHe.cn" tvg-name="广水新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://ku.90sjimg.com/element_pic/17/12/31/2ec189f5167bd017e47acd441800487b.jpg" group-title="",广水新闻综合 http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8 -#EXTINF:-1 tvg-id="43" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 +#EXTINF:-1 tvg-id="GuangXiWeiShi.cn" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 http://121.31.30.90:8085/ysten-business/live/guangxistv/1.m3u8 -#EXTINF:-1 tvg-id="43" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 +#EXTINF:-1 tvg-id="GuangXiWeiShi.cn" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 http://121.31.30.90:8085/ysten-business/live/guangxistv/yst.m3u8 -#EXTINF:-1 tvg-id="43" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 +#EXTINF:-1 tvg-id="GuangXiWeiShi.cn" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 http://223.82.250.72/live/guangxistv/1.m3u8 -#EXTINF:-1 tvg-id="43" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 +#EXTINF:-1 tvg-id="GuangXiWeiShi.cn" tvg-name="广西卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/guangxistv/1.m3u8 #EXTINF:-1 tvg-id="GuangXiLuYouGuangBo.cn" tvg-name="广西旅游广播" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",广西旅游广播 -http://media.bbrtv.com:1935/live/_definst_/lypl/chunklist_w1542235389.m3u8 +http://media.bbrtv.com:1935/live/lypl/playlist.m3u8 #EXTINF:-1 tvg-id="YanAn1Tai.cn" tvg-name="延安1台" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://static2.tvzhe.com/channel/logo/YA1.jpg" group-title="",延安1台 http://stream2.liveyun.hoge.cn/YATV1/sd/live.m3u8 #EXTINF:-1 tvg-id="YanAn2Tai.cn" tvg-name="延安2台" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://static2.tvzhe.com/channel/logo/YA2.jpg" group-title="",延安2台 From 164f624ab1a308abc071da1db779db3005613c82 Mon Sep 17 00:00:00 2001 From: Shadix A Date: Sat, 7 Aug 2021 14:44:41 +0200 Subject: [PATCH 06/51] Update cn.m3u --- channels/cn.m3u | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/channels/cn.m3u b/channels/cn.m3u index 58ad374a6..8a2214218 100644 --- a/channels/cn.m3u +++ b/channels/cn.m3u @@ -1,8 +1,8 @@ #EXTM3U -#EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV 3" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/HqScjKW.jpg" group-title="",CCTV 3 -http://183.207.249.14/PLTV/3/224/3221225588/index.m3u8 #EXTINF:-1 tvg-id="BlueMeiJuPinDao.cn" tvg-name="Blue 美剧频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/BLUE.png" group-title="",Blue 美剧频道 [Geo-blocked] http://210.210.155.35:80/dr9445/h/h16/02.m3u8 +#EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV 3" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/HqScjKW.jpg" group-title="",CCTV 3 +http://183.207.249.14/PLTV/3/224/3221225588/index.m3u8 #EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV 4" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/l8PQ7fy.jpg" group-title="",CCTV 4 https://cctvcnch5ca.v.wscdns.com/live/cctveurope_2/index.m3u8 #EXTINF:-1 tvg-id="CCTVPLUS.cn" tvg-name="CCTV PLUS" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",CCTV PLUS Channel 1 (720p) @@ -151,6 +151,8 @@ rtmp://ivi.bupt.edu.cn:1935/livetv/channelv http://ivi.bupt.edu.cn/hls/chchd.m3u8 #EXTINF:-1 tvg-id="CNCZhongWen.cn" tvg-name="CNC中文" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",CNC中文 http://source07.v.news.cn/live/CNC_CN/playlist.m3u8 +#EXTINF:-1 tvg-id="CNCZhongWen.cn" tvg-name="CNC中文" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",CNC中文 +http://source07.v.news.cn/live/CNC_EN/playlist.m3u8 #EXTINF:-1 tvg-id="HunanCity.cn" tvg-name="Hunan City" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",Hunan City (576p) http://hnsd.chinashadt.com:2036/live/stream:hunandushi.stream/playlist.m3u8 #EXTINF:-1 tvg-id="iHOTAiDongMan.cn" tvg-name="iHOT爱动漫" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",iHOT爱动漫 From 67e37d3656b2bcd8aa65e4200e888895e32c404d Mon Sep 17 00:00:00 2001 From: Shadix A Date: Sat, 7 Aug 2021 14:46:56 +0200 Subject: [PATCH 07/51] Update cn.m3u --- channels/cn.m3u | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/channels/cn.m3u b/channels/cn.m3u index 8a2214218..52daedc18 100644 --- a/channels/cn.m3u +++ b/channels/cn.m3u @@ -629,19 +629,19 @@ https://pulltv3.wanfudaluye.com/live/tv3.m3u8 https://liveanevia.mncnow.id/live/eds/CelestialClassic/sa_dash_vmx/CelestialClassic.mpd #EXTINF:-1 tvg-id="TianYingPinDao.cn" tvg-name="天映频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://console.celestialtiger.com/images/upload/f50f7261d3c260ac6e3a38f85152b3f33833fc52.png" group-title="",天映频道 https://liveanevia.mncnow.id/live/eds/CelestialMovie/sa_dash_vmx/CelestialMovie.mpd -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://121.31.30.90:8085/ysten-business/live/tianjinstv/1.m3u8 -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://121.31.30.90:8085/ysten-business/live/tianjinstv/yst.m3u8 -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://ivi.bupt.edu.cn/hls/tjtv.m3u8 -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdtianjinstv/1.m3u8 -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://121.31.30.90:8085/ysten-business/live/hdtianjinstv/1.m3u8 -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://121.31.30.90:8085/ysten-business/live/hdtianjinstv/yst.m3u8 -#EXTINF:-1 tvg-id="TianJingWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD +#EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://117.169.120.140:8080/live/hdtianjinstv/.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShiGaoQing.cn" tvg-name="天津卫视高清" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/TJWS.png" group-title="",天津卫视高清 http://ivi.bupt.edu.cn/hls/tjhd.m3u8 From 3fd419a22a7e4b0af17ca98baf4e10649e9c1c25 Mon Sep 17 00:00:00 2001 From: Shadix A Date: Sat, 7 Aug 2021 14:53:38 +0200 Subject: [PATCH 08/51] Update es.m3u --- channels/es.m3u | 2 -- 1 file changed, 2 deletions(-) diff --git a/channels/es.m3u b/channels/es.m3u index 139e35dc7..eb90405c6 100644 --- a/channels/es.m3u +++ b/channels/es.m3u @@ -723,8 +723,6 @@ https://infantil-crtvg.flumotion.com/playlist.m3u8 https://momentog-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGMusigal.es" tvg-name="TVG Musigal" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/KgbNv4G.png" group-title="Local",TVG Musigal (360p) https://musigal-crtvg.flumotion.com/playlist.m3u8 -#EXTINF:-1 tvg-id="TVGXabarin.es" tvg-name="TVG Xabarin" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVG Xabarin -https://infantil-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="tvG2.es" tvg-name="tvG2" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/YAnSTc6.jpg" group-title="Local",tvG2 (720p) https://events2-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="tvG2.es" tvg-name="tvG2" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.ibb.co/2jtvMq0/TVG-GALICIA-2.png" group-title="Local",tvG2 (720p) From e2307581f0d050d51c4b93e8e7a898ca46f63f46 Mon Sep 17 00:00:00 2001 From: Shadix A Date: Sat, 7 Aug 2021 14:55:00 +0200 Subject: [PATCH 09/51] Update es.m3u --- channels/es.m3u | 2 -- 1 file changed, 2 deletions(-) diff --git a/channels/es.m3u b/channels/es.m3u index eb90405c6..7c110d91b 100644 --- a/channels/es.m3u +++ b/channels/es.m3u @@ -705,8 +705,6 @@ https://directes-tv-int.ccma.cat/int/ngrp:tvi_web/playlist_DVR.m3u8 https://unlimited1-us.dps.live/tv5/tv5.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TV5LIMARESHD.es" tvg-name="TV5 LIMARES HD" tvg-country="ES" tvg-language="" tvg-logo="https://pbs.twimg.com/profile_images/1192795318749945858/o-jIBTK-_400x400.jpg" group-title="",TV5 LIMARES HD (720p) https://unlimited6-cl.dps.live/tv5/tv5.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="TVGGalicia.es" tvg-name="TVG Galicia" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",TVG Galicia -http://europa-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGAmerica.es" tvg-name="TVG América" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/1Z6svKc.jpg" group-title="General",TVG América (720p) https://america-crtvg.flumotion.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVGCultural.es" tvg-name="TVG Cultural" tvg-country="ES" tvg-language="Galician" tvg-logo="https://i.imgur.com/KgbNv4G.png" group-title="Local",TVG Cultural (720p) From e02c1fc4c548b0c394016d52d4c8af2b82fe31ce Mon Sep 17 00:00:00 2001 From: Diego <5572928+sguinetti@users.noreply.github.com> Date: Mon, 9 Aug 2021 17:53:01 -0500 Subject: [PATCH 10/51] Add Peruvian Radio TV --- channels/pe.m3u | 2 ++ 1 file changed, 2 insertions(+) diff --git a/channels/pe.m3u b/channels/pe.m3u index b7b7ec361..6efa8e233 100644 --- a/channels/pe.m3u +++ b/channels/pe.m3u @@ -43,6 +43,8 @@ https://tvsource.gacetaucayalina.com/hls/prueba.m3u8 https://envivo.galacticatv.com:3913/stream/play.m3u8 #EXTINF:-1 tvg-id="GeniosTVMoyobamba.pe" tvg-name="Genios TV (Moyobamba)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/geniostvmoyobamba/picture?width=320&height=320" group-title="Local",Genios TV (Moyobamba) (720p) [Not 24/7] https://live.obslivestream.com:1936/geniostv/ngrp:geniostv_all/playlist.m3u8?DVR +#EXTINF:-1 tvg-id="PeruvianRadioTV.pe" tvg-name="Peruvian Radio TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://peruvianradiotv.pe/wp-content/uploads/2021/03/Logo-Peruvian-6.png" group-title="Local",PeruvianRadio TV (720p) [Not 24/7] +https://stmv.panel.grupolimalive.com/peruviantv/peruviantv/playlist.m3u8 #EXTINF:-1 tvg-id="HatunTV.pe" tvg-name="Hatun TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://yt3.ggpht.com/ytc/AAUvwnhI0HKESXrVQ8-ktPCeRap6-cP_4upPtEpAlwPa=s88-c-k-c0x00ffffff-no-rj" group-title="Music",Hatun TV (720p) https://tv.siete.us/bestcablehatuntv/bestcablehatuntv/index.m3u8 #EXTINF:-1 tvg-id="JNETV.pe" tvg-name="JNE TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/JNE.Peru/picture?width=320&height=320" group-title="Legislative",JNE TV [Not 24/7] From 610315e6f3d088752cb43a32051f6c3d2d16a680 Mon Sep 17 00:00:00 2001 From: Dum4G Date: Tue, 10 Aug 2021 01:58:26 +0300 Subject: [PATCH 11/51] Update vn.m3u --- channels/vn.m3u | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/channels/vn.m3u b/channels/vn.m3u index d41a65d46..29110d666 100644 --- a/channels/vn.m3u +++ b/channels/vn.m3u @@ -19,8 +19,9 @@ http://drtdnglive.e49a7c38.cdnviet.com/livestream/chunklist.m3u8 https://livefta.malimarcdn.com/ftaedge00/khaomwungmai.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="DhammasaphaTV.vn" tvg-name="Dhammasapha TV" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",Dhammasapha TV (1080p) https://livefta.malimarcdn.com/ftaedge00/dhammasapha.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="FBNCHD.vn" tvg-name="FBNC (HD)" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",FBNC (HD) (1080p) -http://htv-drm-live-cdn.fptplay.net/CDN-FPT02/FBNC-HD-1080p/playlist.m3u8 +#EXTINF:-1 tvg-id="FBNC.vn" tvg-name="FBNC" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",FBNC (1080p) +#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 +https://livecdn.fptplay.net/sdc/fbnchd_hls.smil/playlist.m3u8 #EXTINF:-1 tvg-id="GiaLaiTV.vn" tvg-name="Gia Lai TV" tvg-country="VN" tvg-language="" tvg-logo="" group-title="",Gia Lai TV http://113.161.25.3:8134/hls/gialaitv/gialaitv.m3u8 #EXTINF:-1 tvg-id="GoodIdeaTV.vn" tvg-name="Good Idea TV" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",Good Idea TV (720p) From dfdd8fe2e81f0b8291a376f7732c733a75fde157 Mon Sep 17 00:00:00 2001 From: Diego <5572928+sguinetti@users.noreply.github.com> Date: Mon, 9 Aug 2021 18:01:51 -0500 Subject: [PATCH 12/51] Update pe.m3u Add Sur TV Ilo --- channels/pe.m3u | 2 ++ 1 file changed, 2 insertions(+) diff --git a/channels/pe.m3u b/channels/pe.m3u index 6efa8e233..c8c818ec3 100644 --- a/channels/pe.m3u +++ b/channels/pe.m3u @@ -45,6 +45,8 @@ https://envivo.galacticatv.com:3913/stream/play.m3u8 https://live.obslivestream.com:1936/geniostv/ngrp:geniostv_all/playlist.m3u8?DVR #EXTINF:-1 tvg-id="PeruvianRadioTV.pe" tvg-name="Peruvian Radio TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://peruvianradiotv.pe/wp-content/uploads/2021/03/Logo-Peruvian-6.png" group-title="Local",PeruvianRadio TV (720p) [Not 24/7] https://stmv.panel.grupolimalive.com/peruviantv/peruviantv/playlist.m3u8 +#EXTINF:-1 tvg-id="SurTVIlo.pe" tvg-name="SurTV (Ilo)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/surtvilo/picture?width=320&height=320" group-title="Local",SurTV (Ilo) (720p) [Not 24/7] +https://stmv.panel.grupolimalive.com/surtv/surtv/playlist.m3u8 #EXTINF:-1 tvg-id="HatunTV.pe" tvg-name="Hatun TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://yt3.ggpht.com/ytc/AAUvwnhI0HKESXrVQ8-ktPCeRap6-cP_4upPtEpAlwPa=s88-c-k-c0x00ffffff-no-rj" group-title="Music",Hatun TV (720p) https://tv.siete.us/bestcablehatuntv/bestcablehatuntv/index.m3u8 #EXTINF:-1 tvg-id="JNETV.pe" tvg-name="JNE TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/JNE.Peru/picture?width=320&height=320" group-title="Legislative",JNE TV [Not 24/7] From 3192392a2bd650cdf71ddc26789eaeaf22153528 Mon Sep 17 00:00:00 2001 From: Dum4G Date: Tue, 10 Aug 2021 02:08:06 +0300 Subject: [PATCH 13/51] Update vn.m3u --- channels/vn.m3u | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channels/vn.m3u b/channels/vn.m3u index 29110d666..7cd40461a 100644 --- a/channels/vn.m3u +++ b/channels/vn.m3u @@ -19,7 +19,7 @@ http://drtdnglive.e49a7c38.cdnviet.com/livestream/chunklist.m3u8 https://livefta.malimarcdn.com/ftaedge00/khaomwungmai.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="DhammasaphaTV.vn" tvg-name="Dhammasapha TV" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",Dhammasapha TV (1080p) https://livefta.malimarcdn.com/ftaedge00/dhammasapha.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="FBNC.vn" tvg-name="FBNC" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",FBNC (1080p) +#EXTINF:-1 tvg-id="FBNC.vn" tvg-name="FBNC" tvg-country="VN" tvg-language="Vietnamese" tvg-logo="" group-title="",FBNC (720p) #EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 https://livecdn.fptplay.net/sdc/fbnchd_hls.smil/playlist.m3u8 #EXTINF:-1 tvg-id="GiaLaiTV.vn" tvg-name="Gia Lai TV" tvg-country="VN" tvg-language="" tvg-logo="" group-title="",Gia Lai TV From fa2b242b031ae729c4b423b2b1e620d4f8118a8e Mon Sep 17 00:00:00 2001 From: Diego <5572928+sguinetti@users.noreply.github.com> Date: Mon, 9 Aug 2021 18:38:55 -0500 Subject: [PATCH 14/51] Add other channels in Peru --- channels/pe.m3u | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/channels/pe.m3u b/channels/pe.m3u index c8c818ec3..0e7c3b903 100644 --- a/channels/pe.m3u +++ b/channels/pe.m3u @@ -33,6 +33,10 @@ https://live.obslivestream.com:1936/crtv/ngrp:crtv_all/playlist.m3u8 https://vs8.live.opencaster.com/cultura24/smil:cultura24/playlist.m3u8 #EXTINF:-1 tvg-id="DiarioHechiceraTumbes.pe" tvg-name="Diario Hechicera (Tumbes)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/diariohechicera/picture?width=320&height=320" group-title="Local",Diario Hechicera (Tumbes) [Not 24/7] https://panel.streamingtv-mediacp.online:1936/8108/8108/playlist.m3u8 +#EXTINF:-1 tvg-id="GoldValleyTV.pe" tvg-name="Gold Valley TV (Cafsma)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/Goldvalleytvcasma/picture?width=320&height=320" group-title="Local",Gold Valley TV (Casma) [Not 24/7] +https://stmv.panel.grupolimalive.com/gold/gold/chunklist_w210808895.m3u8 +#EXTINF:-1 tvg-id="Studio97TV.pe" tvg-name="Studio97 TV (Moquegua)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/radiostudio97/picture?width=320&height=320" group-title="Music",Studio97 TV (Moquegua) [Not 24/7] +https://stmv.panel.grupolimalive.com/gold/gold/chunklist_w210808895.m3u8 #EXTINF:-1 tvg-id="ExitosaTV.pe" tvg-name="Exitosa TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/Exitosanoticias/picture?width=320&height=320" group-title="News",Exitosa TV https://cu.onliv3.com/livevd1/user2.m3u8 #EXTINF:-1 tvg-id="Expresion.pe" tvg-name="Expresión (Tacna)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/telesurexpresion/picture?width=320&height=320" group-title="Local",Expresión (Tacna) [Not 24/7] From ef5bd3a7b202dd2698271684669db51dfff2922f Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:12:57 +0300 Subject: [PATCH 15/51] Delete clean.js --- scripts/clean.js | 74 ------------------------------------------------ 1 file changed, 74 deletions(-) delete mode 100644 scripts/clean.js diff --git a/scripts/clean.js b/scripts/clean.js deleted file mode 100644 index d1ab7c2e7..000000000 --- a/scripts/clean.js +++ /dev/null @@ -1,74 +0,0 @@ -const IPTVChecker = require('iptv-checker') -const { program } = require('commander') -const ProgressBar = require('progress') -const parser = require('./helpers/parser') -const utils = require('./helpers/utils') -const log = require('./helpers/log') - -program - .usage('[OPTIONS]...') - .option('-d, --debug', 'Enable debug mode') - .option('-c, --country ', 'Comma-separated list of country codes', '') - .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') - .option('--timeout ', 'Set timeout for each request', 5000) - .parse(process.argv) - -let bar -const config = program.opts() -const ignoreStatus = ['Geo-blocked', 'Not 24/7', 'Offline'] -const checker = new IPTVChecker({ - timeout: config.timeout -}) - -async function main() { - log.start() - - if (config.debug) log.print(`Debug mode enabled\n`) - - let playlists = parser.parseIndex() - playlists = utils.filterPlaylists(playlists, config.country, config.exclude) - for (const playlist of playlists) { - await parser - .parsePlaylist(playlist.url) - .then(checkPlaylist) - .then(p => p.save()) - } - - log.finish() -} - -async function checkPlaylist(playlist) { - if (!config.debug) { - bar = new ProgressBar(`Checking '${playlist.url}': [:bar] :current/:total (:percent) `, { - total: playlist.channels.length - }) - } - const channels = [] - const total = playlist.channels.length - for (const [index, channel] of playlist.channels.entries()) { - const skipChannel = - channel.status && - ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) - if (skipChannel) { - channels.push(channel) - } else { - const result = await checker.checkStream(channel.data) - if (result.status.ok || result.status.reason.includes('timed out')) { - channels.push(channel) - } else { - if (config.debug) log.print(`ERR: ${channel.url} (${result.status.reason})\n`) - } - } - if (!config.debug) bar.tick() - } - - if (playlist.channels.length !== channels.length) { - log.print(`File '${playlist.url}' has been updated\n`) - playlist.channels = channels - playlist.updated = true - } - - return playlist -} - -main() From e28bb1792ad8d755438a58aa5ed7ce8a2607263e Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:13:00 +0300 Subject: [PATCH 16/51] Delete detect-resolution.js --- scripts/detect-resolution.js | 114 ----------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 scripts/detect-resolution.js diff --git a/scripts/detect-resolution.js b/scripts/detect-resolution.js deleted file mode 100644 index 5da6a282f..000000000 --- a/scripts/detect-resolution.js +++ /dev/null @@ -1,114 +0,0 @@ -const { program } = require('commander') -const ProgressBar = require('progress') -const axios = require('axios') -const https = require('https') -const parser = require('./helpers/parser') -const utils = require('./helpers/utils') -const log = require('./helpers/log') - -program - .usage('[OPTIONS]...') - .option('-c, --country ', 'Comma-separated list of country codes', '') - .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') - .option('--delay ', 'Delay between parser requests', 1000) - .option('--timeout ', 'Set timeout for each request', 5000) - .parse(process.argv) - -const config = program.opts() -const ignoreStatus = ['Offline'] -const instance = axios.create({ - timeout: config.timeout, - maxContentLength: 200000, - httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) -}) - -async function main() { - log.start() - - log.print(`Parsing 'index.m3u'...\n`) - let playlists = parser.parseIndex() - playlists = utils - .filterPlaylists(playlists, config.country, config.exclude) - .filter(i => i.url !== 'channels/unsorted.m3u') - - for (const playlist of playlists) { - await parser - .parsePlaylist(playlist.url) - .then(detectResolution) - .then(p => p.save()) - } - - log.finish() -} - -async function detectResolution(playlist) { - const channels = [] - const bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { - total: playlist.channels.length - }) - let updated = false - for (const channel of playlist.channels) { - bar.tick() - const skipChannel = - channel.status && - ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) - if (!channel.resolution.height && !skipChannel) { - const CancelToken = axios.CancelToken - const source = CancelToken.source() - const timeout = setTimeout(() => { - source.cancel() - }, config.timeout) - - const response = await instance - .get(channel.url, { cancelToken: source.token }) - .then(res => { - clearTimeout(timeout) - - return res - }) - .then(utils.sleep(config.delay)) - .catch(err => { - clearTimeout(timeout) - }) - - if (response && response.status === 200) { - if (/^#EXTM3U/.test(response.data)) { - const resolution = parseResolution(response.data) - if (resolution) { - channel.resolution = resolution - updated = true - } - } - } - } - - channels.push(channel) - } - - if (updated) { - log.print(`File '${playlist.url}' has been updated\n`) - playlist.channels = channels - playlist.updated = true - } - - return playlist -} - -function parseResolution(string) { - const regex = /RESOLUTION=(\d+)x(\d+)/gm - const match = string.matchAll(regex) - const arr = Array.from(match).map(m => ({ - width: parseInt(m[1]), - height: parseInt(m[2]) - })) - - return arr.length - ? arr.reduce(function (prev, current) { - return prev.height > current.height ? prev : current - }) - : undefined -} - -main() From 895284ea924264bcc3cd49508d8be78fc6ae03bb Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:13:05 +0300 Subject: [PATCH 17/51] Update format.js --- scripts/format.js | 112 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 89 insertions(+), 23 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index fb77cab20..63ec199fd 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -1,21 +1,44 @@ +const IPTVChecker = require('iptv-checker') +const { program } = require('commander') +const ProgressBar = require('progress') const parser = require('./helpers/parser') const utils = require('./helpers/utils') const file = require('./helpers/file') const log = require('./helpers/log') +program + .usage('[OPTIONS]...') + .option('-d, --debug', 'Enable debug mode') + .option('-s, --status', 'Update stream status') + .option('-r, --resolution', 'Detect stream resolution') + .option('-c, --country ', 'Comma-separated list of country codes', '') + .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') + .option('--timeout ', 'Set timeout for each request', 5000) + .parse(process.argv) + +let bar +const ignoreStatus = ['Geo-blocked', 'Not 24/7'] +const config = program.opts() +const checker = new IPTVChecker({ + timeout: config.timeout +}) + async function main() { log.start() - log.print(`Parsing 'index.m3u'...`) + if (config.debug) log.print(`Debug mode enabled\n`) + if (config.status) log.print(`Updating channel status...\n`) + if (config.resolution) log.print(`Detecting channel resolution...\n`) + let playlists = parser.parseIndex().filter(i => i.url !== 'channels/unsorted.m3u') + playlists = utils.filterPlaylists(playlists, config.country, config.exclude) for (const playlist of playlists) { - log.print(`\nProcessing '${playlist.url}'...`) await parser .parsePlaylist(playlist.url) - .then(formatPlaylist) + .then(updatePlaylist) .then(playlist => { if (file.read(playlist.url) !== playlist.toString()) { - log.print('updated') + log.print(`File '${playlist.url}' has been updated\n`) playlist.updated = true } @@ -23,33 +46,76 @@ async function main() { }) } - log.print('\n') log.finish() } -async function formatPlaylist(playlist) { +async function updatePlaylist(playlist) { + if (!config.debug) { + bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { + total: playlist.channels.length + }) + } + for (const channel of playlist.channels) { - const code = file.getBasename(playlist.url) - // add missing tvg-name - if (!channel.tvg.name && code !== 'unsorted' && channel.name) { - channel.tvg.name = channel.name.replace(/\"/gi, '') + addMissingData(channel) + const checkOnline = config.status || config.resolution + const skip = + channel.status && + ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) + if (checkOnline && !skip) { + await checker + .checkStream(channel.data) + .then(result => { + if (result.status.ok || result.status.reason.includes('timed out')) { + if (config.status) updateStatus(channel, null) + if (config.resolution) updateResolution(channel, result.status.metadata) + } else { + if (config.debug) log.print(`ERR: ${channel.url} (${result.status.reason})\n`) + if (config.status) updateStatus(channel, 'Offline') + } + }) + .catch(err => { + if (config.debug) log.print(`ERR: ${channel.url} (${err.message})\n`) + }) } - // add missing tvg-id - if (!channel.tvg.id && code !== 'unsorted' && channel.tvg.name) { - const id = utils.name2id(channel.tvg.name) - channel.tvg.id = id ? `${id}.${code}` : '' - } - // add missing country - if (!channel.countries.length) { - const name = utils.code2name(code) - channel.countries = name ? [{ code, name }] : [] - channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') - } - // update group-title - channel.group.title = channel.category + if (!config.debug) bar.tick() } return playlist } +function addMissingData(channel) { + // add tvg-name + if (!channel.tvg.name && channel.name) { + channel.tvg.name = channel.name.replace(/\"/gi, '') + } + // add tvg-id + if (!channel.tvg.id && channel.tvg.name) { + const id = utils.name2id(channel.tvg.name) + channel.tvg.id = id ? `${id}.${code}` : '' + } + // add country + if (!channel.countries.length) { + const name = utils.code2name(code) + channel.countries = name ? [{ code, name }] : [] + channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') + } + // update group-title + channel.group.title = channel.category +} + +function updateStatus(channel, status) { + channel.status = status +} + +function updateResolution(channel, metadata) { + const streams = metadata ? metadata.streams.filter(stream => stream.codec_type === 'video') : [] + if (!channel.resolution.height && streams.length) { + channel.resolution = streams.reduce((acc, curr) => { + if (curr.height > acc.height) return { width: curr.width, height: curr.height } + return acc + }) + } +} + main() From 6a08bceddd3ac840efc90e47fd74c95124edeb35 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:34:13 +0300 Subject: [PATCH 18/51] Update auto-update.yml --- .github/workflows/auto-update.yml | 159 +++++++++++++----------------- 1 file changed, 69 insertions(+), 90 deletions(-) diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index 213deb39b..b50763ec2 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -20,90 +20,6 @@ jobs: format: runs-on: ubuntu-latest needs: create-branch - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Format Playlists - run: node scripts/format.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Formate playlists' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - sort: - runs-on: ubuntu-latest - needs: format - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Sort Channels - run: node scripts/sort.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Sort channels' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - remove-duplicates: - runs-on: ubuntu-latest - needs: sort - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Remove Duplicates - run: node scripts/remove-duplicates.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Remove duplicates' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - filter: - runs-on: ubuntu-latest - needs: remove-duplicates - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Filter Playlists - run: node scripts/filter.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Filter channels' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - detect-resolution: - runs-on: ubuntu-latest - needs: filter continue-on-error: true strategy: fail-fast: false @@ -279,8 +195,8 @@ jobs: ref: bot/auto-update - name: Install Dependencies run: npm install - - name: Detect Resolution - run: node scripts/detect-resolution.js --country=${{ matrix.country }} + - name: Format Playlists + run: node scripts/format.js --country=${{ matrix.country }} --status --resolution --debug - name: Upload Artifact uses: actions/upload-artifact@v2 with: @@ -288,7 +204,7 @@ jobs: path: channels/${{ matrix.country }}.m3u commit-changes: runs-on: ubuntu-latest - needs: detect-resolution + needs: format steps: - name: Checkout uses: actions/checkout@v2 @@ -302,7 +218,70 @@ jobs: - name: Commit Changes uses: stefanzweifel/git-auto-commit-action@v4 with: - commit_message: '[Bot] Detect resolution' + commit_message: '[Bot] Format playlists' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + remove-duplicates: + runs-on: ubuntu-latest + needs: commit-changes + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Remove Duplicates + run: node scripts/remove-duplicates.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Remove duplicates' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + sort: + runs-on: ubuntu-latest + needs: remove-duplicates + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Sort Channels + run: node scripts/sort.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Sort channels' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + filter: + runs-on: ubuntu-latest + needs: sort + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Filter Playlists + run: node scripts/filter.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Filter channels' commit_user_name: iptv-bot commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' @@ -310,7 +289,7 @@ jobs: file_pattern: channels/* generate: runs-on: ubuntu-latest - needs: commit-changes + needs: filter steps: - name: Checkout uses: actions/checkout@v2 @@ -376,6 +355,7 @@ jobs: branch: bot/auto-update file_pattern: README.md pull-request: + if: ${{ github.ref == 'refs/heads/master' }} needs: update-readme runs-on: ubuntu-latest steps: @@ -408,7 +388,6 @@ jobs: pull-request-number: ${{ steps.pr.outputs.pr_number }} merge-method: squash - name: Approve Pull Request - if: github.ref == 'refs/heads/master' uses: juliangruber/approve-pull-request-action@v1 with: github-token: ${{ secrets.PAT }} From 355be19ebe238cb6f044d7872998435fb9deb7c7 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:39:05 +0300 Subject: [PATCH 19/51] Update format.js --- scripts/format.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index 63ec199fd..b7cce4d0e 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -54,6 +54,8 @@ async function updatePlaylist(playlist) { bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { total: playlist.channels.length }) + } else { + log.print(`Processing '${playlist.url}'...\n`) } for (const channel of playlist.channels) { @@ -70,12 +72,12 @@ async function updatePlaylist(playlist) { if (config.status) updateStatus(channel, null) if (config.resolution) updateResolution(channel, result.status.metadata) } else { - if (config.debug) log.print(`ERR: ${channel.url} (${result.status.reason})\n`) + if (config.debug) log.print(` ${channel.url} (${result.status.reason})\n`) if (config.status) updateStatus(channel, 'Offline') } }) .catch(err => { - if (config.debug) log.print(`ERR: ${channel.url} (${err.message})\n`) + if (config.debug) log.print(` ${channel.url} (${err.message})\n`) }) } if (!config.debug) bar.tick() From b480397ddb72ad5b708be21e8eb7d7f511ff356b Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:47:11 +0300 Subject: [PATCH 20/51] Update format.js --- scripts/format.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index b7cce4d0e..cb3b407d0 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -72,12 +72,12 @@ async function updatePlaylist(playlist) { if (config.status) updateStatus(channel, null) if (config.resolution) updateResolution(channel, result.status.metadata) } else { - if (config.debug) log.print(` ${channel.url} (${result.status.reason})\n`) + if (config.debug) log.print(` ERR: ${channel.url} (${result.status.reason})\n`) if (config.status) updateStatus(channel, 'Offline') } }) .catch(err => { - if (config.debug) log.print(` ${channel.url} (${err.message})\n`) + if (config.debug) log.print(` ERR: ${channel.url} (${err.message})\n`) }) } if (!config.debug) bar.tick() From 4584f31c8f290662927c493f687dcfd80c082ed5 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 03:58:51 +0300 Subject: [PATCH 21/51] Update auto-update.yml --- .github/workflows/auto-update.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index b50763ec2..51cf6df50 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -193,6 +193,8 @@ jobs: uses: actions/checkout@v2 with: ref: bot/auto-update + - name: Setup FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v1 - name: Install Dependencies run: npm install - name: Format Playlists From 5a3368ba733db81fd4ab254e22f2ed029f4d30d2 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Tue, 10 Aug 2021 01:03:32 +0000 Subject: [PATCH 22/51] [Bot] Update playlists (#4027) * [Bot] Sort channels * [Bot] Remove duplicates * [Bot] Detect resolution * [Bot] Update README.md Co-authored-by: iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com> --- README.md | 94 ++++++++++++++++++++++++------------------------- channels/cn.m3u | 68 +++++++++++++++++------------------ channels/es.m3u | 4 +-- channels/pe.m3u | 22 ++++++------ channels/ru.m3u | 8 ++--- channels/tz.m3u | 2 +- channels/us.m3u | 4 +-- 7 files changed, 100 insertions(+), 102 deletions(-) diff --git a/README.md b/README.md index f8bad600c..19431a44f 100644 --- a/README.md +++ b/README.md @@ -40,19 +40,19 @@ Or select one of the playlists from the list below. Classic78https://iptv-org.github.io/iptv/categories/classic.m3u Comedy89https://iptv-org.github.io/iptv/categories/comedy.m3u Cooking54https://iptv-org.github.io/iptv/categories/cooking.m3u - Culture12https://iptv-org.github.io/iptv/categories/culture.m3u - Documentary70https://iptv-org.github.io/iptv/categories/documentary.m3u + Culture13https://iptv-org.github.io/iptv/categories/culture.m3u + Documentary68https://iptv-org.github.io/iptv/categories/documentary.m3u Education22https://iptv-org.github.io/iptv/categories/education.m3u Entertainment212https://iptv-org.github.io/iptv/categories/entertainment.m3u Family54https://iptv-org.github.io/iptv/categories/family.m3u - General339https://iptv-org.github.io/iptv/categories/general.m3u + General338https://iptv-org.github.io/iptv/categories/general.m3u Kids213https://iptv-org.github.io/iptv/categories/kids.m3u Legislative61https://iptv-org.github.io/iptv/categories/legislative.m3u Lifestyle94https://iptv-org.github.io/iptv/categories/lifestyle.m3u - Local543https://iptv-org.github.io/iptv/categories/local.m3u - Movies277https://iptv-org.github.io/iptv/categories/movies.m3u + Local549https://iptv-org.github.io/iptv/categories/local.m3u + Movies278https://iptv-org.github.io/iptv/categories/movies.m3u Music410https://iptv-org.github.io/iptv/categories/music.m3u - News491https://iptv-org.github.io/iptv/categories/news.m3u + News492https://iptv-org.github.io/iptv/categories/news.m3u Outdoor52https://iptv-org.github.io/iptv/categories/outdoor.m3u Relax19https://iptv-org.github.io/iptv/categories/relax.m3u Religious287https://iptv-org.github.io/iptv/categories/religious.m3u @@ -63,7 +63,7 @@ Or select one of the playlists from the list below. Travel28https://iptv-org.github.io/iptv/categories/travel.m3u Weather19https://iptv-org.github.io/iptv/categories/weather.m3u XXX59https://iptv-org.github.io/iptv/categories/xxx.m3u - Other4923https://iptv-org.github.io/iptv/categories/other.m3u + Other4877https://iptv-org.github.io/iptv/categories/other.m3u @@ -93,17 +93,17 @@ Or select one of the playlists from the list below. Bosnian11https://iptv-org.github.io/iptv/languages/bos.m3u Bulgarian10https://iptv-org.github.io/iptv/languages/bul.m3u Burmese1https://iptv-org.github.io/iptv/languages/mya.m3u - Catalan10https://iptv-org.github.io/iptv/languages/cat.m3u - Chinese670https://iptv-org.github.io/iptv/languages/zho.m3u + Catalan11https://iptv-org.github.io/iptv/languages/cat.m3u + Chinese659https://iptv-org.github.io/iptv/languages/zho.m3u Croatian14https://iptv-org.github.io/iptv/languages/hrv.m3u Czech21https://iptv-org.github.io/iptv/languages/ces.m3u Danish4https://iptv-org.github.io/iptv/languages/dan.m3u Dutch60https://iptv-org.github.io/iptv/languages/nld.m3u - English2439https://iptv-org.github.io/iptv/languages/eng.m3u + English2438https://iptv-org.github.io/iptv/languages/eng.m3u Estonian3https://iptv-org.github.io/iptv/languages/est.m3u Faroese1https://iptv-org.github.io/iptv/languages/fao.m3u Finnish1https://iptv-org.github.io/iptv/languages/fin.m3u - French194https://iptv-org.github.io/iptv/languages/fra.m3u + French193https://iptv-org.github.io/iptv/languages/fra.m3u Galician9https://iptv-org.github.io/iptv/languages/glg.m3u Georgian8https://iptv-org.github.io/iptv/languages/kat.m3u German206https://iptv-org.github.io/iptv/languages/deu.m3u @@ -130,7 +130,7 @@ Or select one of the playlists from the list below. Malay (macrolanguage)7https://iptv-org.github.io/iptv/languages/msa.m3u Malayalam24https://iptv-org.github.io/iptv/languages/mal.m3u Maltese3https://iptv-org.github.io/iptv/languages/mlt.m3u - Mandarin Chinese77https://iptv-org.github.io/iptv/languages/cmn.m3u + Mandarin Chinese78https://iptv-org.github.io/iptv/languages/cmn.m3u Maori2https://iptv-org.github.io/iptv/languages/mri.m3u Min Nan Chinese3https://iptv-org.github.io/iptv/languages/nan.m3u Modern Greek (1453-)31https://iptv-org.github.io/iptv/languages/ell.m3u @@ -144,13 +144,13 @@ Or select one of the playlists from the list below. Polish33https://iptv-org.github.io/iptv/languages/pol.m3u Portuguese108https://iptv-org.github.io/iptv/languages/por.m3u Romanian64https://iptv-org.github.io/iptv/languages/ron.m3u - Russian300https://iptv-org.github.io/iptv/languages/rus.m3u + Russian302https://iptv-org.github.io/iptv/languages/rus.m3u Serbian17https://iptv-org.github.io/iptv/languages/srp.m3u Sinhala5https://iptv-org.github.io/iptv/languages/sin.m3u Slovak26https://iptv-org.github.io/iptv/languages/slk.m3u Slovenian6https://iptv-org.github.io/iptv/languages/slv.m3u Somali6https://iptv-org.github.io/iptv/languages/som.m3u - Spanish626https://iptv-org.github.io/iptv/languages/spa.m3u + Spanish624https://iptv-org.github.io/iptv/languages/spa.m3u Sundanese1https://iptv-org.github.io/iptv/languages/sun.m3u Swedish11https://iptv-org.github.io/iptv/languages/swe.m3u Tagalog6https://iptv-org.github.io/iptv/languages/tgl.m3u @@ -165,7 +165,7 @@ Or select one of the playlists from the list below. Vietnamese69https://iptv-org.github.io/iptv/languages/vie.m3u Western Frisian1https://iptv-org.github.io/iptv/languages/fry.m3u Yue Chinese10https://iptv-org.github.io/iptv/languages/yue.m3u - Undefined2688https://iptv-org.github.io/iptv/languages/undefined.m3u + Undefined2659https://iptv-org.github.io/iptv/languages/undefined.m3u @@ -187,10 +187,10 @@ Or select one of the playlists from the list below. 🇦🇱 Albania24https://iptv-org.github.io/iptv/countries/al.m3u 🇩🇿 Algeria72https://iptv-org.github.io/iptv/countries/dz.m3u 🇦🇸 American Samoa3https://iptv-org.github.io/iptv/countries/as.m3u - 🇦🇩 Andorra10https://iptv-org.github.io/iptv/countries/ad.m3u + 🇦🇩 Andorra11https://iptv-org.github.io/iptv/countries/ad.m3u 🇦🇴 Angola3https://iptv-org.github.io/iptv/countries/ao.m3u 🇦🇬 Antigua & Barbuda1https://iptv-org.github.io/iptv/countries/ag.m3u - 🇦🇷 Argentina77https://iptv-org.github.io/iptv/countries/ar.m3u + 🇦🇷 Argentina72https://iptv-org.github.io/iptv/countries/ar.m3u 🇦🇲 Armenia35https://iptv-org.github.io/iptv/countries/am.m3u 🇦🇼 Aruba2https://iptv-org.github.io/iptv/countries/aw.m3u 🇦🇺 Australia99https://iptv-org.github.io/iptv/countries/au.m3u @@ -204,10 +204,10 @@ Or select one of the playlists from the list below. 🇧🇪 Belgium29https://iptv-org.github.io/iptv/countries/be.m3u 🇧🇯 Benin1https://iptv-org.github.io/iptv/countries/bj.m3u 🇧🇹 Bhutan7https://iptv-org.github.io/iptv/countries/bt.m3u - 🇧🇴 Bolivia33https://iptv-org.github.io/iptv/countries/bo.m3u + 🇧🇴 Bolivia28https://iptv-org.github.io/iptv/countries/bo.m3u 🇧🇦 Bosnia16https://iptv-org.github.io/iptv/countries/ba.m3u 🇧🇼 Botswana1https://iptv-org.github.io/iptv/countries/bw.m3u - 🇧🇷 Brazil162https://iptv-org.github.io/iptv/countries/br.m3u + 🇧🇷 Brazil157https://iptv-org.github.io/iptv/countries/br.m3u 🇧🇳 Brunei5https://iptv-org.github.io/iptv/countries/bn.m3u 🇧🇬 Bulgaria33https://iptv-org.github.io/iptv/countries/bg.m3u 🇧🇫 Burkina Faso5https://iptv-org.github.io/iptv/countries/bf.m3u @@ -218,16 +218,16 @@ Or select one of the playlists from the list below. 🇨🇻 Cape Verde1https://iptv-org.github.io/iptv/countries/cv.m3u 🇨🇫 Central African Republic1https://iptv-org.github.io/iptv/countries/cf.m3u 🇹🇩 Chad1https://iptv-org.github.io/iptv/countries/td.m3u - 🇨🇱 Chile93https://iptv-org.github.io/iptv/countries/cl.m3u - 🇨🇳 China790https://iptv-org.github.io/iptv/countries/cn.m3u - 🇨🇴 Colombia54https://iptv-org.github.io/iptv/countries/co.m3u + 🇨🇱 Chile88https://iptv-org.github.io/iptv/countries/cl.m3u + 🇨🇳 China772https://iptv-org.github.io/iptv/countries/cn.m3u + 🇨🇴 Colombia49https://iptv-org.github.io/iptv/countries/co.m3u 🇰🇲 Comoros43https://iptv-org.github.io/iptv/countries/km.m3u 🇨🇬 Congo - Brazzaville9https://iptv-org.github.io/iptv/countries/cg.m3u 🇨🇩 Congo - Kinshasa6https://iptv-org.github.io/iptv/countries/cd.m3u 🇨🇰 Cook Islands3https://iptv-org.github.io/iptv/countries/ck.m3u - 🇨🇷 Costa Rica52https://iptv-org.github.io/iptv/countries/cr.m3u + 🇨🇷 Costa Rica47https://iptv-org.github.io/iptv/countries/cr.m3u 🇭🇷 Croatia18https://iptv-org.github.io/iptv/countries/hr.m3u - 🇨🇺 Cuba29https://iptv-org.github.io/iptv/countries/cu.m3u + 🇨🇺 Cuba24https://iptv-org.github.io/iptv/countries/cu.m3u 🇨🇼 Curaçao5https://iptv-org.github.io/iptv/countries/cw.m3u 🇦🇳 Curaçao1https://iptv-org.github.io/iptv/countries/an.m3u 🇨🇾 Cyprus15https://iptv-org.github.io/iptv/countries/cy.m3u @@ -235,10 +235,10 @@ Or select one of the playlists from the list below. 🇨🇮 Côte d’Ivoire2https://iptv-org.github.io/iptv/countries/ci.m3u 🇩🇰 Denmark16https://iptv-org.github.io/iptv/countries/dk.m3u 🇩🇯 Djibouti45https://iptv-org.github.io/iptv/countries/dj.m3u - 🇩🇴 Dominican Republic88https://iptv-org.github.io/iptv/countries/do.m3u - 🇪🇨 Ecuador27https://iptv-org.github.io/iptv/countries/ec.m3u + 🇩🇴 Dominican Republic83https://iptv-org.github.io/iptv/countries/do.m3u + 🇪🇨 Ecuador22https://iptv-org.github.io/iptv/countries/ec.m3u 🇪🇬 Egypt75https://iptv-org.github.io/iptv/countries/eg.m3u - 🇸🇻 El Salvador37https://iptv-org.github.io/iptv/countries/sv.m3u + 🇸🇻 El Salvador32https://iptv-org.github.io/iptv/countries/sv.m3u 🇬🇶 Equatorial Guinea4https://iptv-org.github.io/iptv/countries/gq.m3u 🇪🇷 Eritrea1https://iptv-org.github.io/iptv/countries/er.m3u 🇪🇪 Estonia14https://iptv-org.github.io/iptv/countries/ee.m3u @@ -247,8 +247,8 @@ Or select one of the playlists from the list below. 🇫🇴 Faroe Islands1https://iptv-org.github.io/iptv/countries/fo.m3u 🇫🇯 Fiji4https://iptv-org.github.io/iptv/countries/fj.m3u 🇫🇮 Finland10https://iptv-org.github.io/iptv/countries/fi.m3u - 🇫🇷 France219https://iptv-org.github.io/iptv/countries/fr.m3u - 🇬🇫 French Guiana23https://iptv-org.github.io/iptv/countries/gf.m3u + 🇫🇷 France218https://iptv-org.github.io/iptv/countries/fr.m3u + 🇬🇫 French Guiana18https://iptv-org.github.io/iptv/countries/gf.m3u 🇵🇫 French Polynesia4https://iptv-org.github.io/iptv/countries/pf.m3u 🇹🇫 French Southern Territories1https://iptv-org.github.io/iptv/countries/tf.m3u 🇬🇦 Gabon1https://iptv-org.github.io/iptv/countries/ga.m3u @@ -257,13 +257,13 @@ Or select one of the playlists from the list below. 🇩🇪 Germany258https://iptv-org.github.io/iptv/countries/de.m3u 🇬🇭 Ghana3https://iptv-org.github.io/iptv/countries/gh.m3u 🇬🇷 Greece122https://iptv-org.github.io/iptv/countries/gr.m3u - 🇬🇵 Guadeloupe24https://iptv-org.github.io/iptv/countries/gp.m3u + 🇬🇵 Guadeloupe19https://iptv-org.github.io/iptv/countries/gp.m3u 🇬🇺 Guam3https://iptv-org.github.io/iptv/countries/gu.m3u - 🇬🇹 Guatemala28https://iptv-org.github.io/iptv/countries/gt.m3u + 🇬🇹 Guatemala23https://iptv-org.github.io/iptv/countries/gt.m3u 🇬🇳 Guinea2https://iptv-org.github.io/iptv/countries/gn.m3u 🇬🇼 Guinea-Bissau1https://iptv-org.github.io/iptv/countries/gw.m3u - 🇭🇹 Haiti26https://iptv-org.github.io/iptv/countries/ht.m3u - 🇭🇳 Honduras36https://iptv-org.github.io/iptv/countries/hn.m3u + 🇭🇹 Haiti21https://iptv-org.github.io/iptv/countries/ht.m3u + 🇭🇳 Honduras31https://iptv-org.github.io/iptv/countries/hn.m3u 🇭🇰 Hong Kong21https://iptv-org.github.io/iptv/countries/hk.m3u 🇭🇺 Hungary36https://iptv-org.github.io/iptv/countries/hu.m3u 🇮🇸 Iceland9https://iptv-org.github.io/iptv/countries/is.m3u @@ -298,14 +298,14 @@ Or select one of the playlists from the list below. 🇲🇼 Malawi1https://iptv-org.github.io/iptv/countries/mw.m3u 🇲🇾 Malaysia44https://iptv-org.github.io/iptv/countries/my.m3u 🇲🇻 Maldives8https://iptv-org.github.io/iptv/countries/mv.m3u - 🇲🇱 Mali1https://iptv-org.github.io/iptv/countries/ml.m3u + 🇲🇱 Mali2https://iptv-org.github.io/iptv/countries/ml.m3u 🇲🇹 Malta7https://iptv-org.github.io/iptv/countries/mt.m3u 🇲🇭 Marshall Islands3https://iptv-org.github.io/iptv/countries/mh.m3u - 🇲🇶 Martinique23https://iptv-org.github.io/iptv/countries/mq.m3u + 🇲🇶 Martinique18https://iptv-org.github.io/iptv/countries/mq.m3u 🇲🇷 Mauritania43https://iptv-org.github.io/iptv/countries/mr.m3u 🇲🇺 Mauritius2https://iptv-org.github.io/iptv/countries/mu.m3u 🇾🇹 Mayotte1https://iptv-org.github.io/iptv/countries/yt.m3u - 🇲🇽 Mexico80https://iptv-org.github.io/iptv/countries/mx.m3u + 🇲🇽 Mexico75https://iptv-org.github.io/iptv/countries/mx.m3u 🇫🇲 Micronesia3https://iptv-org.github.io/iptv/countries/fm.m3u 🇲🇩 Moldova21https://iptv-org.github.io/iptv/countries/md.m3u 🇲🇨 Monaco7https://iptv-org.github.io/iptv/countries/mc.m3u @@ -320,7 +320,7 @@ Or select one of the playlists from the list below. 🇳🇱 Netherlands135https://iptv-org.github.io/iptv/countries/nl.m3u 🇳🇨 New Caledonia3https://iptv-org.github.io/iptv/countries/nc.m3u 🇳🇿 New Zealand22https://iptv-org.github.io/iptv/countries/nz.m3u - 🇳🇮 Nicaragua34https://iptv-org.github.io/iptv/countries/ni.m3u + 🇳🇮 Nicaragua29https://iptv-org.github.io/iptv/countries/ni.m3u 🇳🇪 Niger2https://iptv-org.github.io/iptv/countries/ne.m3u 🇳🇬 Nigeria7https://iptv-org.github.io/iptv/countries/ng.m3u 🇳🇺 Niue3https://iptv-org.github.io/iptv/countries/nu.m3u @@ -333,18 +333,18 @@ Or select one of the playlists from the list below. 🇵🇰 Pakistan29https://iptv-org.github.io/iptv/countries/pk.m3u 🇵🇼 Palau3https://iptv-org.github.io/iptv/countries/pw.m3u 🇵🇸 Palestine68https://iptv-org.github.io/iptv/countries/ps.m3u - 🇵🇦 Panama35https://iptv-org.github.io/iptv/countries/pa.m3u + 🇵🇦 Panama30https://iptv-org.github.io/iptv/countries/pa.m3u 🇵🇬 Papua New Guinea3https://iptv-org.github.io/iptv/countries/pg.m3u - 🇵🇾 Paraguay33https://iptv-org.github.io/iptv/countries/py.m3u - 🇵🇪 Peru107https://iptv-org.github.io/iptv/countries/pe.m3u + 🇵🇾 Paraguay28https://iptv-org.github.io/iptv/countries/py.m3u + 🇵🇪 Peru106https://iptv-org.github.io/iptv/countries/pe.m3u 🇵🇭 Philippines20https://iptv-org.github.io/iptv/countries/ph.m3u 🇵🇳 Pitcairn Islands3https://iptv-org.github.io/iptv/countries/pn.m3u 🇵🇱 Poland45https://iptv-org.github.io/iptv/countries/pl.m3u 🇵🇹 Portugal41https://iptv-org.github.io/iptv/countries/pt.m3u - 🇵🇷 Puerto Rico33https://iptv-org.github.io/iptv/countries/pr.m3u + 🇵🇷 Puerto Rico28https://iptv-org.github.io/iptv/countries/pr.m3u 🇶🇦 Qatar56https://iptv-org.github.io/iptv/countries/qa.m3u 🇷🇴 Romania76https://iptv-org.github.io/iptv/countries/ro.m3u - 🇷🇺 Russia396https://iptv-org.github.io/iptv/countries/ru.m3u + 🇷🇺 Russia386https://iptv-org.github.io/iptv/countries/ru.m3u 🇷🇼 Rwanda5https://iptv-org.github.io/iptv/countries/rw.m3u 🇷🇪 Réunion1https://iptv-org.github.io/iptv/countries/re.m3u 🇼🇸 Samoa3https://iptv-org.github.io/iptv/countries/ws.m3u @@ -362,11 +362,11 @@ Or select one of the playlists from the list below. 🇿🇦 South Africa1https://iptv-org.github.io/iptv/countries/za.m3u 🇰🇷 South Korea83https://iptv-org.github.io/iptv/countries/kr.m3u 🇸🇸 South Sudan1https://iptv-org.github.io/iptv/countries/ss.m3u - 🇪🇸 Spain357https://iptv-org.github.io/iptv/countries/es.m3u + 🇪🇸 Spain343https://iptv-org.github.io/iptv/countries/es.m3u 🇱🇰 Sri Lanka17https://iptv-org.github.io/iptv/countries/lk.m3u - 🇧🇱 St. Barthélemy23https://iptv-org.github.io/iptv/countries/bl.m3u + 🇧🇱 St. Barthélemy18https://iptv-org.github.io/iptv/countries/bl.m3u 🇸🇭 St. Helena1https://iptv-org.github.io/iptv/countries/sh.m3u - 🇲🇫 St. Martin23https://iptv-org.github.io/iptv/countries/mf.m3u + 🇲🇫 St. Martin18https://iptv-org.github.io/iptv/countries/mf.m3u 🇸🇩 Sudan47https://iptv-org.github.io/iptv/countries/sd.m3u 🇸🇪 Sweden23https://iptv-org.github.io/iptv/countries/se.m3u 🇨🇭 Switzerland124https://iptv-org.github.io/iptv/countries/ch.m3u @@ -391,11 +391,11 @@ Or select one of the playlists from the list below. 🇦🇪 United Arab Emirates88https://iptv-org.github.io/iptv/countries/ae.m3u 🇬🇧 United Kingdom229https://iptv-org.github.io/iptv/countries/uk.m3u 🇺🇸 United States2266https://iptv-org.github.io/iptv/countries/us.m3u - 🇺🇾 Uruguay27https://iptv-org.github.io/iptv/countries/uy.m3u + 🇺🇾 Uruguay22https://iptv-org.github.io/iptv/countries/uy.m3u 🇺🇿 Uzbekistan3https://iptv-org.github.io/iptv/countries/uz.m3u 🇻🇺 Vanuatu3https://iptv-org.github.io/iptv/countries/vu.m3u 🇻🇦 Vatican City5https://iptv-org.github.io/iptv/countries/va.m3u - 🇻🇪 Venezuela49https://iptv-org.github.io/iptv/countries/ve.m3u + 🇻🇪 Venezuela44https://iptv-org.github.io/iptv/countries/ve.m3u 🇻🇳 Vietnam71https://iptv-org.github.io/iptv/countries/vn.m3u 🇼🇫 Wallis & Futuna3https://iptv-org.github.io/iptv/countries/wf.m3u 🇪🇭 Western Sahara3https://iptv-org.github.io/iptv/countries/eh.m3u diff --git a/channels/cn.m3u b/channels/cn.m3u index 2c552b66a..35593a4ed 100644 --- a/channels/cn.m3u +++ b/channels/cn.m3u @@ -1,6 +1,22 @@ #EXTM3U #EXTINF:-1 tvg-id="BlueMeiJuPinDao.cn" tvg-name="Blue 美剧频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/BLUE.png" group-title="",Blue 美剧频道 [Geo-blocked] http://210.210.155.35:80/dr9445/h/h16/02.m3u8 +#EXTINF:-1 tvg-id="BTVWeiShi.cn" tvg-name="BTV卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV卫视HD +http://ivi.bupt.edu.cn/hls/btv1hd.m3u8 +#EXTINF:-1 tvg-id="BTVYingShi.cn" tvg-name="BTV影视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV影视 [Not 24/7] +http://ivi.bupt.edu.cn/hls/btv4.m3u8 +#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV文艺 [Not 24/7] +http://ivi.bupt.edu.cn/hls/btv2.m3u8 +#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV文艺HD +http://ivi.bupt.edu.cn/hls/btv2hd.m3u8 +#EXTINF:-1 tvg-id="BTVXinWen.cn" tvg-name="BTV新闻" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV新闻 +http://ivi.bupt.edu.cn/hls/btv9.m3u8 +#EXTINF:-1 tvg-id="BTVShengHuo.cn" tvg-name="BTV生活" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV生活 [Not 24/7] +http://ivi.bupt.edu.cn/hls/btv7.m3u8 +#EXTINF:-1 tvg-id="BTVKeJiao.cn" tvg-name="BTV科教" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV科教 [Not 24/7] +http://ivi.bupt.edu.cn/hls/btv3.m3u8 +#EXTINF:-1 tvg-id="BTVJiShi.cn" tvg-name="BTV纪实" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV纪实HD +http://ivi.bupt.edu.cn/hls/btv11hd.m3u8 #EXTINF:-1 tvg-id="CCTV3.cn" tvg-name="CCTV 3" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/HqScjKW.jpg" group-title="",CCTV 3 http://183.207.249.14/PLTV/3/224/3221225588/index.m3u8 #EXTINF:-1 tvg-id="CCTV4.cn" tvg-name="CCTV 4" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://i.imgur.com/l8PQ7fy.jpg" group-title="",CCTV 4 @@ -133,16 +149,16 @@ http://ivi.bupt.edu.cn/hls/cctv8hd.m3u8 http://117.148.187.37/PLTV/88888888/224/3221226156/index.m3u8 #EXTINF:-1 tvg-id="CCTV9.cn" tvg-name="CCTV9" tvg-country="CN" tvg-language="Chinese;Mandarin Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/1/11/CCTV-9_Logo.png" group-title="Documentary",CCTV中国中央电视台-9 纪录 http://121.31.30.90:8085/ysten-business/live/cctv-9/yst.m3u8 +#EXTINF:-1 tvg-id="CGTNArabic.cn" tvg-name="CGTN Arabic" tvg-country="CN" tvg-language="Arabic" tvg-logo="https://ui.cgtn.com/static/resource/images/icon_new/live/live_AR.png" group-title="News",CGTN Arabic (720p) +https://news.cgtn.com/resource/live/arabic/cgtn-a.m3u8 +#EXTINF:-1 tvg-id="CGTNDocumentary.cn" tvg-name="CGTN Documentary" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/d6/CGTN_Documentary_logo.png" group-title="Documentary",CGTN Documentary (English) (720p) +https://news.cgtn.com/resource/live/document/cgtn-doc.m3u8 #EXTINF:-1 tvg-id="CGTNEnglish.cn" tvg-name="CGTN English" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN English (720p) https://dai.google.com/linear/hls/event/r4sa-f6GSN2XIvzKv5jVng/master.m3u8 #EXTINF:-1 tvg-id="CGTNEnglish.cn" tvg-name="CGTN English" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN English (720p) https://news.cgtn.com/resource/live/english/cgtn-news.m3u8 #EXTINF:-1 tvg-id="CGTNEspanol.cn" tvg-name="CGTN Español" tvg-country="CN" tvg-language="Spanish" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CGTN.svg/800px-CGTN.svg.png" group-title="News",CGTN Español (720p) https://news.cgtn.com/resource/live/espanol/cgtn-e.m3u8 -#EXTINF:-1 tvg-id="CGTNArabic.cn" tvg-name="CGTN Arabic" tvg-country="CN" tvg-language="Arabic" tvg-logo="https://ui.cgtn.com/static/resource/images/icon_new/live/live_AR.png" group-title="News",CGTN Arabic (720p) -https://news.cgtn.com/resource/live/arabic/cgtn-a.m3u8 -#EXTINF:-1 tvg-id="CGTNDocumentary.cn" tvg-name="CGTN Documentary" tvg-country="CN" tvg-language="English" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/d6/CGTN_Documentary_logo.png" group-title="Documentary",CGTN Documentary (English) -https://news.cgtn.com/resource/live/document/cgtn-doc.m3u8 #EXTINF:-1 tvg-id="CGTNFrancais.cn" tvg-name="CGTN Français" tvg-country="CN" tvg-language="French" tvg-logo="" group-title="",CGTN Français (720p) https://news.cgtn.com/resource/live/french/cgtn-f.m3u8 #EXTINF:-1 tvg-id="ChannelV.cn" tvg-name="Channel V" tvg-country="APAC" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Channel_V_Logo.svg/1200px-Channel_V_Logo.svg.png" group-title="Music",Channel V @@ -235,6 +251,8 @@ http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8 http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8 #EXTINF:-1 tvg-id="DongXiangDianShiTai.cn" tvg-name="东乡电视台" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/2/28/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png" group-title="",东乡电视台 http://117.156.28.119/270000001111/1110000131/index.m3u8 +#EXTINF:-1 tvg-id="DongNanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 +http://117.169.120.140:8080/live/dongnanstv/.m3u8 #EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://121.31.30.90:8085/ysten-business/live/dongnanstv/1.m3u8 #EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 @@ -243,8 +261,6 @@ http://121.31.30.90:8085/ysten-business/live/dongnanstv/yst.m3u8 http://ivi.bupt.edu.cn/hls/dntv.m3u8 #EXTINF:-1 tvg-id="DongnanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/dongnanstv/1.m3u8 -#EXTINF:-1 tvg-id="DongNanTV.cn" tvg-name="东南卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",东南卫视 -http://117.169.120.140:8080/live/dongnanstv/.m3u8 #EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 http://121.31.30.90:8085/ysten-business/live/dongfangstv/1.m3u8 #EXTINF:-1 tvg-id="DongFangWeiShi.cn" tvg-name="东方卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/dongfang.jpg" group-title="",东方卫视 @@ -349,7 +365,7 @@ http://121.31.30.90:8085/ysten-business/live/youmankaton/1.m3u8 http://121.31.30.90:8085/ysten-business/live/youmankaton/yst.m3u8 #EXTINF:-1 tvg-id="YouManKaTon.cn" tvg-name="优漫卡通" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="Kids",优漫卡通 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/youmankaton/1.m3u8 -#EXTINF:-1 tvg-id="YouShiPinDao.cn" tvg-name="优视频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",优视频道 +#EXTINF:-1 tvg-id="YouShiPinDao.cn" tvg-name="优视频道" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",优视频道 (720p) http://1-fss24-s0.streamhoster.com/lv_uchannel/broadcast1/playlist.m3u8 #EXTINF:-1 tvg-id="YuYaoXinWenZongHe.cn" tvg-name="余姚新闻综合" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",余姚新闻综合 http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8 @@ -376,11 +392,11 @@ http://v.btzx.com.cn:1935/live/news.stream/playlist.m3u8 #EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 http://117.169.120.140:8080/live/neimenggustv/.m3u8 #EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 +http://live.m2oplus.nmtv.cn/1/playlist.m3u8 +#EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/neimenggustv/1.m3u8 #EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/neimenggustv/yst.m3u8 -#EXTINF:-1 tvg-id="NeiMengGuWeiShi.cn" tvg-name="内蒙古卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://epg.51zmt.top:8000/tb1/ws/neimeng.png" group-title="",内蒙古卫视 -http://live.m2oplus.nmtv.cn/1/playlist.m3u8 #EXTINF:-1 tvg-id="MianNingDianShiTai.cn" tvg-name="冕宁电视台" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://www.sichuanmianning.com/images/mianlin_tv/img/logo.png" group-title="",冕宁电视台 http://live.sichuanmianning.com/live/xwpd.m3u8 #EXTINF:-1 tvg-id="JunShiPingLun.cn" tvg-name="军事评论" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/new13.png" group-title="",军事评论 @@ -435,22 +451,6 @@ http://121.31.30.90:8085/ysten-business/live/hdbeijingstv/1.m3u8 http://121.31.30.90:8085/ysten-business/live/hdbeijingstv/yst.m3u8 #EXTINF:-1 tvg-id="BeiJingWeiShi.cn" tvg-name="北京卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/bjbtv.jpg" group-title="",北京卫视HD http://223.82.250.72/live/hdbeijingstv/1.m3u8 -#EXTINF:-1 tvg-id="BTVWeiShi.cn" tvg-name="BTV卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV卫视HD -http://ivi.bupt.edu.cn/hls/btv1hd.m3u8 -#EXTINF:-1 tvg-id="BTVYingShi.cn" tvg-name="BTV影视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV影视 [Not 24/7] -http://ivi.bupt.edu.cn/hls/btv4.m3u8 -#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV文艺 [Not 24/7] -http://ivi.bupt.edu.cn/hls/btv2.m3u8 -#EXTINF:-1 tvg-id="BTVWenYi.cn" tvg-name="BTV文艺" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV文艺HD -http://ivi.bupt.edu.cn/hls/btv2hd.m3u8 -#EXTINF:-1 tvg-id="BTVXinWen.cn" tvg-name="BTV新闻" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV新闻 -http://ivi.bupt.edu.cn/hls/btv9.m3u8 -#EXTINF:-1 tvg-id="BTVShengHuo.cn" tvg-name="BTV生活" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV生活 [Not 24/7] -http://ivi.bupt.edu.cn/hls/btv7.m3u8 -#EXTINF:-1 tvg-id="BTVKeJiao.cn" tvg-name="BTV科教" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV科教 [Not 24/7] -http://ivi.bupt.edu.cn/hls/btv3.m3u8 -#EXTINF:-1 tvg-id="BTVJiShi.cn" tvg-name="BTV纪实" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",BTV纪实HD -http://ivi.bupt.edu.cn/hls/btv11hd.m3u8 #EXTINF:-1 tvg-id="BTVCaiJing.cn" tvg-name="BTV财经" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京财经 [Not 24/7] http://ivi.bupt.edu.cn/hls/btv5.m3u8 #EXTINF:-1 tvg-id="BTVQingNian.cn" tvg-name="BTV青年" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",北京青年 [Not 24/7] @@ -595,7 +595,7 @@ http://scgctvshow.sctv.com/hdlive/sctv5/index.m3u8 http://scgctvshow.sctv.com/hdlive/sctv2/index.m3u8 #EXTINF:-1 tvg-id="SCTV4.cn" tvg-name="SCTV4" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv4.png" group-title="",四川新闻 (720p) http://scgctvshow.sctv.com/hdlive/sctv4/index.m3u8 -#EXTINF:-1 tvg-id="SCTV6.cn" tvg-name="SCTV6" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv6.png" group-title="",四川星空购物 +#EXTINF:-1 tvg-id="SCTV6.cn" tvg-name="SCTV6" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv6.png" group-title="",四川星空购物 (720p) http://scgctvshow.sctv.com/hdlive/sctv6/index.m3u8 #EXTINF:-1 tvg-id="SCTV3.cn" tvg-name="SCTV3" tvg-country="CN" tvg-language="" tvg-logo="http://epg.51zmt.top:8000/tb1/sheng/sctv3.png" group-title="",四川经济 (720p) http://scgctvshow.sctv.com/hdlive/sctv3/index.m3u8 @@ -630,13 +630,13 @@ http://121.31.30.90:8085/ysten-business/live/tianjinstv/yst.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视 http://ivi.bupt.edu.cn/hls/tjtv.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD -http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdtianjinstv/1.m3u8 +http://117.169.120.140:8080/live/hdtianjinstv/.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://121.31.30.90:8085/ysten-business/live/hdtianjinstv/1.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD http://121.31.30.90:8085/ysten-business/live/hdtianjinstv/yst.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShi.cn" tvg-name="天津卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",天津卫视HD -http://117.169.120.140:8080/live/hdtianjinstv/.m3u8 +http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdtianjinstv/1.m3u8 #EXTINF:-1 tvg-id="TianJinWeiShiGaoQing.cn" tvg-name="天津卫视高清" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/TJWS.png" group-title="",天津卫视高清 http://ivi.bupt.edu.cn/hls/tjhd.m3u8 #EXTINF:-1 tvg-id="YangShiTiYuPinDaoCCTV5FHD100.cn" tvg-name="央视体育频道-CCTV5FHD100" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",央视体育频道-CCTV5FHD100 @@ -682,15 +682,15 @@ http://121.31.30.90:8085/ysten-business/live/anhuistv/1.m3u8 #EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://121.31.30.90:8085/ysten-business/live/anhuistv/yst.m3u8 #EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 +http://125.210.152.10:8060/live/AHWSHD_H265.m3u8 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 +http://219.153.252.50/PLTV/88888888/224/3221225534/playlist.m3u8 +#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://223.110.245.143/ott.js.chinamobile.com/PLTV/3/224/3221225800/index.m3u8 #EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://ivi.bupt.edu.cn/hls/ahhd.m3u8 #EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 http://ivi.bupt.edu.cn/hls/ahtv.m3u8 -#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 -http://125.210.152.10:8060/live/AHWSHD_H265.m3u8 -#EXTINF:-1 tvg-id="AnHuiWeiShi.cn" tvg-name="安徽卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="http://s.wasu.cn/data/images/201512/24/567b9d7479d83.png" group-title="",安徽卫视 -http://219.153.252.50/PLTV/88888888/224/3221225534/playlist.m3u8 #EXTINF:-1 tvg-id="AnHuiXiaoShuoPingShuGuangBo.cn" tvg-name="安徽小说评书广播" tvg-country="CN" tvg-language="Chinese" tvg-logo="" group-title="",安徽小说评书广播 http://stream1.ahrtv.cn/xspsgb/sd/live.m3u8 #EXTINF:-1 tvg-id="AnHuiYingShi.cn" tvg-name="安徽影视" tvg-country="CN" tvg-language="" tvg-logo="http://www.tvyan.com/uploads/dianshi/anhys.jpg" group-title="",安徽影视 @@ -814,11 +814,11 @@ http://149.129.100.78/guangdong.php?id=47 #EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视 http://121.31.30.90:8085/ysten-business/live/guangdongstv/1.m3u8 #EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD -http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdguangdongstv/1.m3u8 -#EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD http://121.31.30.90:8085/ysten-business/live/hdguangdongstv/1.m3u8 #EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD http://ivi.bupt.edu.cn/hls/gdhd.m3u8 +#EXTINF:-1 tvg-id="GuangDongWeiShi.cn" tvg-name="广东卫视" tvg-country="CN" tvg-language="Chinese" tvg-logo="https://parco-zh.github.io/demo/guangdong.jpg" group-title="",广东卫视HD +http://m-tvlmedia.public.bcs.ysten.com/ysten-business/live/hdguangdongstv/1.m3u8 #EXTINF:-1 tvg-id="GuangDongGuoJi.cn" tvg-name="广东国际" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",广东国际 http://149.129.100.78/guangdong.php?id=46 #EXTINF:-1 tvg-id="GuangDongShaoEr.cn" tvg-name="广东少儿" tvg-country="CN" tvg-language="" tvg-logo="" group-title="",广东少儿 diff --git a/channels/es.m3u b/channels/es.m3u index 35a6a3ba8..b6391cdbe 100644 --- a/channels/es.m3u +++ b/channels/es.m3u @@ -81,7 +81,7 @@ https://streamtv.mediasector.es/hls/activatv/.m3u8 https://streaming01.gestec-video.com/hls/artequatreAlacanti.m3u8 #EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV http://217.182.77.27/live/alcarriatv-livestream.m3u8 -#EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV +#EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV (576p) http://cls.alcarria.tv/alcarriatv/livestream/playlist.m3u8 #EXTINF:-1 tvg-id="AlcarriaTV.es" tvg-name="Alcarria TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/pzJAYan.png" group-title="",Alcarria TV https://cls.alcarria.tv/live/alcarriatv-livestream.m3u8 @@ -105,7 +105,7 @@ https://cloudvideo.servers10.com:8081/8004/index.m3u8 https://cdn01.yowi.tv/4131RI73I9/master.m3u8 #EXTINF:-1 tvg-id="Canal10Emporda.es" tvg-name="Canal 10 Empordà" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Canal 10 Empordà http://ventdelnord.tv:8080/escala/directe.m3u8 -#EXTINF:-1 tvg-id="Canal2000LaSolana.es" tvg-name="Canal 2000 La Solana" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Canal 2000 La Solana +#EXTINF:-1 tvg-id="Canal2000LaSolana.es" tvg-name="Canal 2000 La Solana" tvg-country="ES" tvg-language="" tvg-logo="" group-title="",Canal 2000 La Solana (720p) http://canal2000.berkano-systems.net/streaming/streams/canal2000.m3u8 #EXTINF:-1 tvg-id="Canal25TV.es" tvg-name="Canal 25 TV" tvg-country="ES" tvg-language="Spanish" tvg-logo="https://i.imgur.com/2BBGZ1H.png" group-title="Local",Canal 25 TV (Barbastro) [Not 24/7] https://common01.todostreaming.es/live/tvbarbastro-livestream.m3u8 diff --git a/channels/pe.m3u b/channels/pe.m3u index 0e7c3b903..0d589d481 100644 --- a/channels/pe.m3u +++ b/channels/pe.m3u @@ -31,12 +31,8 @@ http://cdnh4.iblups.com/hls/OVJNKV4pSr.m3u8 https://live.obslivestream.com:1936/crtv/ngrp:crtv_all/playlist.m3u8 #EXTINF:-1 tvg-id="Cultura24tv.pe" tvg-name="Cultura 24" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://i.imgur.com/2mSwwpH.png" group-title="Culture",Cultura 24 (720p) https://vs8.live.opencaster.com/cultura24/smil:cultura24/playlist.m3u8 -#EXTINF:-1 tvg-id="DiarioHechiceraTumbes.pe" tvg-name="Diario Hechicera (Tumbes)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/diariohechicera/picture?width=320&height=320" group-title="Local",Diario Hechicera (Tumbes) [Not 24/7] +#EXTINF:-1 tvg-id="DiarioHechiceraTumbes.pe" tvg-name="Diario Hechicera (Tumbes)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/diariohechicera/picture?width=320&height=320" group-title="Local",Diario Hechicera (Tumbes) (720p) [Not 24/7] https://panel.streamingtv-mediacp.online:1936/8108/8108/playlist.m3u8 -#EXTINF:-1 tvg-id="GoldValleyTV.pe" tvg-name="Gold Valley TV (Cafsma)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/Goldvalleytvcasma/picture?width=320&height=320" group-title="Local",Gold Valley TV (Casma) [Not 24/7] -https://stmv.panel.grupolimalive.com/gold/gold/chunklist_w210808895.m3u8 -#EXTINF:-1 tvg-id="Studio97TV.pe" tvg-name="Studio97 TV (Moquegua)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/radiostudio97/picture?width=320&height=320" group-title="Music",Studio97 TV (Moquegua) [Not 24/7] -https://stmv.panel.grupolimalive.com/gold/gold/chunklist_w210808895.m3u8 #EXTINF:-1 tvg-id="ExitosaTV.pe" tvg-name="Exitosa TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/Exitosanoticias/picture?width=320&height=320" group-title="News",Exitosa TV https://cu.onliv3.com/livevd1/user2.m3u8 #EXTINF:-1 tvg-id="Expresion.pe" tvg-name="Expresión (Tacna)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/telesurexpresion/picture?width=320&height=320" group-title="Local",Expresión (Tacna) [Not 24/7] @@ -47,10 +43,8 @@ https://tvsource.gacetaucayalina.com/hls/prueba.m3u8 https://envivo.galacticatv.com:3913/stream/play.m3u8 #EXTINF:-1 tvg-id="GeniosTVMoyobamba.pe" tvg-name="Genios TV (Moyobamba)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/geniostvmoyobamba/picture?width=320&height=320" group-title="Local",Genios TV (Moyobamba) (720p) [Not 24/7] https://live.obslivestream.com:1936/geniostv/ngrp:geniostv_all/playlist.m3u8?DVR -#EXTINF:-1 tvg-id="PeruvianRadioTV.pe" tvg-name="Peruvian Radio TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://peruvianradiotv.pe/wp-content/uploads/2021/03/Logo-Peruvian-6.png" group-title="Local",PeruvianRadio TV (720p) [Not 24/7] -https://stmv.panel.grupolimalive.com/peruviantv/peruviantv/playlist.m3u8 -#EXTINF:-1 tvg-id="SurTVIlo.pe" tvg-name="SurTV (Ilo)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/surtvilo/picture?width=320&height=320" group-title="Local",SurTV (Ilo) (720p) [Not 24/7] -https://stmv.panel.grupolimalive.com/surtv/surtv/playlist.m3u8 +#EXTINF:-1 tvg-id="GoldValleyTV.pe" tvg-name="Gold Valley TV (Cafsma)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/Goldvalleytvcasma/picture?width=320&height=320" group-title="Local",Gold Valley TV (Casma) [Not 24/7] +https://stmv.panel.grupolimalive.com/gold/gold/chunklist_w210808895.m3u8 #EXTINF:-1 tvg-id="HatunTV.pe" tvg-name="Hatun TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://yt3.ggpht.com/ytc/AAUvwnhI0HKESXrVQ8-ktPCeRap6-cP_4upPtEpAlwPa=s88-c-k-c0x00ffffff-no-rj" group-title="Music",Hatun TV (720p) https://tv.siete.us/bestcablehatuntv/bestcablehatuntv/index.m3u8 #EXTINF:-1 tvg-id="JNETV.pe" tvg-name="JNE TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/JNE.Peru/picture?width=320&height=320" group-title="Legislative",JNE TV [Not 24/7] @@ -65,7 +59,7 @@ https://mdstrm.com/live-stream-playlist/5ce7109c7398b977dc0744cd.m3u8 https://tv.oyotunstream.com/master/master/playlist.m3u8 #EXTINF:-1 tvg-id="MegaTV.pe" tvg-name="Mega TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/MTVAQP/picture?width=320&height=320" group-title="Local",Mega TV (360p) [Not 24/7] https://cp.sradiotv.com:1936/Stream/Stream/playlist.m3u8 -#EXTINF:-1 tvg-id="Millenium49TVPucallpa.pe" tvg-name="Millenium 49 TV (Pucallpa)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://i.imgur.com/zYpMHhQ.png" group-title="Local",Millenium 49 TV (Pucallpa) [Not 24/7] +#EXTINF:-1 tvg-id="Millenium49TVPucallpa.pe" tvg-name="Millenium 49 TV (Pucallpa)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://i.imgur.com/zYpMHhQ.png" group-title="Local",Millenium 49 TV (Pucallpa) (720p) [Not 24/7] https://stmv.panel.grupolimalive.com/milleniuntv/milleniuntv/playlist.m3u8 #EXTINF:-1 tvg-id="ModaHuancayo.pe" tvg-name="Moda Huancayo" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/ModaHuancayoTv/picture?width=320&height=320" group-title="Local",Moda Huancayo TV [Not 24/7] https://tvdatta.com:3383/live/huancayotvlive.m3u8 @@ -95,10 +89,12 @@ https://linkastream.co/headless?url=https://www.dailymotion.com/PanamericanaPTV https://d2fxrfbiedz1tm.cloudfront.net/livepaxtv/smil:PC.smil/playlist.m3u8 #EXTINF:-1 tvg-id="PBO.pe" tvg-name="PBO Digital" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/PBOPeru/picture?width=320&height=320" group-title="News",PBO Digital [Not 24/7] https://linkastream.co/headless?url=https://www.youtube.com/channel/UCgR0st4ZLABi-LQcWNu3wnQ/live -#EXTINF:-1 tvg-id="PlanetaTVMoyobamba.pe" tvg-name="Planeta TV (Moyobamba)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/PlanetaTeleInformativo/picture?width=320&height=320" group-title="Local",Planeta TV (Moyobamba) (720p) [Not 24/7] -https://live.obslivestream.com:1936/planetatv/ngrp:planetatv_all/playlist.m3u8?DVR +#EXTINF:-1 tvg-id="PeruvianRadioTV.pe" tvg-name="Peruvian Radio TV" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://peruvianradiotv.pe/wp-content/uploads/2021/03/Logo-Peruvian-6.png" group-title="Local",PeruvianRadio TV (720p) [Not 24/7] +https://stmv.panel.grupolimalive.com/peruviantv/peruviantv/playlist.m3u8 #EXTINF:-1 tvg-id="PlanetaTVBagua.pe" tvg-name="Planeta TV (Bagua)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/planeatvperu/picture?width=320&height=320" group-title="Local",Planeta TV (Bagua) (720p) [Not 24/7] https://stmv.panel.grupolimalive.com/planeatv/planeatv/playlist.m3u8 +#EXTINF:-1 tvg-id="PlanetaTVMoyobamba.pe" tvg-name="Planeta TV (Moyobamba)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/PlanetaTeleInformativo/picture?width=320&height=320" group-title="Local",Planeta TV (Moyobamba) (720p) [Not 24/7] +https://live.obslivestream.com:1936/planetatv/ngrp:planetatv_all/playlist.m3u8?DVR #EXTINF:-1 tvg-id="Primavera15RadiotelevisionMoquegua.pe" tvg-name="Primavera 15 Radiotelevisión (Moquegua)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/radioprimaveramoquegua/picture?width=320&height=320" group-title="Local",Primavera 15 Radiotelevisión (Moquegua) (720p) https://rtmp02.portalexpress.es/primaveratv/primaveratv/playlist.m3u8 #EXTINF:-1 tvg-id="QTTelevision.pe" tvg-name="QT Televisión" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/QTTelevision/picture?width=320&height=320" group-title="Local",QT Televisión (Cuzco) [Not 24/7] @@ -127,6 +123,8 @@ https://query-streamlink.lanesh4d0w.repl.co/iptv-query?streaming-ip=https://www. https://servers.amelbasoluciones.co:19360/5medialive/5medialive.m3u8 #EXTINF:-1 tvg-id="SuperCanalYurimaguas.pe" tvg-name="Super Canal (Yurimaguas)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/supercanalyuri/picture?width=320&height=320" group-title="Local",Super Canal (Yurimaguas) [Not 24/7] https://7.innovatestream.pe:19360/supercanal/supercanal.m3u8 +#EXTINF:-1 tvg-id="SurTVIlo.pe" tvg-name="SurTV (Ilo)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/surtvilo/picture?width=320&height=320" group-title="Local",SurTV (Ilo) (720p) [Not 24/7] +https://stmv.panel.grupolimalive.com/surtv/surtv/playlist.m3u8 #EXTINF:-1 tvg-id="TelesurCamana.pe" tvg-name="Telesur (Camana)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/telesurexpresion/picture?width=320&height=320" group-title="Local",Telesur (Camana) [Not 24/7] https://qlobbidev.s.llnwi.net/telesur3/hls/camana.m3u8 #EXTINF:-1 tvg-id="TelesurIlo.pe" tvg-name="Telesur (Ilo)" tvg-country="PE" tvg-language="Spanish" tvg-logo="https://graph.facebook.com/telesurexpresion/picture?width=320&height=320" group-title="Local",Telesur (Ilo) diff --git a/channels/ru.m3u b/channels/ru.m3u index 7bc1d4671..7a93158f4 100644 --- a/channels/ru.m3u +++ b/channels/ru.m3u @@ -331,8 +331,6 @@ https://edge2.uk.kab.tv/live/tvrus-rus-medium/playlist.m3u8 https://strm.yandex.ru/kal/kavkaz24_supres/kavkaz24_supres0.m3u8 #EXTINF:-1 tvg-id="KarapuzTV.ru" tvg-name="Карапуз ТВ" tvg-country="RU" tvg-language="Russian" tvg-logo="" group-title="Kids",Карапуз ТВ https://karapuztv.fenixplustv.xyz/content/33418/index.m3u8 -#EXTINF:-1 tvg-id="TVKvarc.ru" tvg-name="ТВ Кварц" tvg-country="RU" tvg-language="" tvg-logo="" group-title="Local",ТВ Кварц (576p) -https://video.quartztelecom.ru:18080/hls/2386168/71fe656b993c510f39a5/playlist.m3u8 #EXTINF:-1 tvg-id="KinozalVHS90s.ru" tvg-name="Кинозал (VHS 90s)" tvg-country="RU" tvg-language="" tvg-logo="" group-title="",Кинозал (VHS 90s) https://v2.catcast.tv/content/37925/index.m3u8 #EXTINF:-1 tvg-id="Kinokomediya.ru" tvg-name="Кинокомедия" tvg-country="RU" tvg-language="Russian" tvg-logo="" group-title="Comedy",Кинокомедия @@ -653,11 +651,11 @@ https://gtrkchita.ru:8081/hls/r1-chita_360p.m3u8 http://cdnmg.secure.live.rtr-vesti.ru/hls/russia_hd/playlist.m3u8 #EXTINF:-1 tvg-id="Rossiya1HD.ru" tvg-name="Россия 1 HD" tvg-country="RU" tvg-language="Russian" tvg-logo="" group-title="General",Россия 1 HD https://a3569458063-s26881.cdn.ngenix.net/hls/russia_hd/playlist_4.m3u8 -#EXTINF:-1 tvg-id="Rossiya24.ru" tvg-name="Россия 24" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/wu7O85f.png" group-title="News",Россия 24 (576p) -http://radio-live-mg.rtr-vesti.ru/hls/russia_24/playlist.m3u8 #EXTINF:-1 tvg-id="Rossiya24.ru" tvg-name="Россия 24" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/wu7O85f.png" group-title="News",Россия 24 (480p) #EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 http://ott-cdn.ucom.am/s21/index.m3u8 +#EXTINF:-1 tvg-id="Rossiya24.ru" tvg-name="Россия 24" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/wu7O85f.png" group-title="News",Россия 24 (576p) +http://radio-live-mg.rtr-vesti.ru/hls/russia_24/playlist.m3u8 #EXTINF:-1 tvg-id="Rossiya24.ru" tvg-name="Россия 24" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/wu7O85f.png" group-title="News",Россия 24 (576p) [Not 24/7] http://uiptv.do.am/1ufc/000000006/playlist.m3u8 #EXTINF:-1 tvg-id="Rossiya24NNovgorod.ru" tvg-name="Россия 24 (Н.Новгород)" tvg-country="RU" tvg-language="Russian" tvg-logo="" group-title="News",Россия 24 (Н.Новгород) (576p) @@ -752,6 +750,8 @@ http://stream.efir24.tv:1935/live/efir24tv/playlist.m3u8 http://62.32.67.187:1935/WEB_TBN/TBN.stream/playlist.m3u8 #EXTINF:-1 tvg-id="TVEvropa.ru" tvg-name="ТВ Европа" tvg-country="RU" tvg-language="" tvg-logo="" group-title="",ТВ Европа https://cdn1.mobiletv.bg/T10/tvevropa/tvevropa_794613_850k.m3u8 +#EXTINF:-1 tvg-id="TVKvarc.ru" tvg-name="ТВ Кварц" tvg-country="RU" tvg-language="" tvg-logo="" group-title="Local",ТВ Кварц (576p) +https://video.quartztelecom.ru:18080/hls/2386168/71fe656b993c510f39a5/playlist.m3u8 #EXTINF:-1 tvg-id="TVCentr.ru" tvg-name="ТВ Центр" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/fIkd01t.png" group-title="",ТВ Центр (480p) #EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 http://ott-cdn.ucom.am/s54/index.m3u8 diff --git a/channels/tz.m3u b/channels/tz.m3u index 50f6dea01..20074e47e 100644 --- a/channels/tz.m3u +++ b/channels/tz.m3u @@ -1,7 +1,7 @@ #EXTM3U #EXTINF:-1 tvg-id="AzamSports1.tz" tvg-name="Azam Sports 1" tvg-country="TZ" tvg-language="" tvg-logo="https://azamtv.co.tz/tan/thumb/c/124/70/channels/channel_image1444752374.jpg" group-title="Sports",Azam Sports 1 https://1446000130.rsc.cdn77.org/1446000130/index.m3u8 -#EXTINF:-1 tvg-id="AzamSports2.tz" tvg-name="Azam Sports 2" tvg-country="TZ" tvg-language="" tvg-logo="https://azamtv.co.tz/tan/thumb/c/124/70/channels/channel_image1508329528.png" group-title="Sports",Azam Sports 2 +#EXTINF:-1 tvg-id="AzamSports2.tz" tvg-name="Azam Sports 2" tvg-country="TZ" tvg-language="" tvg-logo="https://azamtv.co.tz/tan/thumb/c/124/70/channels/channel_image1508329528.png" group-title="Sports",Azam Sports 2 (540p) https://1326605225.rsc.cdn77.org/1326605225/index.m3u8 #EXTINF:-1 tvg-id="ChannelTen.tz" tvg-name="Channel Ten" tvg-country="TZ" tvg-language="" tvg-logo="https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSlgi36jeSD2_aTBenoZYVRo53N_WjRVK9EcA&usqp=CAU" group-title="",Channel Ten http://hls-pull-switchinternational.speedws.com/live/test1/playlist.m3u8 diff --git a/channels/us.m3u b/channels/us.m3u index c1a2eda9d..d09a98ee1 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -5714,7 +5714,7 @@ https://bcovlive-a.akamaihd.net/e64d564b9275484f85981d8c146fb915/us-east-1/59940 http://45.179.140.242:8000/play/a0h5 #EXTINF:-1 tvg-id="STARLife.us" tvg-name="STAR Life (Spain)" tvg-country="ES" tvg-language="Spanish;English" tvg-logo="https://i.imgur.com/e4izZbC.png" group-title="",STAR Life (Spain) http://45.179.140.242:8000/play/a0h4 -#EXTINF:-1 tvg-id="STARMOVIEMIHDSTIRR.us" tvg-name="STAR MOVIEMI HD (STIRR)" tvg-country="US" tvg-language="English" tvg-logo="https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcT2kTZnEQilym8ptRCEoFwFHsTvp0m_y-VOdvWZSFErs4Nyke_m&usqp=CAU" group-title="",STAR MOVIEMI HD (STIRR) +#EXTINF:-1 tvg-id="STARMOVIEMIHDSTIRR.us" tvg-name="STAR MOVIEMI HD (STIRR)" tvg-country="US" tvg-language="English" tvg-logo="https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcT2kTZnEQilym8ptRCEoFwFHsTvp0m_y-VOdvWZSFErs4Nyke_m&usqp=CAU" group-title="",STAR MOVIEMI HD (STIRR) (720p) https://sonar.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="KVBCLP2.us" tvg-name="StartTV West (13.2 KVBC-LP2)" tvg-country="US" tvg-language="English" tvg-logo="https://media-usba.mybtv.net/logos/starttv.png" group-title="Entertainment",StartTV West (13.2 KVBC-LP2) (432p) https://streams.the6tv.duckdns.org:2443/locals/Fresno/kvbc-13.2.m3u8 @@ -5806,7 +5806,7 @@ https://tastemade-freetv16min-plex.amagi.tv/hls/amagi_hls_data_tastemade-tastema https://tastemade-xumo.amagi.tv/hls/amagi_hls_data_tastemade-tastemadefreetv16xumo/CDN/master.m3u8 #EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade (720p) https://tastemade.samsung.wurl.com/manifest/playlist.m3u8 -#EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade +#EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade (1080p) https://tastemadefr16min-redbox.amagi.tv/hls/amagi_hls_data_tastemade-tastemadefreetv16-redbox/CDN/playlist.m3u8 #EXTINF:-1 tvg-id="Tastemade.us" tvg-name="Tastemade" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/8s6aRwv.png" group-title="Cooking",Tastemade (1080p) https://tastemadessai.akamaized.net/amagi_hls_data_tastemade-tastemade/CDN/playlist.m3u8 From e365166b76b1da63b5795536a6bf7cc774f5a8d4 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 04:04:44 +0300 Subject: [PATCH 23/51] Delete clean.yml --- .github/workflows/clean.yml | 257 ------------------------------------ 1 file changed, 257 deletions(-) delete mode 100644 .github/workflows/clean.yml diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml deleted file mode 100644 index 3c1f9a452..000000000 --- a/.github/workflows/clean.yml +++ /dev/null @@ -1,257 +0,0 @@ -name: clean -on: - workflow_dispatch: - schedule: - - cron: '0 6 * * 0' -jobs: - create-branch: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Create Branch - uses: peterjgrainger/action-create-branch@v2.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - branch: 'bot/remove-broken-links' - check: - runs-on: ubuntu-latest - needs: create-branch - continue-on-error: true - strategy: - fail-fast: false - matrix: - country: - [ - ad, - ae, - af, - ag, - al, - am, - an, - ao, - ar, - at, - au, - aw, - az, - ba, - bb, - bd, - be, - bf, - bg, - bh, - bn, - bo, - br, - bs, - by, - ca, - cd, - cg, - ch, - ci, - cl, - cm, - cn, - co, - cr, - cu, - cw, - cy, - cz, - de, - dk, - do, - dz, - ec, - ee, - eg, - es, - et, - fi, - fj, - fo, - fr, - pf, - ge, - gh, - gm, - gn, - gp, - gq, - gr, - gt, - hk, - hn, - hr, - ht, - hu, - id, - ie, - il, - in, - iq, - ir, - is, - it, - jm, - jo, - jp, - ke, - kg, - kh, - kp, - kr, - kw, - kz, - la, - lb, - li, - lk, - lt, - lu, - lv, - ly, - ma, - mc, - md, - me, - mk, - ml, - mm, - mn, - mo, - mt, - mv, - mx, - my, - mz, - ne, - ng, - ni, - nl, - no, - np, - nz, - om, - pa, - pe, - ph, - pk, - pl, - pr, - ps, - pt, - py, - qa, - ro, - rs, - ru, - rw, - sa, - sd, - se, - sg, - si, - sk, - sl, - sm, - sn, - so, - sv, - sy, - th, - tj, - tm, - tn, - tr, - tt, - tw, - tz, - ua, - ug, - uk, - us, - uy, - uz, - va, - ve, - vi, - vn, - xk, - ye, - zm, - unsorted - ] - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/remove-broken-links - - name: Setup FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v1 - - name: Install Dependencies - run: npm install - - name: Remove Broken Links - run: node scripts/clean.js --country=${{ matrix.country }} --debug - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: channels - path: channels/${{ matrix.country }}.m3u - commit-changes: - runs-on: ubuntu-latest - needs: check - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/remove-broken-links - - name: Download Artifacts - uses: actions/download-artifact@v2 - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Remove broken links' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/remove-broken-links - file_pattern: channels/* - pull-request: - if: ${{ github.ref == 'refs/heads/master' }} - runs-on: ubuntu-latest - needs: commit-changes - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/remove-broken-links - - name: Generate Token - uses: tibdex/github-app-token@v1 - id: generate-token - with: - app_id: ${{ secrets.APP_ID }} - private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Create Pull Request - uses: repo-sync/pull-request@v2 - with: - source_branch: 'bot/remove-broken-links' - destination_branch: 'master' - pr_title: '[Bot] Remove broken links' - pr_body: | - This pull request is created by [clean][1] workflow. - - The script checks all links except those with labels `[Geo-blocked]`, `[Offline]` or `[Not 24/7]` in the title. - - **IMPORTANT:** Before merging all links should be checked manually to make sure that the response from the server has not changed. If the link works for you but occasionally return an HTTP code 403 (Forbidden) then it should be marked as `[Geo-blocked]`. If the link does not work but has no alternative, you can mark it as `[Offline]` to save it in the playlist along with a description. Working links should be marked as `[Not 24/7]` so that the script will skip them next time. - - [1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }} - pr_draft: true - github_token: ${{ steps.generate-token.outputs.token }} From d9633c8bf53fe9673ef9c34ed9268d5a38a0e3e3 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 04:08:48 +0300 Subject: [PATCH 24/51] Update CONTRIBUTING.md --- CONTRIBUTING.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a111b6713..ef08f6c07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,7 +125,7 @@ STREAM_URL | `LANGUAGE` | Channel language. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). If the channel is broadcast in several languages you can list them separated by a semicolon. (optional) | | `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. Supports files in png, jpeg and gif format. (optional) | | `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | -| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | +| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except round and square brackets. | | `STREAM_TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | | `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | | `STREAM_RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | @@ -153,7 +153,8 @@ http://example.com/stream.m3u8 - `.github/` - `ISSUE_TEMPLATE/`: issue templates for this repository. - `workflows/` - - `auto-update.yml`: contain actions that automatically updates all playlists every day. + - `auto-update.yml`: GitHub Action that automatically updates all playlists every day. + - `check.yml`: GitHub Action that automatically checks every pull request for syntax errors. - `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned. - `.readme/` - `_categories.md`: automatically generated list of all categories and their corresponding playlists. @@ -168,8 +169,6 @@ http://example.com/stream.m3u8 - `unsorted.m3u`: playlist with channels not yet sorted. - `scripts/` - `helpers/`: helper scripts used in GitHub Actions. - - `clean.js`: used in GitHub Action to check all links and remove broken ones. - - `detect-resolution.js`: used in GitHub Action to detect resolution of the streams. - `filter.js`: used within GitHub Action to remove blacklisted channels from playlists. - `format.js`: used within GitHub Action to format channel descriptions. - `generate.js`: used within GitHub Action to generate all additional playlists. From 25ad4013c73d580c46c98ea5da80d0ee117808b9 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 04:15:11 +0300 Subject: [PATCH 25/51] Update utils.js --- scripts/helpers/utils.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/scripts/helpers/utils.js b/scripts/helpers/utils.js index 7a2bae063..f0d9b3e50 100644 --- a/scripts/helpers/utils.js +++ b/scripts/helpers/utils.js @@ -1,4 +1,3 @@ -const escapeStringRegexp = require('escape-string-regexp') const transliteration = require('transliteration') const iso6393 = require('@freearhey/iso-639-3') const categories = require('./categories') @@ -71,16 +70,6 @@ utils.sortBy = function (arr, fields) { }) } -utils.escapeStringRegexp = function (scring) { - return escapeStringRegexp(string) -} - -utils.sleep = function (ms) { - return function (x) { - return new Promise(resolve => setTimeout(() => resolve(x), ms)) - } -} - utils.removeProtocol = function (string) { return string.replace(/(^\w+:|^)\/\//, '') } From 33b276a8769c707796c6c20f9a9d070ec1641129 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 04:21:12 +0300 Subject: [PATCH 26/51] Remove unused dependencies --- package-lock.json | 3 --- package.json | 3 --- 2 files changed, 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06cebc1d6..0eb569d0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,10 +7,7 @@ "license": "MIT", "dependencies": { "@freearhey/iso-639-3": "^1.0.0", - "axios": "^0.21.1", - "chalk": "^4.1.1", "commander": "^7.0.0", - "escape-string-regexp": "^2.0.0", "iptv-checker": "^0.20.2", "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", diff --git a/package.json b/package.json index ea3700063..280313fec 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,7 @@ "license": "MIT", "dependencies": { "@freearhey/iso-639-3": "^1.0.0", - "axios": "^0.21.1", - "chalk": "^4.1.1", "commander": "^7.0.0", - "escape-string-regexp": "^2.0.0", "iptv-checker": "^0.20.2", "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", From 1f9c0e8dad3651e72baab1b04c12a46b26198a77 Mon Sep 17 00:00:00 2001 From: MapGuy11 <43685307+MapGuy11@users.noreply.github.com> Date: Mon, 9 Aug 2021 22:01:44 -0400 Subject: [PATCH 27/51] Add Channels 1. WSNN-LD1 2. WISC-DT2 3. WFMZ-DT2 --- channels/us.m3u | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/channels/us.m3u b/channels/us.m3u index d09a98ee1..74d97ca00 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -6615,3 +6615,9 @@ https://ln-zen.localnowlive.com/v1/master/385c85a93929f94966d0fb186fc33b431e6f1e https://rockentertainment-zoomoo-1.samsung.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="KanalDisney.us" tvg-name="Канал Disney" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/Q9KoVy9.png" group-title="Kids",Канал Disney (576p) http://188.40.68.167/russia/disney/playlist.m3u8 +#EXTINF:-1 tvg-id="WSNN-LD1.us" tvg-name="WSNN-LD1" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/75548/s75548_h3_aa.png" group-title="Locals",WSNN-LD1 (Suncoast News Network) +https://cdn88.theus6tv.tk/united-states/locals/tampa/wsnn-ld.m3u8 +#EXTINF:-1 tvg-id="WISC-DT2.us" tvg-name="WISC-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/25125/s51307_h3_aa.png" group-title="Locals",WISC-DT2 (My Madison TV) +https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 +#EXTINF:-1 tvg-id="WFMZ-DT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="Locals",WFMZ-DT2 (69News Weather Channel) +https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 \ No newline at end of file From a5a2a2727196e70a889e270b61a5ce91fd28c31b Mon Sep 17 00:00:00 2001 From: MapGuy11 <43685307+MapGuy11@users.noreply.github.com> Date: Mon, 9 Aug 2021 22:11:20 -0400 Subject: [PATCH 28/51] Update us.m3u --- channels/us.m3u | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channels/us.m3u b/channels/us.m3u index 74d97ca00..dc4778243 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -6620,4 +6620,4 @@ https://cdn88.theus6tv.tk/united-states/locals/tampa/wsnn-ld.m3u8 #EXTINF:-1 tvg-id="WISC-DT2.us" tvg-name="WISC-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/25125/s51307_h3_aa.png" group-title="Locals",WISC-DT2 (My Madison TV) https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 #EXTINF:-1 tvg-id="WFMZ-DT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="Locals",WFMZ-DT2 (69News Weather Channel) -https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 \ No newline at end of file +https://cdn88.theus6tv.tk/united-states/locals/philadelphia/wfmz-dt2.m3u8 From ab7c3662211f322645bf0e1083712233c4663d1d Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 05:47:12 +0300 Subject: [PATCH 29/51] Update format.js --- scripts/format.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index cb3b407d0..3757a1868 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -68,13 +68,9 @@ async function updatePlaylist(playlist) { await checker .checkStream(channel.data) .then(result => { - if (result.status.ok || result.status.reason.includes('timed out')) { - if (config.status) updateStatus(channel, null) - if (config.resolution) updateResolution(channel, result.status.metadata) - } else { - if (config.debug) log.print(` ERR: ${channel.url} (${result.status.reason})\n`) - if (config.status) updateStatus(channel, 'Offline') - } + if (config.status) updateStatus(channel, result.status) + if (config.resolution && result.status.ok) + updateResolution(channel, result.status.metadata) }) .catch(err => { if (config.debug) log.print(` ERR: ${channel.url} (${err.message})\n`) @@ -107,7 +103,17 @@ function addMissingData(channel) { } function updateStatus(channel, status) { - channel.status = status + if (status.ok) { + channel.status = null + } else if (status.reason.includes('timed out')) { + // nothing + } else if (status.reason.includes('403')) { + channel.status = 'Geo-blocked' + if (config.debug) log.print(` ERR: ${channel.url} (${status.reason})\n`) + } else { + channel.status = 'Offline' + if (config.debug) log.print(` ERR: ${channel.url} (${status.reason})\n`) + } } function updateResolution(channel, metadata) { From 9930219e55f505f1ce8c8e436ce179e878b384c1 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 06:49:40 +0300 Subject: [PATCH 30/51] Update format.js --- scripts/format.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index 3757a1868..4de417185 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -107,9 +107,6 @@ function updateStatus(channel, status) { channel.status = null } else if (status.reason.includes('timed out')) { // nothing - } else if (status.reason.includes('403')) { - channel.status = 'Geo-blocked' - if (config.debug) log.print(` ERR: ${channel.url} (${status.reason})\n`) } else { channel.status = 'Offline' if (config.debug) log.print(` ERR: ${channel.url} (${status.reason})\n`) From 999154d4fa0eb947c4d5b31b8372e40195a92f8c Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 07:12:25 +0300 Subject: [PATCH 31/51] Update format.js --- scripts/format.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/format.js b/scripts/format.js index 4de417185..d6383df06 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -32,6 +32,7 @@ async function main() { let playlists = parser.parseIndex().filter(i => i.url !== 'channels/unsorted.m3u') playlists = utils.filterPlaylists(playlists, config.country, config.exclude) + if (!playlists.length) log.print(`No playlist is selected\n`) for (const playlist of playlists) { await parser .parsePlaylist(playlist.url) From da89dcd1b85cbcafe4276e6b3b2d0e8c4f9e3e80 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 07:13:39 +0300 Subject: [PATCH 32/51] Update auto-update.yml For the test only --- .github/workflows/auto-update.yml | 325 +++++++++++++++--------------- 1 file changed, 162 insertions(+), 163 deletions(-) diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index 51cf6df50..74a9b3575 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -24,169 +24,168 @@ jobs: strategy: fail-fast: false matrix: - country: - [ - ad, - ae, - af, - ag, - al, - am, - an, - ao, - ar, - at, - au, - aw, - az, - ba, - bb, - bd, - be, - bf, - bg, - bh, - bn, - bo, - br, - bs, - by, - ca, - cd, - cg, - ch, - ci, - cl, - cm, - cn, - co, - cr, - cu, - cw, - cy, - cz, - de, - dk, - do, - dz, - ec, - ee, - eg, - es, - et, - fi, - fj, - fo, - fr, - pf, - ge, - gh, - gm, - gn, - gp, - gq, - gr, - gt, - hk, - hn, - hr, - ht, - hu, - id, - ie, - il, - in, - iq, - ir, - is, - it, - jm, - jo, - jp, - ke, - kg, - kh, - kp, - kr, - kw, - kz, - la, - lb, - li, - lk, - lt, - lu, - lv, - ly, - ma, - mc, - md, - me, - mk, - ml, - mm, - mn, - mo, - mt, - mv, - mx, - my, - mz, - ne, - ng, - ni, - nl, - no, - np, - nz, - om, - pa, - pe, - ph, - pk, - pl, - pr, - ps, - pt, - py, - qa, - ro, - rs, - ru, - rw, - sa, - sd, - se, - sg, - si, - sk, - sl, - sm, - sn, - so, - sv, - sy, - th, - tj, - tm, - tn, - tr, - tt, - tw, - tz, - ua, - ug, - uk, - us, - uy, - uz, - va, - ve, - vi, - vn, - xk, - ye, - zm + country: [ + # ad, + # ae, + # af, + # ag, + # al, + # am, + # an, + # ao, + # ar, + # at, + # au, + # aw, + # az, + # ba, + # bb, + # bd, + # be, + # bf, + # bg, + # bh, + # bn, + # bo, + # br, + # bs, + # by, + # ca, + # cd, + # cg, + # ch, + # ci, + # cl, + # cm, + # cn, + # co, + # cr, + # cu, + # cw, + # cy, + # cz, + # de, + # dk, + # do, + # dz, + # ec, + # ee, + # eg, + # es, + # et, + # fi, + # fj, + # fo, + # fr, + # pf, + # ge, + # gh, + # gm, + # gn, + # gp, + # gq, + # gr, + # gt, + # hk, + # hn, + # hr, + # ht, + # hu, + # id, + # ie, + # il, + # in, + # iq, + # ir, + # is, + # it, + # jm, + # jo, + # jp, + # ke, + # kg, + # kh, + # kp, + # kr, + # kw, + # kz, + # la, + # lb, + # li, + # lk, + # lt, + # lu, + # lv, + # ly, + # ma, + # mc, + # md, + # me, + # mk, + # ml, + # mm, + # mn, + # mo, + # mt, + # mv, + # mx, + # my, + # mz, + # ne, + # ng, + # ni, + # nl, + # no, + # np, + # nz, + # om, + # pa, + # pe, + # ph, + # pk, + # pl, + # pr, + # ps, + # pt, + # py, + # qa, + # ro, + # rs, + ru + # rw, + # sa, + # sd, + # se, + # sg, + # si, + # sk, + # sl, + # sm, + # sn, + # so, + # sv, + # sy, + # th, + # tj, + # tm, + # tn, + # tr, + # tt, + # tw, + # tz, + # ua, + # ug, + # uk, + # us, + # uy, + # uz, + # va, + # ve, + # vi, + # vn, + # xk, + # ye, + # zm ] steps: - name: Checkout From c43ca9b66ff14b2b24d27d3bdc7a0780f914cdbc Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 07:45:52 +0300 Subject: [PATCH 33/51] Update format.js --- scripts/format.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/format.js b/scripts/format.js index d6383df06..496e8c8e6 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -106,7 +106,10 @@ function addMissingData(channel) { function updateStatus(channel, status) { if (status.ok) { channel.status = null - } else if (status.reason.includes('timed out')) { + } else if ( + status.reason.includes('timed out') || + status.reason.includes('not one of 40{0,1,3,4}') + ) { // nothing } else { channel.status = 'Offline' From b2cfb2be5e97a287860d02f8025a82869d821fe0 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 08:27:31 +0300 Subject: [PATCH 34/51] Update format.js --- scripts/format.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/format.js b/scripts/format.js index 496e8c8e6..bde2dbceb 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -108,7 +108,8 @@ function updateStatus(channel, status) { channel.status = null } else if ( status.reason.includes('timed out') || - status.reason.includes('not one of 40{0,1,3,4}') + status.reason.includes('not one of 40{0,1,3,4}') || + status.reason.includes('403') ) { // nothing } else { From ff44649caa3ef6676e3a6b06f38338bed593f65a Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 10:13:56 +0300 Subject: [PATCH 35/51] Update auto-update.yml --- .github/workflows/auto-update.yml | 325 +++++++++++++++--------------- 1 file changed, 163 insertions(+), 162 deletions(-) diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index 74a9b3575..51cf6df50 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -24,168 +24,169 @@ jobs: strategy: fail-fast: false matrix: - country: [ - # ad, - # ae, - # af, - # ag, - # al, - # am, - # an, - # ao, - # ar, - # at, - # au, - # aw, - # az, - # ba, - # bb, - # bd, - # be, - # bf, - # bg, - # bh, - # bn, - # bo, - # br, - # bs, - # by, - # ca, - # cd, - # cg, - # ch, - # ci, - # cl, - # cm, - # cn, - # co, - # cr, - # cu, - # cw, - # cy, - # cz, - # de, - # dk, - # do, - # dz, - # ec, - # ee, - # eg, - # es, - # et, - # fi, - # fj, - # fo, - # fr, - # pf, - # ge, - # gh, - # gm, - # gn, - # gp, - # gq, - # gr, - # gt, - # hk, - # hn, - # hr, - # ht, - # hu, - # id, - # ie, - # il, - # in, - # iq, - # ir, - # is, - # it, - # jm, - # jo, - # jp, - # ke, - # kg, - # kh, - # kp, - # kr, - # kw, - # kz, - # la, - # lb, - # li, - # lk, - # lt, - # lu, - # lv, - # ly, - # ma, - # mc, - # md, - # me, - # mk, - # ml, - # mm, - # mn, - # mo, - # mt, - # mv, - # mx, - # my, - # mz, - # ne, - # ng, - # ni, - # nl, - # no, - # np, - # nz, - # om, - # pa, - # pe, - # ph, - # pk, - # pl, - # pr, - # ps, - # pt, - # py, - # qa, - # ro, - # rs, - ru - # rw, - # sa, - # sd, - # se, - # sg, - # si, - # sk, - # sl, - # sm, - # sn, - # so, - # sv, - # sy, - # th, - # tj, - # tm, - # tn, - # tr, - # tt, - # tw, - # tz, - # ua, - # ug, - # uk, - # us, - # uy, - # uz, - # va, - # ve, - # vi, - # vn, - # xk, - # ye, - # zm + country: + [ + ad, + ae, + af, + ag, + al, + am, + an, + ao, + ar, + at, + au, + aw, + az, + ba, + bb, + bd, + be, + bf, + bg, + bh, + bn, + bo, + br, + bs, + by, + ca, + cd, + cg, + ch, + ci, + cl, + cm, + cn, + co, + cr, + cu, + cw, + cy, + cz, + de, + dk, + do, + dz, + ec, + ee, + eg, + es, + et, + fi, + fj, + fo, + fr, + pf, + ge, + gh, + gm, + gn, + gp, + gq, + gr, + gt, + hk, + hn, + hr, + ht, + hu, + id, + ie, + il, + in, + iq, + ir, + is, + it, + jm, + jo, + jp, + ke, + kg, + kh, + kp, + kr, + kw, + kz, + la, + lb, + li, + lk, + lt, + lu, + lv, + ly, + ma, + mc, + md, + me, + mk, + ml, + mm, + mn, + mo, + mt, + mv, + mx, + my, + mz, + ne, + ng, + ni, + nl, + no, + np, + nz, + om, + pa, + pe, + ph, + pk, + pl, + pr, + ps, + pt, + py, + qa, + ro, + rs, + ru, + rw, + sa, + sd, + se, + sg, + si, + sk, + sl, + sm, + sn, + so, + sv, + sy, + th, + tj, + tm, + tn, + tr, + tt, + tw, + tz, + ua, + ug, + uk, + us, + uy, + uz, + va, + ve, + vi, + vn, + xk, + ye, + zm ] steps: - name: Checkout From 70b6fd59d91541efa96530f868429f138b9f664e Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 12:50:23 +0300 Subject: [PATCH 36/51] Update format.js --- scripts/format.js | 58 +++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index bde2dbceb..fff28268c 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -27,8 +27,8 @@ async function main() { log.start() if (config.debug) log.print(`Debug mode enabled\n`) - if (config.status) log.print(`Updating channel status...\n`) - if (config.resolution) log.print(`Detecting channel resolution...\n`) + if (config.status) log.print(`Status check enabled\n`) + if (config.resolution) log.print(`Resolution detection enabled\n`) let playlists = parser.parseIndex().filter(i => i.url !== 'channels/unsorted.m3u') playlists = utils.filterPlaylists(playlists, config.country, config.exclude) @@ -69,9 +69,19 @@ async function updatePlaylist(playlist) { await checker .checkStream(channel.data) .then(result => { - if (config.status) updateStatus(channel, result.status) - if (config.resolution && result.status.ok) + const status = parseStatus(result.status) + + if (config.status) { + updateStatus(channel, status) + } + + if (config.resolution && status === 'online') { updateResolution(channel, result.status.metadata) + } + + if (config.debug && status === 'offline') { + log.print(` ERR: ${channel.url} (${result.status.reason})\n`) + } }) .catch(err => { if (config.debug) log.print(` ERR: ${channel.url} (${err.message})\n`) @@ -83,6 +93,31 @@ async function updatePlaylist(playlist) { return playlist } +function parseStatus(status) { + if (status.ok) { + return 'online' + } else if (status.reason.includes('timed out')) { + return 'timeout' + } else if (status.reason.includes('403')) { + return 'error_403' + } else if (status.reason.includes('not one of 40{0,1,3,4}')) { + return 'error_40x' // 402, 451 + } else { + return 'offline' + } +} + +function updateStatus(channel, status) { + switch (status) { + case 'online': + channel.status = null + break + case 'offline': + channel.status = 'Offline' + break + } +} + function addMissingData(channel) { // add tvg-name if (!channel.tvg.name && channel.name) { @@ -103,21 +138,6 @@ function addMissingData(channel) { channel.group.title = channel.category } -function updateStatus(channel, status) { - if (status.ok) { - channel.status = null - } else if ( - status.reason.includes('timed out') || - status.reason.includes('not one of 40{0,1,3,4}') || - status.reason.includes('403') - ) { - // nothing - } else { - channel.status = 'Offline' - if (config.debug) log.print(` ERR: ${channel.url} (${status.reason})\n`) - } -} - function updateResolution(channel, metadata) { const streams = metadata ? metadata.streams.filter(stream => stream.codec_type === 'video') : [] if (!channel.resolution.height && streams.length) { From 02a2d41cfdcafbe080f655667e1a960b8c7e733a Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 12:52:11 +0300 Subject: [PATCH 37/51] Update format.js --- scripts/format.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index fff28268c..af382fb4f 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -62,10 +62,10 @@ async function updatePlaylist(playlist) { for (const channel of playlist.channels) { addMissingData(channel) const checkOnline = config.status || config.resolution - const skip = + const skipChannel = channel.status && ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) - if (checkOnline && !skip) { + if (checkOnline && !skipChannel) { await checker .checkStream(channel.data) .then(result => { From b75d790e0291751ff04ffdc22c275178f1a94464 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 16:12:43 +0300 Subject: [PATCH 38/51] Install normalize-url package --- package-lock.json | 17 +++++++++++++++++ package.json | 1 + 2 files changed, 18 insertions(+) diff --git a/package-lock.json b/package-lock.json index 0eb569d0c..ffc2acf87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", "markdown-include": "^0.4.3", + "normalize-url": "^6.1.0", "pre-push": "^0.1.1", "progress": "^2.0.3", "transliteration": "^2.2.0" @@ -2960,6 +2961,17 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6042,6 +6054,11 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", diff --git a/package.json b/package.json index 280313fec..64d55e8f7 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", "markdown-include": "^0.4.3", + "normalize-url": "^6.1.0", "pre-push": "^0.1.1", "progress": "^2.0.3", "transliteration": "^2.2.0" From e4b697b229671f375b7103b4a1c30f8d466cf59f Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 16:52:18 +0300 Subject: [PATCH 39/51] Update Channel.js --- scripts/helpers/Channel.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/helpers/Channel.js b/scripts/helpers/Channel.js index 043f7886f..8c4b0c397 100644 --- a/scripts/helpers/Channel.js +++ b/scripts/helpers/Channel.js @@ -22,6 +22,11 @@ module.exports = class Channel { this.languages = this.parseLanguages(data.tvg.language) } + updateUrl(url) { + this.url = url + this.data.url = url + } + parseName(title) { return title .trim() From 24912fe182bbc6ea4c16c5f0e3adadd2c6aa89f8 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Tue, 10 Aug 2021 17:06:22 +0300 Subject: [PATCH 40/51] Update format.js --- scripts/format.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/format.js b/scripts/format.js index af382fb4f..acc2fca3c 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -1,4 +1,5 @@ const IPTVChecker = require('iptv-checker') +const normalize = require('normalize-url') const { program } = require('commander') const ProgressBar = require('progress') const parser = require('./helpers/parser') @@ -61,6 +62,9 @@ async function updatePlaylist(playlist) { for (const channel of playlist.channels) { addMissingData(channel) + updateGroupTitle(channel) + normalizeUrl(channel) + const checkOnline = config.status || config.resolution const skipChannel = channel.status && @@ -119,25 +123,32 @@ function updateStatus(channel, status) { } function addMissingData(channel) { - // add tvg-name + // tvg-name if (!channel.tvg.name && channel.name) { channel.tvg.name = channel.name.replace(/\"/gi, '') } - // add tvg-id + // tvg-id if (!channel.tvg.id && channel.tvg.name) { const id = utils.name2id(channel.tvg.name) channel.tvg.id = id ? `${id}.${code}` : '' } - // add country + // country if (!channel.countries.length) { const name = utils.code2name(code) channel.countries = name ? [{ code, name }] : [] channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') } - // update group-title +} + +function updateGroupTitle(channel) { channel.group.title = channel.category } +function normalizeUrl(channel) { + const normalized = normalize(channel.url, { stripWWW: false }) + channel.updateUrl(normalized) +} + function updateResolution(channel, metadata) { const streams = metadata ? metadata.streams.filter(stream => stream.codec_type === 'video') : [] if (!channel.resolution.height && streams.length) { From 46c1b73c62d5c0f33cabd1260ddde55ef9c89fa3 Mon Sep 17 00:00:00 2001 From: Diego <5572928+sguinetti@users.noreply.github.com> Date: Tue, 10 Aug 2021 10:16:40 -0500 Subject: [PATCH 41/51] Update cl.m3u MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update RetroPlus for Perú --- channels/cl.m3u | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/channels/cl.m3u b/channels/cl.m3u index bb2ed89fb..1c5a92181 100644 --- a/channels/cl.m3u +++ b/channels/cl.m3u @@ -87,9 +87,9 @@ http://server1.oklanet.cl:1935/maximavideo1/maximavideo1/playlist.m3u8 https://unlimited1-cl.dps.live/radioztv/radioztv.smil/playlist.m3u8 #EXTINF:-1 tvg-id="RadioZetaTV.cl" tvg-name="Radio Zeta TV" tvg-country="CL" tvg-language="Spanish" tvg-logo="http://ik.imagekit.io/ulangotv/image/upload/3788384_logo_radio_zeta.png" group-title="",Radio Zeta TV (480p) [Not 24/7] https://unlimited1-us.dps.live/radioztv/radioztv.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="RetroPlus2HD.cl" tvg-name="Retro Plus 2 HD" tvg-country="CL" tvg-language="" tvg-logo="https://i.imgur.com/i0rZsgG.png" group-title="Music",Retro Plus 2 HD (720p) +#EXTINF:-1 tvg-id="RetroPlus2HD.cl" tvg-name="Retro Plus 2 HD" tvg-country="CL;PE" tvg-language="" tvg-logo="https://i.imgur.com/i0rZsgG.png" group-title="Music",Retro Plus 2 HD (720p) https://59f1cbe63db89.streamlock.net:1443/retroplussenal2/retroplussenal2/playlist.m3u8 -#EXTINF:-1 tvg-id="RetroPlusHD.cl" tvg-name="Retro Plus HD" tvg-country="CL" tvg-language="" tvg-logo="https://i.imgur.com/i0rZsgG.png" group-title="Music",Retro Plus HD (720p) +#EXTINF:-1 tvg-id="RetroPlusHD.cl" tvg-name="Retro Plus HD" tvg-country="CL;PE" tvg-language="" tvg-logo="https://i.imgur.com/i0rZsgG.png" group-title="Music",Retro Plus HD (720p) https://59f1cbe63db89.streamlock.net:1443/retroplustv/retroplustv/playlist.m3u8 #EXTINF:-1 tvg-id="RewindHD.cl" tvg-name="Rewind HD" tvg-country="CL" tvg-language="" tvg-logo="https://i.imgur.com/Ni2jlBi.png" group-title="Music",Rewind HD (720p) [Not 24/7] https://tls.cdnz.cl/rewindtv/rewindtv/playlist.m3u8 From 38690654de53ae3003536e8e8882af62d63ac8b6 Mon Sep 17 00:00:00 2001 From: MapGuy11 <43685307+MapGuy11@users.noreply.github.com> Date: Tue, 10 Aug 2021 12:53:16 -0400 Subject: [PATCH 42/51] Update us.m3u --- channels/us.m3u | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/channels/us.m3u b/channels/us.m3u index dc4778243..cb0ebf542 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -6615,9 +6615,9 @@ https://ln-zen.localnowlive.com/v1/master/385c85a93929f94966d0fb186fc33b431e6f1e https://rockentertainment-zoomoo-1.samsung.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="KanalDisney.us" tvg-name="Канал Disney" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/Q9KoVy9.png" group-title="Kids",Канал Disney (576p) http://188.40.68.167/russia/disney/playlist.m3u8 -#EXTINF:-1 tvg-id="WSNN-LD1.us" tvg-name="WSNN-LD1" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/75548/s75548_h3_aa.png" group-title="Locals",WSNN-LD1 (Suncoast News Network) +#EXTINF:-1 tvg-id="WSNNLD1.us" tvg-name="WSNN-LD1" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/75548/s75548_h3_aa.png" group-title="Locals",WSNN-LD1 (Suncoast News Network) https://cdn88.theus6tv.tk/united-states/locals/tampa/wsnn-ld.m3u8 -#EXTINF:-1 tvg-id="WISC-DT2.us" tvg-name="WISC-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/25125/s51307_h3_aa.png" group-title="Locals",WISC-DT2 (My Madison TV) +#EXTINF:-1 tvg-id="WISCDT2.us" tvg-name="WISC-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/25125/s51307_h3_aa.png" group-title="Locals",WISC-DT2 (My Madison TV) https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 -#EXTINF:-1 tvg-id="WFMZ-DT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="Locals",WFMZ-DT2 (69News Weather Channel) +#EXTINF:-1 tvg-id="WFMZDT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="Locals",WFMZ-DT2 (69News Weather Channel) [Offline] https://cdn88.theus6tv.tk/united-states/locals/philadelphia/wfmz-dt2.m3u8 From c4fc12d497d253fabca799cea0795921f52e7b36 Mon Sep 17 00:00:00 2001 From: Dum4G Date: Tue, 10 Aug 2021 23:45:32 +0300 Subject: [PATCH 43/51] Revert "Update "format" script" --- .github/workflows/auto-update.yml | 161 ++++++++++--------- .github/workflows/clean.yml | 257 ++++++++++++++++++++++++++++++ CONTRIBUTING.md | 7 +- package-lock.json | 20 +-- package.json | 4 +- scripts/clean.js | 74 +++++++++ scripts/detect-resolution.js | 114 +++++++++++++ scripts/format.js | 153 +++--------------- scripts/helpers/Channel.js | 5 - scripts/helpers/utils.js | 11 ++ 10 files changed, 579 insertions(+), 227 deletions(-) create mode 100644 .github/workflows/clean.yml create mode 100644 scripts/clean.js create mode 100644 scripts/detect-resolution.js diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index 51cf6df50..213deb39b 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -20,6 +20,90 @@ jobs: format: runs-on: ubuntu-latest needs: create-branch + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Format Playlists + run: node scripts/format.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Formate playlists' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + sort: + runs-on: ubuntu-latest + needs: format + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Sort Channels + run: node scripts/sort.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Sort channels' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + remove-duplicates: + runs-on: ubuntu-latest + needs: sort + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Remove Duplicates + run: node scripts/remove-duplicates.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Remove duplicates' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + filter: + runs-on: ubuntu-latest + needs: remove-duplicates + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Filter Playlists + run: node scripts/filter.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Filter channels' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + detect-resolution: + runs-on: ubuntu-latest + needs: filter continue-on-error: true strategy: fail-fast: false @@ -193,12 +277,10 @@ jobs: uses: actions/checkout@v2 with: ref: bot/auto-update - - name: Setup FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v1 - name: Install Dependencies run: npm install - - name: Format Playlists - run: node scripts/format.js --country=${{ matrix.country }} --status --resolution --debug + - name: Detect Resolution + run: node scripts/detect-resolution.js --country=${{ matrix.country }} - name: Upload Artifact uses: actions/upload-artifact@v2 with: @@ -206,7 +288,7 @@ jobs: path: channels/${{ matrix.country }}.m3u commit-changes: runs-on: ubuntu-latest - needs: format + needs: detect-resolution steps: - name: Checkout uses: actions/checkout@v2 @@ -220,70 +302,7 @@ jobs: - name: Commit Changes uses: stefanzweifel/git-auto-commit-action@v4 with: - commit_message: '[Bot] Format playlists' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - remove-duplicates: - runs-on: ubuntu-latest - needs: commit-changes - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Remove Duplicates - run: node scripts/remove-duplicates.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Remove duplicates' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - sort: - runs-on: ubuntu-latest - needs: remove-duplicates - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Sort Channels - run: node scripts/sort.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Sort channels' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - filter: - runs-on: ubuntu-latest - needs: sort - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Filter Playlists - run: node scripts/filter.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Filter channels' + commit_message: '[Bot] Detect resolution' commit_user_name: iptv-bot commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' @@ -291,7 +310,7 @@ jobs: file_pattern: channels/* generate: runs-on: ubuntu-latest - needs: filter + needs: commit-changes steps: - name: Checkout uses: actions/checkout@v2 @@ -357,7 +376,6 @@ jobs: branch: bot/auto-update file_pattern: README.md pull-request: - if: ${{ github.ref == 'refs/heads/master' }} needs: update-readme runs-on: ubuntu-latest steps: @@ -390,6 +408,7 @@ jobs: pull-request-number: ${{ steps.pr.outputs.pr_number }} merge-method: squash - name: Approve Pull Request + if: github.ref == 'refs/heads/master' uses: juliangruber/approve-pull-request-action@v1 with: github-token: ${{ secrets.PAT }} diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml new file mode 100644 index 000000000..3c1f9a452 --- /dev/null +++ b/.github/workflows/clean.yml @@ -0,0 +1,257 @@ +name: clean +on: + workflow_dispatch: + schedule: + - cron: '0 6 * * 0' +jobs: + create-branch: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + - name: Create Branch + uses: peterjgrainger/action-create-branch@v2.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + branch: 'bot/remove-broken-links' + check: + runs-on: ubuntu-latest + needs: create-branch + continue-on-error: true + strategy: + fail-fast: false + matrix: + country: + [ + ad, + ae, + af, + ag, + al, + am, + an, + ao, + ar, + at, + au, + aw, + az, + ba, + bb, + bd, + be, + bf, + bg, + bh, + bn, + bo, + br, + bs, + by, + ca, + cd, + cg, + ch, + ci, + cl, + cm, + cn, + co, + cr, + cu, + cw, + cy, + cz, + de, + dk, + do, + dz, + ec, + ee, + eg, + es, + et, + fi, + fj, + fo, + fr, + pf, + ge, + gh, + gm, + gn, + gp, + gq, + gr, + gt, + hk, + hn, + hr, + ht, + hu, + id, + ie, + il, + in, + iq, + ir, + is, + it, + jm, + jo, + jp, + ke, + kg, + kh, + kp, + kr, + kw, + kz, + la, + lb, + li, + lk, + lt, + lu, + lv, + ly, + ma, + mc, + md, + me, + mk, + ml, + mm, + mn, + mo, + mt, + mv, + mx, + my, + mz, + ne, + ng, + ni, + nl, + no, + np, + nz, + om, + pa, + pe, + ph, + pk, + pl, + pr, + ps, + pt, + py, + qa, + ro, + rs, + ru, + rw, + sa, + sd, + se, + sg, + si, + sk, + sl, + sm, + sn, + so, + sv, + sy, + th, + tj, + tm, + tn, + tr, + tt, + tw, + tz, + ua, + ug, + uk, + us, + uy, + uz, + va, + ve, + vi, + vn, + xk, + ye, + zm, + unsorted + ] + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/remove-broken-links + - name: Setup FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v1 + - name: Install Dependencies + run: npm install + - name: Remove Broken Links + run: node scripts/clean.js --country=${{ matrix.country }} --debug + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: channels + path: channels/${{ matrix.country }}.m3u + commit-changes: + runs-on: ubuntu-latest + needs: check + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/remove-broken-links + - name: Download Artifacts + uses: actions/download-artifact@v2 + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Remove broken links' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/remove-broken-links + file_pattern: channels/* + pull-request: + if: ${{ github.ref == 'refs/heads/master' }} + runs-on: ubuntu-latest + needs: commit-changes + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/remove-broken-links + - name: Generate Token + uses: tibdex/github-app-token@v1 + id: generate-token + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Create Pull Request + uses: repo-sync/pull-request@v2 + with: + source_branch: 'bot/remove-broken-links' + destination_branch: 'master' + pr_title: '[Bot] Remove broken links' + pr_body: | + This pull request is created by [clean][1] workflow. + + The script checks all links except those with labels `[Geo-blocked]`, `[Offline]` or `[Not 24/7]` in the title. + + **IMPORTANT:** Before merging all links should be checked manually to make sure that the response from the server has not changed. If the link works for you but occasionally return an HTTP code 403 (Forbidden) then it should be marked as `[Geo-blocked]`. If the link does not work but has no alternative, you can mark it as `[Offline]` to save it in the playlist along with a description. Working links should be marked as `[Not 24/7]` so that the script will skip them next time. + + [1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }} + pr_draft: true + github_token: ${{ steps.generate-token.outputs.token }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ef08f6c07..a111b6713 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,7 +125,7 @@ STREAM_URL | `LANGUAGE` | Channel language. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). If the channel is broadcast in several languages you can list them separated by a semicolon. (optional) | | `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. Supports files in png, jpeg and gif format. (optional) | | `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | -| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except round and square brackets. | +| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | | `STREAM_TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | | `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | | `STREAM_RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | @@ -153,8 +153,7 @@ http://example.com/stream.m3u8 - `.github/` - `ISSUE_TEMPLATE/`: issue templates for this repository. - `workflows/` - - `auto-update.yml`: GitHub Action that automatically updates all playlists every day. - - `check.yml`: GitHub Action that automatically checks every pull request for syntax errors. + - `auto-update.yml`: contain actions that automatically updates all playlists every day. - `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned. - `.readme/` - `_categories.md`: automatically generated list of all categories and their corresponding playlists. @@ -169,6 +168,8 @@ http://example.com/stream.m3u8 - `unsorted.m3u`: playlist with channels not yet sorted. - `scripts/` - `helpers/`: helper scripts used in GitHub Actions. + - `clean.js`: used in GitHub Action to check all links and remove broken ones. + - `detect-resolution.js`: used in GitHub Action to detect resolution of the streams. - `filter.js`: used within GitHub Action to remove blacklisted channels from playlists. - `format.js`: used within GitHub Action to format channel descriptions. - `generate.js`: used within GitHub Action to generate all additional playlists. diff --git a/package-lock.json b/package-lock.json index ffc2acf87..06cebc1d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,12 +7,14 @@ "license": "MIT", "dependencies": { "@freearhey/iso-639-3": "^1.0.0", + "axios": "^0.21.1", + "chalk": "^4.1.1", "commander": "^7.0.0", + "escape-string-regexp": "^2.0.0", "iptv-checker": "^0.20.2", "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", "markdown-include": "^0.4.3", - "normalize-url": "^6.1.0", "pre-push": "^0.1.1", "progress": "^2.0.3", "transliteration": "^2.2.0" @@ -2961,17 +2963,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6054,11 +6045,6 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", diff --git a/package.json b/package.json index 64d55e8f7..ea3700063 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,14 @@ "license": "MIT", "dependencies": { "@freearhey/iso-639-3": "^1.0.0", + "axios": "^0.21.1", + "chalk": "^4.1.1", "commander": "^7.0.0", + "escape-string-regexp": "^2.0.0", "iptv-checker": "^0.20.2", "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", "markdown-include": "^0.4.3", - "normalize-url": "^6.1.0", "pre-push": "^0.1.1", "progress": "^2.0.3", "transliteration": "^2.2.0" diff --git a/scripts/clean.js b/scripts/clean.js new file mode 100644 index 000000000..d1ab7c2e7 --- /dev/null +++ b/scripts/clean.js @@ -0,0 +1,74 @@ +const IPTVChecker = require('iptv-checker') +const { program } = require('commander') +const ProgressBar = require('progress') +const parser = require('./helpers/parser') +const utils = require('./helpers/utils') +const log = require('./helpers/log') + +program + .usage('[OPTIONS]...') + .option('-d, --debug', 'Enable debug mode') + .option('-c, --country ', 'Comma-separated list of country codes', '') + .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') + .option('--timeout ', 'Set timeout for each request', 5000) + .parse(process.argv) + +let bar +const config = program.opts() +const ignoreStatus = ['Geo-blocked', 'Not 24/7', 'Offline'] +const checker = new IPTVChecker({ + timeout: config.timeout +}) + +async function main() { + log.start() + + if (config.debug) log.print(`Debug mode enabled\n`) + + let playlists = parser.parseIndex() + playlists = utils.filterPlaylists(playlists, config.country, config.exclude) + for (const playlist of playlists) { + await parser + .parsePlaylist(playlist.url) + .then(checkPlaylist) + .then(p => p.save()) + } + + log.finish() +} + +async function checkPlaylist(playlist) { + if (!config.debug) { + bar = new ProgressBar(`Checking '${playlist.url}': [:bar] :current/:total (:percent) `, { + total: playlist.channels.length + }) + } + const channels = [] + const total = playlist.channels.length + for (const [index, channel] of playlist.channels.entries()) { + const skipChannel = + channel.status && + ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) + if (skipChannel) { + channels.push(channel) + } else { + const result = await checker.checkStream(channel.data) + if (result.status.ok || result.status.reason.includes('timed out')) { + channels.push(channel) + } else { + if (config.debug) log.print(`ERR: ${channel.url} (${result.status.reason})\n`) + } + } + if (!config.debug) bar.tick() + } + + if (playlist.channels.length !== channels.length) { + log.print(`File '${playlist.url}' has been updated\n`) + playlist.channels = channels + playlist.updated = true + } + + return playlist +} + +main() diff --git a/scripts/detect-resolution.js b/scripts/detect-resolution.js new file mode 100644 index 000000000..5da6a282f --- /dev/null +++ b/scripts/detect-resolution.js @@ -0,0 +1,114 @@ +const { program } = require('commander') +const ProgressBar = require('progress') +const axios = require('axios') +const https = require('https') +const parser = require('./helpers/parser') +const utils = require('./helpers/utils') +const log = require('./helpers/log') + +program + .usage('[OPTIONS]...') + .option('-c, --country ', 'Comma-separated list of country codes', '') + .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') + .option('--delay ', 'Delay between parser requests', 1000) + .option('--timeout ', 'Set timeout for each request', 5000) + .parse(process.argv) + +const config = program.opts() +const ignoreStatus = ['Offline'] +const instance = axios.create({ + timeout: config.timeout, + maxContentLength: 200000, + httpsAgent: new https.Agent({ + rejectUnauthorized: false + }) +}) + +async function main() { + log.start() + + log.print(`Parsing 'index.m3u'...\n`) + let playlists = parser.parseIndex() + playlists = utils + .filterPlaylists(playlists, config.country, config.exclude) + .filter(i => i.url !== 'channels/unsorted.m3u') + + for (const playlist of playlists) { + await parser + .parsePlaylist(playlist.url) + .then(detectResolution) + .then(p => p.save()) + } + + log.finish() +} + +async function detectResolution(playlist) { + const channels = [] + const bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { + total: playlist.channels.length + }) + let updated = false + for (const channel of playlist.channels) { + bar.tick() + const skipChannel = + channel.status && + ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) + if (!channel.resolution.height && !skipChannel) { + const CancelToken = axios.CancelToken + const source = CancelToken.source() + const timeout = setTimeout(() => { + source.cancel() + }, config.timeout) + + const response = await instance + .get(channel.url, { cancelToken: source.token }) + .then(res => { + clearTimeout(timeout) + + return res + }) + .then(utils.sleep(config.delay)) + .catch(err => { + clearTimeout(timeout) + }) + + if (response && response.status === 200) { + if (/^#EXTM3U/.test(response.data)) { + const resolution = parseResolution(response.data) + if (resolution) { + channel.resolution = resolution + updated = true + } + } + } + } + + channels.push(channel) + } + + if (updated) { + log.print(`File '${playlist.url}' has been updated\n`) + playlist.channels = channels + playlist.updated = true + } + + return playlist +} + +function parseResolution(string) { + const regex = /RESOLUTION=(\d+)x(\d+)/gm + const match = string.matchAll(regex) + const arr = Array.from(match).map(m => ({ + width: parseInt(m[1]), + height: parseInt(m[2]) + })) + + return arr.length + ? arr.reduce(function (prev, current) { + return prev.height > current.height ? prev : current + }) + : undefined +} + +main() diff --git a/scripts/format.js b/scripts/format.js index acc2fca3c..fb77cab20 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -1,46 +1,21 @@ -const IPTVChecker = require('iptv-checker') -const normalize = require('normalize-url') -const { program } = require('commander') -const ProgressBar = require('progress') const parser = require('./helpers/parser') const utils = require('./helpers/utils') const file = require('./helpers/file') const log = require('./helpers/log') -program - .usage('[OPTIONS]...') - .option('-d, --debug', 'Enable debug mode') - .option('-s, --status', 'Update stream status') - .option('-r, --resolution', 'Detect stream resolution') - .option('-c, --country ', 'Comma-separated list of country codes', '') - .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') - .option('--timeout ', 'Set timeout for each request', 5000) - .parse(process.argv) - -let bar -const ignoreStatus = ['Geo-blocked', 'Not 24/7'] -const config = program.opts() -const checker = new IPTVChecker({ - timeout: config.timeout -}) - async function main() { log.start() - if (config.debug) log.print(`Debug mode enabled\n`) - if (config.status) log.print(`Status check enabled\n`) - if (config.resolution) log.print(`Resolution detection enabled\n`) - + log.print(`Parsing 'index.m3u'...`) let playlists = parser.parseIndex().filter(i => i.url !== 'channels/unsorted.m3u') - playlists = utils.filterPlaylists(playlists, config.country, config.exclude) - if (!playlists.length) log.print(`No playlist is selected\n`) for (const playlist of playlists) { + log.print(`\nProcessing '${playlist.url}'...`) await parser .parsePlaylist(playlist.url) - .then(updatePlaylist) + .then(formatPlaylist) .then(playlist => { if (file.read(playlist.url) !== playlist.toString()) { - log.print(`File '${playlist.url}' has been updated\n`) + log.print('updated') playlist.updated = true } @@ -48,115 +23,33 @@ async function main() { }) } + log.print('\n') log.finish() } -async function updatePlaylist(playlist) { - if (!config.debug) { - bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { - total: playlist.channels.length - }) - } else { - log.print(`Processing '${playlist.url}'...\n`) - } - +async function formatPlaylist(playlist) { for (const channel of playlist.channels) { - addMissingData(channel) - updateGroupTitle(channel) - normalizeUrl(channel) - - const checkOnline = config.status || config.resolution - const skipChannel = - channel.status && - ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) - if (checkOnline && !skipChannel) { - await checker - .checkStream(channel.data) - .then(result => { - const status = parseStatus(result.status) - - if (config.status) { - updateStatus(channel, status) - } - - if (config.resolution && status === 'online') { - updateResolution(channel, result.status.metadata) - } - - if (config.debug && status === 'offline') { - log.print(` ERR: ${channel.url} (${result.status.reason})\n`) - } - }) - .catch(err => { - if (config.debug) log.print(` ERR: ${channel.url} (${err.message})\n`) - }) + const code = file.getBasename(playlist.url) + // add missing tvg-name + if (!channel.tvg.name && code !== 'unsorted' && channel.name) { + channel.tvg.name = channel.name.replace(/\"/gi, '') } - if (!config.debug) bar.tick() + // add missing tvg-id + if (!channel.tvg.id && code !== 'unsorted' && channel.tvg.name) { + const id = utils.name2id(channel.tvg.name) + channel.tvg.id = id ? `${id}.${code}` : '' + } + // add missing country + if (!channel.countries.length) { + const name = utils.code2name(code) + channel.countries = name ? [{ code, name }] : [] + channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') + } + // update group-title + channel.group.title = channel.category } return playlist } -function parseStatus(status) { - if (status.ok) { - return 'online' - } else if (status.reason.includes('timed out')) { - return 'timeout' - } else if (status.reason.includes('403')) { - return 'error_403' - } else if (status.reason.includes('not one of 40{0,1,3,4}')) { - return 'error_40x' // 402, 451 - } else { - return 'offline' - } -} - -function updateStatus(channel, status) { - switch (status) { - case 'online': - channel.status = null - break - case 'offline': - channel.status = 'Offline' - break - } -} - -function addMissingData(channel) { - // tvg-name - if (!channel.tvg.name && channel.name) { - channel.tvg.name = channel.name.replace(/\"/gi, '') - } - // tvg-id - if (!channel.tvg.id && channel.tvg.name) { - const id = utils.name2id(channel.tvg.name) - channel.tvg.id = id ? `${id}.${code}` : '' - } - // country - if (!channel.countries.length) { - const name = utils.code2name(code) - channel.countries = name ? [{ code, name }] : [] - channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') - } -} - -function updateGroupTitle(channel) { - channel.group.title = channel.category -} - -function normalizeUrl(channel) { - const normalized = normalize(channel.url, { stripWWW: false }) - channel.updateUrl(normalized) -} - -function updateResolution(channel, metadata) { - const streams = metadata ? metadata.streams.filter(stream => stream.codec_type === 'video') : [] - if (!channel.resolution.height && streams.length) { - channel.resolution = streams.reduce((acc, curr) => { - if (curr.height > acc.height) return { width: curr.width, height: curr.height } - return acc - }) - } -} - main() diff --git a/scripts/helpers/Channel.js b/scripts/helpers/Channel.js index 8c4b0c397..043f7886f 100644 --- a/scripts/helpers/Channel.js +++ b/scripts/helpers/Channel.js @@ -22,11 +22,6 @@ module.exports = class Channel { this.languages = this.parseLanguages(data.tvg.language) } - updateUrl(url) { - this.url = url - this.data.url = url - } - parseName(title) { return title .trim() diff --git a/scripts/helpers/utils.js b/scripts/helpers/utils.js index f0d9b3e50..7a2bae063 100644 --- a/scripts/helpers/utils.js +++ b/scripts/helpers/utils.js @@ -1,3 +1,4 @@ +const escapeStringRegexp = require('escape-string-regexp') const transliteration = require('transliteration') const iso6393 = require('@freearhey/iso-639-3') const categories = require('./categories') @@ -70,6 +71,16 @@ utils.sortBy = function (arr, fields) { }) } +utils.escapeStringRegexp = function (scring) { + return escapeStringRegexp(string) +} + +utils.sleep = function (ms) { + return function (x) { + return new Promise(resolve => setTimeout(() => resolve(x), ms)) + } +} + utils.removeProtocol = function (string) { return string.replace(/(^\w+:|^)\/\//, '') } From 434dea471d655630e99910de9070945f709d3b15 Mon Sep 17 00:00:00 2001 From: tilfizyawn <82530182+tilfizyawn@users.noreply.github.com> Date: Tue, 10 Aug 2021 22:17:41 +0100 Subject: [PATCH 44/51] Add Aghani Aghani --- channels/lb.m3u | 2 ++ 1 file changed, 2 insertions(+) diff --git a/channels/lb.m3u b/channels/lb.m3u index f63801598..80c56cb25 100644 --- a/channels/lb.m3u +++ b/channels/lb.m3u @@ -1,4 +1,6 @@ #EXTM3U +#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://aghaniaghani.com/images/logo.png" tvg-country="LB" group-title="Music",Aghani Aghani (1080p) +https://svs.itworkscdn.net/aghanilive/aghanilive/playlist.m3u8 #EXTINF:-1 tvg-id="AlIttihad.lb" tvg-name="Al Ittihad" tvg-country="LB" tvg-language="Arabic" tvg-logo="http://alittihad.tv/assets/images/logo.png" group-title="General",Al Ittihad (552p) https://live.alittihad.tv/ittihad/index.m3u8 #EXTINF:-1 tvg-id="AlManar.lb" tvg-name="Al Manar" tvg-country="LB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/dmDzNQO.png" group-title="News",Al Manar (576p) From 08167d399d6b83abcaa5c1ff550ee167858bf2b5 Mon Sep 17 00:00:00 2001 From: Dum4G Date: Wed, 11 Aug 2021 01:36:42 +0300 Subject: [PATCH 45/51] TeleLiban is back --- channels/lb.m3u | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/channels/lb.m3u b/channels/lb.m3u index 80c56cb25..2ed9d974b 100644 --- a/channels/lb.m3u +++ b/channels/lb.m3u @@ -15,7 +15,7 @@ https://wowzaprod140-i.akamaihd.net/hls/live/750788/7552102e/playlist.m3u8 https://svs.itworkscdn.net/alimanlive/imantv.smil/playlist.m3u8 #EXTINF:-1 tvg-id="ArabicaMusic.lb" tvg-name="Arabica Music" tvg-country="LB" tvg-language="Arabic" tvg-logo="https://arabicagroup.tv/images/app1.png" group-title="Music",Arabica TV (720p) http://istream.binarywaves.com:8081/hls/arabica/playlist.m3u8 -#EXTINF:-1 tvg-id="CharityTV.lb" tvg-name="CharityTV" tvg-country="LB" tvg-language="Arabic" tvg-logo="https://kreim-storage.fra1.digitaloceanspaces.com/APP%20Logo%20PNG.png" group-title="Religious",CharityTV (1080p) +#EXTINF:-1 tvg-id="CharityTV.lb" tvg-name="CharityTV" tvg-country="LB" tvg-language="Arabic" tvg-logo="https://kreim-storage.fra1.digitaloceanspaces.com/APP%20Logo%20PNG.png" group-title="Religious",CharityTV [Offline] http://185.105.4.236:1935/live/ngrp:livestream_all/live.m3u8 #EXTINF:-1 tvg-id="FutureTV.lb" tvg-name="Future TV" tvg-country="LB" tvg-language="Arabic" tvg-logo="http://futuretvnetwork.com/images/logo.png" group-title="General",Future TV #EXTVLCOPT:http-referrer=http://azrotv.com/ @@ -55,5 +55,8 @@ https://svs.itworkscdn.net/madalive/mada/playlist.m3u8 #EXTVLCOPT:http-referrer=http://azrotv.com/ #EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 http://teledunet.com:8080/live/azrotv/azrotv2021/10012.m3u8 +#EXTINF:-1 tvg-id="TeleLiban.lb" tvg-name="Tele Liban" tvg-country="LB" tvg-language="Arabic" tvg-logo="http://www.teleliban.com.lb/images/telelogo.png" group-title="General",Tele Liban (576p) +#EXTVLCOPT:http-referrer=https://www.teleliban.com.lb/live +https://cdn.catiacast.video/abr/ed8f807e2548db4507d2a6f4ba0c4a06/tl/mbs1/chunks.m3u8 #EXTINF:-1 tvg-id="TVSeventeen.lb" tvg-name="TV Seventeen" tvg-country="LB" tvg-language="Arabic" tvg-logo="https://www.tvseventeen.com/img/logo.png" group-title="News",TV Seventeen (720p) https://cdn.tvseventeen.com/test_tv_seventeen/index.m3u8 From a7eddb6021a19c260968ee2ce5bc6edfa334c04b Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 00:56:38 +0000 Subject: [PATCH 46/51] [Bot] Update playlists (#4039) * [Bot] Formate playlists * [Bot] Sort channels * [Bot] Detect resolution * [Bot] Update README.md Co-authored-by: iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com> --- README.md | 16 ++++++++-------- channels/kw.m3u | 2 +- channels/lb.m3u | 2 +- channels/ru.m3u | 2 +- channels/us.m3u | 12 ++++++------ 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 19431a44f..9848dbd62 100644 --- a/README.md +++ b/README.md @@ -45,13 +45,13 @@ Or select one of the playlists from the list below. Education22https://iptv-org.github.io/iptv/categories/education.m3u Entertainment212https://iptv-org.github.io/iptv/categories/entertainment.m3u Family54https://iptv-org.github.io/iptv/categories/family.m3u - General338https://iptv-org.github.io/iptv/categories/general.m3u + General339https://iptv-org.github.io/iptv/categories/general.m3u Kids213https://iptv-org.github.io/iptv/categories/kids.m3u Legislative61https://iptv-org.github.io/iptv/categories/legislative.m3u Lifestyle94https://iptv-org.github.io/iptv/categories/lifestyle.m3u Local549https://iptv-org.github.io/iptv/categories/local.m3u Movies278https://iptv-org.github.io/iptv/categories/movies.m3u - Music410https://iptv-org.github.io/iptv/categories/music.m3u + Music411https://iptv-org.github.io/iptv/categories/music.m3u News492https://iptv-org.github.io/iptv/categories/news.m3u Outdoor52https://iptv-org.github.io/iptv/categories/outdoor.m3u Relax19https://iptv-org.github.io/iptv/categories/relax.m3u @@ -63,7 +63,7 @@ Or select one of the playlists from the list below. Travel28https://iptv-org.github.io/iptv/categories/travel.m3u Weather19https://iptv-org.github.io/iptv/categories/weather.m3u XXX59https://iptv-org.github.io/iptv/categories/xxx.m3u - Other4877https://iptv-org.github.io/iptv/categories/other.m3u + Other4880https://iptv-org.github.io/iptv/categories/other.m3u @@ -84,7 +84,7 @@ Or select one of the playlists from the list below. Akan2https://iptv-org.github.io/iptv/languages/aka.m3u Albanian17https://iptv-org.github.io/iptv/languages/sqi.m3u Amharic1https://iptv-org.github.io/iptv/languages/amh.m3u - Arabic413https://iptv-org.github.io/iptv/languages/ara.m3u + Arabic415https://iptv-org.github.io/iptv/languages/ara.m3u Armenian28https://iptv-org.github.io/iptv/languages/hye.m3u Assyrian Neo-Aramaic1https://iptv-org.github.io/iptv/languages/aii.m3u Azerbaijani10https://iptv-org.github.io/iptv/languages/aze.m3u @@ -99,7 +99,7 @@ Or select one of the playlists from the list below. Czech21https://iptv-org.github.io/iptv/languages/ces.m3u Danish4https://iptv-org.github.io/iptv/languages/dan.m3u Dutch60https://iptv-org.github.io/iptv/languages/nld.m3u - English2438https://iptv-org.github.io/iptv/languages/eng.m3u + English2441https://iptv-org.github.io/iptv/languages/eng.m3u Estonian3https://iptv-org.github.io/iptv/languages/est.m3u Faroese1https://iptv-org.github.io/iptv/languages/fao.m3u Finnish1https://iptv-org.github.io/iptv/languages/fin.m3u @@ -286,7 +286,7 @@ Or select one of the playlists from the list below. 🇰🇬 Kyrgyzstan3https://iptv-org.github.io/iptv/countries/kg.m3u 🇱🇦 Laos6https://iptv-org.github.io/iptv/countries/la.m3u 🇱🇻 Latvia9https://iptv-org.github.io/iptv/countries/lv.m3u - 🇱🇧 Lebanon69https://iptv-org.github.io/iptv/countries/lb.m3u + 🇱🇧 Lebanon71https://iptv-org.github.io/iptv/countries/lb.m3u 🇱🇸 Lesotho1https://iptv-org.github.io/iptv/countries/ls.m3u 🇱🇷 Liberia1https://iptv-org.github.io/iptv/countries/lr.m3u 🇱🇾 Libya53https://iptv-org.github.io/iptv/countries/ly.m3u @@ -336,7 +336,7 @@ Or select one of the playlists from the list below. 🇵🇦 Panama30https://iptv-org.github.io/iptv/countries/pa.m3u 🇵🇬 Papua New Guinea3https://iptv-org.github.io/iptv/countries/pg.m3u 🇵🇾 Paraguay28https://iptv-org.github.io/iptv/countries/py.m3u - 🇵🇪 Peru106https://iptv-org.github.io/iptv/countries/pe.m3u + 🇵🇪 Peru108https://iptv-org.github.io/iptv/countries/pe.m3u 🇵🇭 Philippines20https://iptv-org.github.io/iptv/countries/ph.m3u 🇵🇳 Pitcairn Islands3https://iptv-org.github.io/iptv/countries/pn.m3u 🇵🇱 Poland45https://iptv-org.github.io/iptv/countries/pl.m3u @@ -390,7 +390,7 @@ Or select one of the playlists from the list below. 🇺🇦 Ukraine116https://iptv-org.github.io/iptv/countries/ua.m3u 🇦🇪 United Arab Emirates88https://iptv-org.github.io/iptv/countries/ae.m3u 🇬🇧 United Kingdom229https://iptv-org.github.io/iptv/countries/uk.m3u - 🇺🇸 United States2266https://iptv-org.github.io/iptv/countries/us.m3u + 🇺🇸 United States2269https://iptv-org.github.io/iptv/countries/us.m3u 🇺🇾 Uruguay22https://iptv-org.github.io/iptv/countries/uy.m3u 🇺🇿 Uzbekistan3https://iptv-org.github.io/iptv/countries/uz.m3u 🇻🇺 Vanuatu3https://iptv-org.github.io/iptv/countries/vu.m3u diff --git a/channels/kw.m3u b/channels/kw.m3u index 5cb39f24a..7ee08a4d8 100644 --- a/channels/kw.m3u +++ b/channels/kw.m3u @@ -17,7 +17,7 @@ http://www.elahmad.com/tv/m3u8/alkass.m3u8?id=alkass1 http://www.elahmad.com/tv/m3u8/alkass.m3u8?id=alkass2 #EXTINF:-1 tvg-id="Alkasssport3.kw" tvg-name="Alkass sport 3" tvg-country="KW" tvg-language="" tvg-logo="" group-title="Sports",Alkass sport 3 http://www.elahmad.com/tv/m3u8/alkass.m3u8?id=alkass3 -#EXTINF:-1 tvg-id="Alkasssport4.kw" tvg-name="Alkass sport 4" tvg-country="KW" tvg-language="" tvg-logo="" group-title="Sports",Alkass sport 4 +#EXTINF:-1 tvg-id="Alkasssport4.kw" tvg-name="Alkass sport 4" tvg-country="KW" tvg-language="" tvg-logo="" group-title="Sports",Alkass sport 4 (576p) http://www.elahmad.com/tv/m3u8/alkass.m3u8?id=alkass4 #EXTINF:-1 tvg-id="Alkasssport5.kw" tvg-name="Alkass sport 5" tvg-country="KW" tvg-language="" tvg-logo="" group-title="Sports",Alkass sport 5 http://www.elahmad.com/tv/m3u8/alkass.m3u8?id=alkass5 diff --git a/channels/lb.m3u b/channels/lb.m3u index 2ed9d974b..2a1aea6a0 100644 --- a/channels/lb.m3u +++ b/channels/lb.m3u @@ -1,5 +1,5 @@ #EXTM3U -#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://aghaniaghani.com/images/logo.png" tvg-country="LB" group-title="Music",Aghani Aghani (1080p) +#EXTINF:-1 tvg-id="AghaniAghani.lb" tvg-name="Aghani Aghani" tvg-country="LB" tvg-language="Arabic" tvg-logo="https://aghaniaghani.com/images/logo.png" group-title="Music",Aghani Aghani (1080p) https://svs.itworkscdn.net/aghanilive/aghanilive/playlist.m3u8 #EXTINF:-1 tvg-id="AlIttihad.lb" tvg-name="Al Ittihad" tvg-country="LB" tvg-language="Arabic" tvg-logo="http://alittihad.tv/assets/images/logo.png" group-title="General",Al Ittihad (552p) https://live.alittihad.tv/ittihad/index.m3u8 diff --git a/channels/ru.m3u b/channels/ru.m3u index 7a93158f4..5a83cdf8a 100644 --- a/channels/ru.m3u +++ b/channels/ru.m3u @@ -705,7 +705,7 @@ https://live2.mediacdn.ru/sr1/sever-mobile/playlist.m3u8 https://live2.mediacdn.ru/sr1/sever/playlist.m3u8 #EXTINF:-1 tvg-id="SelengaTV.ru" tvg-name="Селенга ТВ" tvg-country="RU" tvg-language="" tvg-logo="" group-title="",Селенга ТВ http://90.188.37.86/live/playlist.m3u8 -#EXTINF:-1 tvg-id="Siesta.ru" tvg-name="Сиеста" tvg-country="RU" tvg-language="Russian" tvg-logo="" group-title="",Сиеста +#EXTINF:-1 tvg-id="Siesta.ru" tvg-name="Сиеста" tvg-country="RU" tvg-language="Russian" tvg-logo="" group-title="",Сиеста (720p) https://1hdru-hls-otcnet.cdnvideo.ru/siesta/index.m3u8 #EXTINF:-1 tvg-id="SmaylikTV.ru" tvg-name="Смайлик ТВ" tvg-country="RU" tvg-language="Russian" tvg-logo="http://smilik.tv/wp-content/uploads/2016/02/Desktop_-1.png" group-title="Kids",Смайлик ТВ (720p) http://62.32.67.187:1935/WEB_Smilik/ngrp:Smilik.stream-adaptive/playlist.m3u8 diff --git a/channels/us.m3u b/channels/us.m3u index cb0ebf542..76a7f5260 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -6455,6 +6455,8 @@ https://jukin-weatherspy-2-eu.rakuten.wurl.com/manifest/playlist.m3u8 https://dai.google.com/linear/hls/event/fLqJePs_QR-FRTttC8fMIA/master.m3u8 #EXTINF:-1 tvg-id="WETA.us" tvg-name="WETA Metro (WETA) (Do Not Broadcast .1)" tvg-country="US" tvg-language="English" tvg-logo="https://image.pbs.org/stations/weta-color-single-brand-logo-ZeUHAPm.png" group-title="General",WETA Metro (WETA) (Do Not Broadcast .1) (1080p) [Geo-blocked] https://wetadt5.lls.cdn.pbs.org/wetadt5/92d89794-5ff0-4fe6-a443-cc888104e021/primary.m3u8 +#EXTINF:-1 tvg-id="WFMZDT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="",WFMZ-DT2 (69News Weather Channel) [Offline] +https://cdn88.theus6tv.tk/united-states/locals/philadelphia/wfmz-dt2.m3u8 #EXTINF:-1 tvg-id="WGN.us" tvg-name="WGN 9 Chicago IL" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/dpI43Wg.png" group-title="Local",WGN 9 Chicago IL (720p) https://bozztv.com/teleyupp1/teleup-mBm5MQ50rA/playlist.m3u8 #EXTINF:-1 tvg-id="WhistleSports.us" tvg-name="Whistle Sports" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/CNO8eQ7.png" group-title="Sports",Whistle Sports (720p) @@ -6501,6 +6503,8 @@ https://dai.google.com/linear/hls/event/0DG8p66IRES7ZzEe1WJS-w/master.m3u8 https://dai2.xumo.com/amagi_hls_data_xumo1212A-redboxwired/CDN/playlist.m3u8 #EXTINF:-1 tvg-id="Wired2Fish.us" tvg-name="Wired2Fish" tvg-country="US" tvg-language="English" tvg-logo="https://f9q4g5j6.ssl.hwcdn.net/605d1769345cf61eb60b5893" group-title="Sports",Wired2Fish (720p) https://linear-80.frequency.stream/dist/localnow/80/hls/master/playlist.m3u8 +#EXTINF:-1 tvg-id="WISCDT2.us" tvg-name="WISC-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/25125/s51307_h3_aa.png" group-title="",WISC-DT2 (My Madison TV) (720p) +https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 #EXTINF:-1 tvg-id="WisconsinGreenBaySTIRR.us" tvg-name="Wisconsin: Green Bay (STIRR)" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/7JgPJxx.png" group-title="Local",Wisconsin: Green Bay (STIRR) (720p) https://dai.google.com/linear/hls/event/a6lsWNYDQwyM9fjytUCrcw/master.m3u8 #EXTINF:-1 tvg-id="WisconsinMilwaukeeSTIRR.us" tvg-name="Wisconsin: Milwaukee (STIRR)" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/7JgPJxx.png" group-title="Local",Wisconsin: Milwaukee (STIRR) (720p) @@ -6541,6 +6545,8 @@ https://world-poker-tour.samsung.wurl.com/manifest/playlist.m3u8 http://cdn.elsalvadordigital.com:1935/wowtv/wowtv/playlist.m3u8 #EXTINF:-1 tvg-id="wowkids.us" tvg-name="wow!! kids" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/AWXw9LW.jpg" group-title="Kids",wow!! kids (1080p) https://wownow-wownowkids-1.vizio.wurl.com/manifest/playlist.m3u8 +#EXTINF:-1 tvg-id="WSNNLD1.us" tvg-name="WSNN-LD1" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/75548/s75548_h3_aa.png" group-title="",WSNN-LD1 (Suncoast News Network) (720p) +https://cdn88.theus6tv.tk/united-states/locals/tampa/wsnn-ld.m3u8 #EXTINF:-1 tvg-id="WuTangCollection.us" tvg-name="Wu Tang Collection" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/jbMmsjI.png" group-title="Music",Wu Tang Collection (720p) https://stream-us-east-1.getpublica.com/playlist.m3u8?network_id=73 #EXTINF:-1 tvg-id="Xcorps.us" tvg-name="Xcorps" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/SDKWWQu.png" group-title="Series",Xcorps (720p) @@ -6615,9 +6621,3 @@ https://ln-zen.localnowlive.com/v1/master/385c85a93929f94966d0fb186fc33b431e6f1e https://rockentertainment-zoomoo-1.samsung.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="KanalDisney.us" tvg-name="Канал Disney" tvg-country="RU" tvg-language="Russian" tvg-logo="https://i.imgur.com/Q9KoVy9.png" group-title="Kids",Канал Disney (576p) http://188.40.68.167/russia/disney/playlist.m3u8 -#EXTINF:-1 tvg-id="WSNNLD1.us" tvg-name="WSNN-LD1" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/75548/s75548_h3_aa.png" group-title="Locals",WSNN-LD1 (Suncoast News Network) -https://cdn88.theus6tv.tk/united-states/locals/tampa/wsnn-ld.m3u8 -#EXTINF:-1 tvg-id="WISCDT2.us" tvg-name="WISC-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/25125/s51307_h3_aa.png" group-title="Locals",WISC-DT2 (My Madison TV) -https://cdn88.theus6tv.tk/united-states/locals/madison/wisc-dt2.m3u8 -#EXTINF:-1 tvg-id="WFMZDT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="Locals",WFMZ-DT2 (69News Weather Channel) [Offline] -https://cdn88.theus6tv.tk/united-states/locals/philadelphia/wfmz-dt2.m3u8 From 0d74a6bf0122a506190e72df2efae058b04c31b0 Mon Sep 17 00:00:00 2001 From: MapGuy11 <43685307+MapGuy11@users.noreply.github.com> Date: Tue, 10 Aug 2021 21:05:35 -0400 Subject: [PATCH 47/51] Remove Offline Bracket --- channels/us.m3u | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channels/us.m3u b/channels/us.m3u index 76a7f5260..b5dbc725a 100644 --- a/channels/us.m3u +++ b/channels/us.m3u @@ -6455,7 +6455,7 @@ https://jukin-weatherspy-2-eu.rakuten.wurl.com/manifest/playlist.m3u8 https://dai.google.com/linear/hls/event/fLqJePs_QR-FRTttC8fMIA/master.m3u8 #EXTINF:-1 tvg-id="WETA.us" tvg-name="WETA Metro (WETA) (Do Not Broadcast .1)" tvg-country="US" tvg-language="English" tvg-logo="https://image.pbs.org/stations/weta-color-single-brand-logo-ZeUHAPm.png" group-title="General",WETA Metro (WETA) (Do Not Broadcast .1) (1080p) [Geo-blocked] https://wetadt5.lls.cdn.pbs.org/wetadt5/92d89794-5ff0-4fe6-a443-cc888104e021/primary.m3u8 -#EXTINF:-1 tvg-id="WFMZDT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="",WFMZ-DT2 (69News Weather Channel) [Offline] +#EXTINF:-1 tvg-id="WFMZDT2.us" tvg-name="WFMZ-DT2" tvg-country="US" tvg-language="English" tvg-logo="https://zap2it.tmsimg.com/h3/NowShowing/35859/s35859_h3_aa.png" group-title="",WFMZ-DT2 (69News Weather Channel) https://cdn88.theus6tv.tk/united-states/locals/philadelphia/wfmz-dt2.m3u8 #EXTINF:-1 tvg-id="WGN.us" tvg-name="WGN 9 Chicago IL" tvg-country="US" tvg-language="English" tvg-logo="https://i.imgur.com/dpI43Wg.png" group-title="Local",WGN 9 Chicago IL (720p) https://bozztv.com/teleyupp1/teleup-mBm5MQ50rA/playlist.m3u8 From 92d0e7fc9bb6b3e16eda308aa0ccf5c605d1271d Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Wed, 11 Aug 2021 18:52:51 +0300 Subject: [PATCH 48/51] Revert "Revert "Update "format" script"" This reverts commit c4fc12d497d253fabca799cea0795921f52e7b36. --- .github/workflows/auto-update.yml | 161 +++++++++---------- .github/workflows/clean.yml | 257 ------------------------------ CONTRIBUTING.md | 7 +- package-lock.json | 20 ++- package.json | 4 +- scripts/clean.js | 74 --------- scripts/detect-resolution.js | 114 ------------- scripts/format.js | 153 +++++++++++++++--- scripts/helpers/Channel.js | 5 + scripts/helpers/utils.js | 11 -- 10 files changed, 227 insertions(+), 579 deletions(-) delete mode 100644 .github/workflows/clean.yml delete mode 100644 scripts/clean.js delete mode 100644 scripts/detect-resolution.js diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index 213deb39b..51cf6df50 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -20,90 +20,6 @@ jobs: format: runs-on: ubuntu-latest needs: create-branch - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Format Playlists - run: node scripts/format.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Formate playlists' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - sort: - runs-on: ubuntu-latest - needs: format - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Sort Channels - run: node scripts/sort.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Sort channels' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - remove-duplicates: - runs-on: ubuntu-latest - needs: sort - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Remove Duplicates - run: node scripts/remove-duplicates.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Remove duplicates' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - filter: - runs-on: ubuntu-latest - needs: remove-duplicates - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/auto-update - - name: Install Dependencies - run: npm install - - name: Filter Playlists - run: node scripts/filter.js - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Filter channels' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/auto-update - file_pattern: channels/* - detect-resolution: - runs-on: ubuntu-latest - needs: filter continue-on-error: true strategy: fail-fast: false @@ -277,10 +193,12 @@ jobs: uses: actions/checkout@v2 with: ref: bot/auto-update + - name: Setup FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v1 - name: Install Dependencies run: npm install - - name: Detect Resolution - run: node scripts/detect-resolution.js --country=${{ matrix.country }} + - name: Format Playlists + run: node scripts/format.js --country=${{ matrix.country }} --status --resolution --debug - name: Upload Artifact uses: actions/upload-artifact@v2 with: @@ -288,7 +206,7 @@ jobs: path: channels/${{ matrix.country }}.m3u commit-changes: runs-on: ubuntu-latest - needs: detect-resolution + needs: format steps: - name: Checkout uses: actions/checkout@v2 @@ -302,7 +220,70 @@ jobs: - name: Commit Changes uses: stefanzweifel/git-auto-commit-action@v4 with: - commit_message: '[Bot] Detect resolution' + commit_message: '[Bot] Format playlists' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + remove-duplicates: + runs-on: ubuntu-latest + needs: commit-changes + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Remove Duplicates + run: node scripts/remove-duplicates.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Remove duplicates' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + sort: + runs-on: ubuntu-latest + needs: remove-duplicates + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Sort Channels + run: node scripts/sort.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Sort channels' + commit_user_name: iptv-bot + commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com + commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' + branch: bot/auto-update + file_pattern: channels/* + filter: + runs-on: ubuntu-latest + needs: sort + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: bot/auto-update + - name: Install Dependencies + run: npm install + - name: Filter Playlists + run: node scripts/filter.js + - name: Commit Changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: '[Bot] Filter channels' commit_user_name: iptv-bot commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' @@ -310,7 +291,7 @@ jobs: file_pattern: channels/* generate: runs-on: ubuntu-latest - needs: commit-changes + needs: filter steps: - name: Checkout uses: actions/checkout@v2 @@ -376,6 +357,7 @@ jobs: branch: bot/auto-update file_pattern: README.md pull-request: + if: ${{ github.ref == 'refs/heads/master' }} needs: update-readme runs-on: ubuntu-latest steps: @@ -408,7 +390,6 @@ jobs: pull-request-number: ${{ steps.pr.outputs.pr_number }} merge-method: squash - name: Approve Pull Request - if: github.ref == 'refs/heads/master' uses: juliangruber/approve-pull-request-action@v1 with: github-token: ${{ secrets.PAT }} diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml deleted file mode 100644 index 3c1f9a452..000000000 --- a/.github/workflows/clean.yml +++ /dev/null @@ -1,257 +0,0 @@ -name: clean -on: - workflow_dispatch: - schedule: - - cron: '0 6 * * 0' -jobs: - create-branch: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: ${{ github.ref }} - - name: Create Branch - uses: peterjgrainger/action-create-branch@v2.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - branch: 'bot/remove-broken-links' - check: - runs-on: ubuntu-latest - needs: create-branch - continue-on-error: true - strategy: - fail-fast: false - matrix: - country: - [ - ad, - ae, - af, - ag, - al, - am, - an, - ao, - ar, - at, - au, - aw, - az, - ba, - bb, - bd, - be, - bf, - bg, - bh, - bn, - bo, - br, - bs, - by, - ca, - cd, - cg, - ch, - ci, - cl, - cm, - cn, - co, - cr, - cu, - cw, - cy, - cz, - de, - dk, - do, - dz, - ec, - ee, - eg, - es, - et, - fi, - fj, - fo, - fr, - pf, - ge, - gh, - gm, - gn, - gp, - gq, - gr, - gt, - hk, - hn, - hr, - ht, - hu, - id, - ie, - il, - in, - iq, - ir, - is, - it, - jm, - jo, - jp, - ke, - kg, - kh, - kp, - kr, - kw, - kz, - la, - lb, - li, - lk, - lt, - lu, - lv, - ly, - ma, - mc, - md, - me, - mk, - ml, - mm, - mn, - mo, - mt, - mv, - mx, - my, - mz, - ne, - ng, - ni, - nl, - no, - np, - nz, - om, - pa, - pe, - ph, - pk, - pl, - pr, - ps, - pt, - py, - qa, - ro, - rs, - ru, - rw, - sa, - sd, - se, - sg, - si, - sk, - sl, - sm, - sn, - so, - sv, - sy, - th, - tj, - tm, - tn, - tr, - tt, - tw, - tz, - ua, - ug, - uk, - us, - uy, - uz, - va, - ve, - vi, - vn, - xk, - ye, - zm, - unsorted - ] - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/remove-broken-links - - name: Setup FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v1 - - name: Install Dependencies - run: npm install - - name: Remove Broken Links - run: node scripts/clean.js --country=${{ matrix.country }} --debug - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: channels - path: channels/${{ matrix.country }}.m3u - commit-changes: - runs-on: ubuntu-latest - needs: check - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/remove-broken-links - - name: Download Artifacts - uses: actions/download-artifact@v2 - - name: Commit Changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: '[Bot] Remove broken links' - commit_user_name: iptv-bot - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>' - branch: bot/remove-broken-links - file_pattern: channels/* - pull-request: - if: ${{ github.ref == 'refs/heads/master' }} - runs-on: ubuntu-latest - needs: commit-changes - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: bot/remove-broken-links - - name: Generate Token - uses: tibdex/github-app-token@v1 - id: generate-token - with: - app_id: ${{ secrets.APP_ID }} - private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Create Pull Request - uses: repo-sync/pull-request@v2 - with: - source_branch: 'bot/remove-broken-links' - destination_branch: 'master' - pr_title: '[Bot] Remove broken links' - pr_body: | - This pull request is created by [clean][1] workflow. - - The script checks all links except those with labels `[Geo-blocked]`, `[Offline]` or `[Not 24/7]` in the title. - - **IMPORTANT:** Before merging all links should be checked manually to make sure that the response from the server has not changed. If the link works for you but occasionally return an HTTP code 403 (Forbidden) then it should be marked as `[Geo-blocked]`. If the link does not work but has no alternative, you can mark it as `[Offline]` to save it in the playlist along with a description. Working links should be marked as `[Not 24/7]` so that the script will skip them next time. - - [1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }} - pr_draft: true - github_token: ${{ steps.generate-token.outputs.token }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a111b6713..ef08f6c07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,7 +125,7 @@ STREAM_URL | `LANGUAGE` | Channel language. The name of the language must conform to the standard [ISO 639-3](https://iso639-3.sil.org/code_tables/639/data?title=&field_iso639_cd_st_mmbrshp_639_1_tid=94671&name_3=&field_iso639_element_scope_tid=All&field_iso639_language_type_tid=51&items_per_page=500). If the channel is broadcast in several languages you can list them separated by a semicolon. (optional) | | `LOGO_URL` | The logo of the channel that will be displayed if the player supports it. Supports files in png, jpeg and gif format. (optional) | | `CATEGORY` | The category to which the channel belongs. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category). (optional) | -| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except plus sign, minus sign, round and square brackets. | +| `FULL_NAME` | Full name of the channel. It is recommended to use the name listed on [lyngsat](https://www.lyngsat.com/search.html) or [wikipedia](https://www.wikipedia.org/) if possible. May contain any characters except round and square brackets. | | `STREAM_TIME_SHIFT` | Must be specified if the channel is broadcast with a shift in time relative to the main stream. Should only contain a number and a sign. (optional) | | `ALTERNATIVE_NAME` | Can be used to specify a short name or name in another language. May contain any characters except round and square brackets. (optional) | | `STREAM_RESOLUTION` | The maximum height of the frame with a "p" at the end. In case of VLC Player this information can be found in `Window > Media Information... > Codec Details`. (optional) | @@ -153,7 +153,8 @@ http://example.com/stream.m3u8 - `.github/` - `ISSUE_TEMPLATE/`: issue templates for this repository. - `workflows/` - - `auto-update.yml`: contain actions that automatically updates all playlists every day. + - `auto-update.yml`: GitHub Action that automatically updates all playlists every day. + - `check.yml`: GitHub Action that automatically checks every pull request for syntax errors. - `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned. - `.readme/` - `_categories.md`: automatically generated list of all categories and their corresponding playlists. @@ -168,8 +169,6 @@ http://example.com/stream.m3u8 - `unsorted.m3u`: playlist with channels not yet sorted. - `scripts/` - `helpers/`: helper scripts used in GitHub Actions. - - `clean.js`: used in GitHub Action to check all links and remove broken ones. - - `detect-resolution.js`: used in GitHub Action to detect resolution of the streams. - `filter.js`: used within GitHub Action to remove blacklisted channels from playlists. - `format.js`: used within GitHub Action to format channel descriptions. - `generate.js`: used within GitHub Action to generate all additional playlists. diff --git a/package-lock.json b/package-lock.json index 06cebc1d6..ffc2acf87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,14 +7,12 @@ "license": "MIT", "dependencies": { "@freearhey/iso-639-3": "^1.0.0", - "axios": "^0.21.1", - "chalk": "^4.1.1", "commander": "^7.0.0", - "escape-string-regexp": "^2.0.0", "iptv-checker": "^0.20.2", "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", "markdown-include": "^0.4.3", + "normalize-url": "^6.1.0", "pre-push": "^0.1.1", "progress": "^2.0.3", "transliteration": "^2.2.0" @@ -2963,6 +2961,17 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6045,6 +6054,11 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", diff --git a/package.json b/package.json index ea3700063..64d55e8f7 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,12 @@ "license": "MIT", "dependencies": { "@freearhey/iso-639-3": "^1.0.0", - "axios": "^0.21.1", - "chalk": "^4.1.1", "commander": "^7.0.0", - "escape-string-regexp": "^2.0.0", "iptv-checker": "^0.20.2", "iptv-playlist-parser": "^0.5.4", "m3u-linter": "^0.1.3", "markdown-include": "^0.4.3", + "normalize-url": "^6.1.0", "pre-push": "^0.1.1", "progress": "^2.0.3", "transliteration": "^2.2.0" diff --git a/scripts/clean.js b/scripts/clean.js deleted file mode 100644 index d1ab7c2e7..000000000 --- a/scripts/clean.js +++ /dev/null @@ -1,74 +0,0 @@ -const IPTVChecker = require('iptv-checker') -const { program } = require('commander') -const ProgressBar = require('progress') -const parser = require('./helpers/parser') -const utils = require('./helpers/utils') -const log = require('./helpers/log') - -program - .usage('[OPTIONS]...') - .option('-d, --debug', 'Enable debug mode') - .option('-c, --country ', 'Comma-separated list of country codes', '') - .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') - .option('--timeout ', 'Set timeout for each request', 5000) - .parse(process.argv) - -let bar -const config = program.opts() -const ignoreStatus = ['Geo-blocked', 'Not 24/7', 'Offline'] -const checker = new IPTVChecker({ - timeout: config.timeout -}) - -async function main() { - log.start() - - if (config.debug) log.print(`Debug mode enabled\n`) - - let playlists = parser.parseIndex() - playlists = utils.filterPlaylists(playlists, config.country, config.exclude) - for (const playlist of playlists) { - await parser - .parsePlaylist(playlist.url) - .then(checkPlaylist) - .then(p => p.save()) - } - - log.finish() -} - -async function checkPlaylist(playlist) { - if (!config.debug) { - bar = new ProgressBar(`Checking '${playlist.url}': [:bar] :current/:total (:percent) `, { - total: playlist.channels.length - }) - } - const channels = [] - const total = playlist.channels.length - for (const [index, channel] of playlist.channels.entries()) { - const skipChannel = - channel.status && - ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) - if (skipChannel) { - channels.push(channel) - } else { - const result = await checker.checkStream(channel.data) - if (result.status.ok || result.status.reason.includes('timed out')) { - channels.push(channel) - } else { - if (config.debug) log.print(`ERR: ${channel.url} (${result.status.reason})\n`) - } - } - if (!config.debug) bar.tick() - } - - if (playlist.channels.length !== channels.length) { - log.print(`File '${playlist.url}' has been updated\n`) - playlist.channels = channels - playlist.updated = true - } - - return playlist -} - -main() diff --git a/scripts/detect-resolution.js b/scripts/detect-resolution.js deleted file mode 100644 index 5da6a282f..000000000 --- a/scripts/detect-resolution.js +++ /dev/null @@ -1,114 +0,0 @@ -const { program } = require('commander') -const ProgressBar = require('progress') -const axios = require('axios') -const https = require('https') -const parser = require('./helpers/parser') -const utils = require('./helpers/utils') -const log = require('./helpers/log') - -program - .usage('[OPTIONS]...') - .option('-c, --country ', 'Comma-separated list of country codes', '') - .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') - .option('--delay ', 'Delay between parser requests', 1000) - .option('--timeout ', 'Set timeout for each request', 5000) - .parse(process.argv) - -const config = program.opts() -const ignoreStatus = ['Offline'] -const instance = axios.create({ - timeout: config.timeout, - maxContentLength: 200000, - httpsAgent: new https.Agent({ - rejectUnauthorized: false - }) -}) - -async function main() { - log.start() - - log.print(`Parsing 'index.m3u'...\n`) - let playlists = parser.parseIndex() - playlists = utils - .filterPlaylists(playlists, config.country, config.exclude) - .filter(i => i.url !== 'channels/unsorted.m3u') - - for (const playlist of playlists) { - await parser - .parsePlaylist(playlist.url) - .then(detectResolution) - .then(p => p.save()) - } - - log.finish() -} - -async function detectResolution(playlist) { - const channels = [] - const bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { - total: playlist.channels.length - }) - let updated = false - for (const channel of playlist.channels) { - bar.tick() - const skipChannel = - channel.status && - ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) - if (!channel.resolution.height && !skipChannel) { - const CancelToken = axios.CancelToken - const source = CancelToken.source() - const timeout = setTimeout(() => { - source.cancel() - }, config.timeout) - - const response = await instance - .get(channel.url, { cancelToken: source.token }) - .then(res => { - clearTimeout(timeout) - - return res - }) - .then(utils.sleep(config.delay)) - .catch(err => { - clearTimeout(timeout) - }) - - if (response && response.status === 200) { - if (/^#EXTM3U/.test(response.data)) { - const resolution = parseResolution(response.data) - if (resolution) { - channel.resolution = resolution - updated = true - } - } - } - } - - channels.push(channel) - } - - if (updated) { - log.print(`File '${playlist.url}' has been updated\n`) - playlist.channels = channels - playlist.updated = true - } - - return playlist -} - -function parseResolution(string) { - const regex = /RESOLUTION=(\d+)x(\d+)/gm - const match = string.matchAll(regex) - const arr = Array.from(match).map(m => ({ - width: parseInt(m[1]), - height: parseInt(m[2]) - })) - - return arr.length - ? arr.reduce(function (prev, current) { - return prev.height > current.height ? prev : current - }) - : undefined -} - -main() diff --git a/scripts/format.js b/scripts/format.js index fb77cab20..acc2fca3c 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -1,21 +1,46 @@ +const IPTVChecker = require('iptv-checker') +const normalize = require('normalize-url') +const { program } = require('commander') +const ProgressBar = require('progress') const parser = require('./helpers/parser') const utils = require('./helpers/utils') const file = require('./helpers/file') const log = require('./helpers/log') +program + .usage('[OPTIONS]...') + .option('-d, --debug', 'Enable debug mode') + .option('-s, --status', 'Update stream status') + .option('-r, --resolution', 'Detect stream resolution') + .option('-c, --country ', 'Comma-separated list of country codes', '') + .option('-e, --exclude ', 'Comma-separated list of country codes to be excluded', '') + .option('--timeout ', 'Set timeout for each request', 5000) + .parse(process.argv) + +let bar +const ignoreStatus = ['Geo-blocked', 'Not 24/7'] +const config = program.opts() +const checker = new IPTVChecker({ + timeout: config.timeout +}) + async function main() { log.start() - log.print(`Parsing 'index.m3u'...`) + if (config.debug) log.print(`Debug mode enabled\n`) + if (config.status) log.print(`Status check enabled\n`) + if (config.resolution) log.print(`Resolution detection enabled\n`) + let playlists = parser.parseIndex().filter(i => i.url !== 'channels/unsorted.m3u') + playlists = utils.filterPlaylists(playlists, config.country, config.exclude) + if (!playlists.length) log.print(`No playlist is selected\n`) for (const playlist of playlists) { - log.print(`\nProcessing '${playlist.url}'...`) await parser .parsePlaylist(playlist.url) - .then(formatPlaylist) + .then(updatePlaylist) .then(playlist => { if (file.read(playlist.url) !== playlist.toString()) { - log.print('updated') + log.print(`File '${playlist.url}' has been updated\n`) playlist.updated = true } @@ -23,33 +48,115 @@ async function main() { }) } - log.print('\n') log.finish() } -async function formatPlaylist(playlist) { +async function updatePlaylist(playlist) { + if (!config.debug) { + bar = new ProgressBar(`Processing '${playlist.url}': [:bar] :current/:total (:percent) `, { + total: playlist.channels.length + }) + } else { + log.print(`Processing '${playlist.url}'...\n`) + } + for (const channel of playlist.channels) { - const code = file.getBasename(playlist.url) - // add missing tvg-name - if (!channel.tvg.name && code !== 'unsorted' && channel.name) { - channel.tvg.name = channel.name.replace(/\"/gi, '') + addMissingData(channel) + updateGroupTitle(channel) + normalizeUrl(channel) + + const checkOnline = config.status || config.resolution + const skipChannel = + channel.status && + ignoreStatus.map(i => i.toLowerCase()).includes(channel.status.toLowerCase()) + if (checkOnline && !skipChannel) { + await checker + .checkStream(channel.data) + .then(result => { + const status = parseStatus(result.status) + + if (config.status) { + updateStatus(channel, status) + } + + if (config.resolution && status === 'online') { + updateResolution(channel, result.status.metadata) + } + + if (config.debug && status === 'offline') { + log.print(` ERR: ${channel.url} (${result.status.reason})\n`) + } + }) + .catch(err => { + if (config.debug) log.print(` ERR: ${channel.url} (${err.message})\n`) + }) } - // add missing tvg-id - if (!channel.tvg.id && code !== 'unsorted' && channel.tvg.name) { - const id = utils.name2id(channel.tvg.name) - channel.tvg.id = id ? `${id}.${code}` : '' - } - // add missing country - if (!channel.countries.length) { - const name = utils.code2name(code) - channel.countries = name ? [{ code, name }] : [] - channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') - } - // update group-title - channel.group.title = channel.category + if (!config.debug) bar.tick() } return playlist } +function parseStatus(status) { + if (status.ok) { + return 'online' + } else if (status.reason.includes('timed out')) { + return 'timeout' + } else if (status.reason.includes('403')) { + return 'error_403' + } else if (status.reason.includes('not one of 40{0,1,3,4}')) { + return 'error_40x' // 402, 451 + } else { + return 'offline' + } +} + +function updateStatus(channel, status) { + switch (status) { + case 'online': + channel.status = null + break + case 'offline': + channel.status = 'Offline' + break + } +} + +function addMissingData(channel) { + // tvg-name + if (!channel.tvg.name && channel.name) { + channel.tvg.name = channel.name.replace(/\"/gi, '') + } + // tvg-id + if (!channel.tvg.id && channel.tvg.name) { + const id = utils.name2id(channel.tvg.name) + channel.tvg.id = id ? `${id}.${code}` : '' + } + // country + if (!channel.countries.length) { + const name = utils.code2name(code) + channel.countries = name ? [{ code, name }] : [] + channel.tvg.country = channel.countries.map(c => c.code.toUpperCase()).join(';') + } +} + +function updateGroupTitle(channel) { + channel.group.title = channel.category +} + +function normalizeUrl(channel) { + const normalized = normalize(channel.url, { stripWWW: false }) + channel.updateUrl(normalized) +} + +function updateResolution(channel, metadata) { + const streams = metadata ? metadata.streams.filter(stream => stream.codec_type === 'video') : [] + if (!channel.resolution.height && streams.length) { + channel.resolution = streams.reduce((acc, curr) => { + if (curr.height > acc.height) return { width: curr.width, height: curr.height } + return acc + }) + } +} + main() diff --git a/scripts/helpers/Channel.js b/scripts/helpers/Channel.js index 043f7886f..8c4b0c397 100644 --- a/scripts/helpers/Channel.js +++ b/scripts/helpers/Channel.js @@ -22,6 +22,11 @@ module.exports = class Channel { this.languages = this.parseLanguages(data.tvg.language) } + updateUrl(url) { + this.url = url + this.data.url = url + } + parseName(title) { return title .trim() diff --git a/scripts/helpers/utils.js b/scripts/helpers/utils.js index 7a2bae063..f0d9b3e50 100644 --- a/scripts/helpers/utils.js +++ b/scripts/helpers/utils.js @@ -1,4 +1,3 @@ -const escapeStringRegexp = require('escape-string-regexp') const transliteration = require('transliteration') const iso6393 = require('@freearhey/iso-639-3') const categories = require('./categories') @@ -71,16 +70,6 @@ utils.sortBy = function (arr, fields) { }) } -utils.escapeStringRegexp = function (scring) { - return escapeStringRegexp(string) -} - -utils.sleep = function (ms) { - return function (x) { - return new Promise(resolve => setTimeout(() => resolve(x), ms)) - } -} - utils.removeProtocol = function (string) { return string.replace(/(^\w+:|^)\/\//, '') } From e659d587d016efeb656ef894cbb9d687b32fce7a Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Wed, 11 Aug 2021 19:35:28 +0300 Subject: [PATCH 49/51] Update format.js --- scripts/format.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/format.js b/scripts/format.js index acc2fca3c..22c633d38 100644 --- a/scripts/format.js +++ b/scripts/format.js @@ -146,7 +146,8 @@ function updateGroupTitle(channel) { function normalizeUrl(channel) { const normalized = normalize(channel.url, { stripWWW: false }) - channel.updateUrl(normalized) + const decoded = decodeURIComponent(normalized).replace(/\s/g, '+') + channel.updateUrl(decoded) } function updateResolution(channel, metadata) { From 55bd1a336a99c56bd9707e55c8505998a432b91b Mon Sep 17 00:00:00 2001 From: MapGuy11 <43685307+MapGuy11@users.noreply.github.com> Date: Wed, 11 Aug 2021 14:13:00 -0400 Subject: [PATCH 50/51] Add El Nueve I don't know how this list works for group-titles so I didn't use one. --- channels/ar.m3u | 2 ++ 1 file changed, 2 insertions(+) diff --git a/channels/ar.m3u b/channels/ar.m3u index 97494f417..4a3551cf5 100644 --- a/channels/ar.m3u +++ b/channels/ar.m3u @@ -120,3 +120,5 @@ https://wowza.telpin.com.ar:1935/telpintv/ttv.stream/playlist.m3u8 http://live-edge01.telecentro.net.ar/live/smil:trm.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TVManaArgentina.ar" tvg-name="TV Maná Argentina" tvg-country="AR" tvg-language="Spanish" tvg-logo="https://i.imgur.com/GVI8kkp.jpg" group-title="Local",TV Maná Argentina (576p) http://streamspub.manasat.com:1935/tvar/tvmanaar2/playlist.m3u8 +#EXTINF:-1 tvg-id="elnueve.ar" tvg-name="El Nueve" tvg-country="AR" tvg-language="Spanish" tvg-logo="https://www.elnueve.com.ar/wp-content/themes/elnueve-ned-theme/img/logo.png" group-title="",El Nueve +https://cdn88.theus6tv.tk/argentina/broadcast/el-nueve.m3u8 From 5e025651c183fccaa737c0cf12a3123d2f45b21f Mon Sep 17 00:00:00 2001 From: MapGuy11 <43685307+MapGuy11@users.noreply.github.com> Date: Wed, 11 Aug 2021 14:40:36 -0400 Subject: [PATCH 51/51] Add Costa Rica Canal 2, 4, 11, and 6 --- channels/cr.m3u | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/channels/cr.m3u b/channels/cr.m3u index 1b08d8364..e9cc2d681 100644 --- a/channels/cr.m3u +++ b/channels/cr.m3u @@ -55,3 +55,11 @@ http://tv.ticosmedia.com:1935/TVSUR/TVSUR/playlist.m3u8 http://k4.usastreams.com/videotour/videotour/playlist.m3u8 #EXTINF:-1 tvg-id="ZonaFilmsTV.cr" tvg-name="Zona Films TV" tvg-country="CR" tvg-language="" tvg-logo="" group-title="Music",Zona Films TV http://cdn2.envivo.win/HLS/?canal=zonafilmstv&c=ZwNjYwRkBF4kBQLhZmt=&p=ZGH4AGD1ZGtjZN== +#EXTINF:-1 tvg-id="Canaltwo.cr" tvg-name="Canal 2" tvg-country="CR" tvg-language="" tvg-logo="https://yt3.ggpht.com/ytc/AKedOLSalPTzbA5vd1NjQo6O28oTYy2b7qSZS0R7-Q55" group-title="",Canal 2 +http://cdn88.theus6tv.tk/costa-rica/broadcast/canal-two.m3u8 +#EXTINF:-1 tvg-id="Canalfour.cr" tvg-name="Canal 4" tvg-country="CR" tvg-language="" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Repretel_4_logo.png/1200px-Repretel_4_logo.png" group-title="",Canal 4 +http://cdn88.theus6tv.tk/costa-rica/broadcast/canal-four.m3u8 +#EXTINF:-1 tvg-id="Canaleleven.cr" tvg-name="Canal 11" tvg-country="CR" tvg-language="" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Repretel_11_logo.png/600px-Repretel_11_logo.png" group-title="",Canal 11 +http://cdn88.theus6tv.tk/costa-rica/broadcast/canal-eleven.m3u8 +#EXTINF:-1 tvg-id="Canalsix.cr" tvg-name="Canal 11" tvg-country="CR" tvg-language="" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/e/eb/Repretel_6_logo.png" group-title="",Canal 6 +http://cdn88.theus6tv.tk/costa-rica/broadcast/canal-six.m3u8