commit
1cd420b18e
|
@ -42,7 +42,7 @@ More details about each attribute:
|
|||
| ------------ | ---
|
||||
| tvg-id | Channel ID that is used to load EPG. Must match `id` from the EPG file. (optional)
|
||||
| tvg-name | Channel name that is also sometimes used to load EPG. Must match `display-name` from the EPG file. (optional)
|
||||
| tvg-language | Channel language. The name of the language must conform to the standard [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (optional)
|
||||
| tvg-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) (optional)
|
||||
| tvg-logo | The logo of the channel that will be displayed in the player if it supports it (optional)
|
||||
| group-title | The category to which the channel belongs. These categories are also displayed in some players, and grouped playlists are also generated based on them. The list of currently supported categories can be found [here](https://github.com/iptv-org/iptv#playlists-by-category) (optional)
|
||||
|
||||
|
|
|
@ -7,29 +7,29 @@
|
|||
<tr><td align="left">Business</td><td align="right">40</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/business.m3u</code></td></tr>
|
||||
<tr><td align="left">Classic</td><td align="right">1</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/classic.m3u</code></td></tr>
|
||||
<tr><td align="left">Comedy</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/comedy.m3u</code></td></tr>
|
||||
<tr><td align="left">Documentary</td><td align="right">9</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/documentary.m3u</code></td></tr>
|
||||
<tr><td align="left">Documentary</td><td align="right">10</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/documentary.m3u</code></td></tr>
|
||||
<tr><td align="left">Education</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/education.m3u</code></td></tr>
|
||||
<tr><td align="left">Entertainment</td><td align="right">87</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/entertainment.m3u</code></td></tr>
|
||||
<tr><td align="left">Entertainment</td><td align="right">86</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/entertainment.m3u</code></td></tr>
|
||||
<tr><td align="left">Family</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/family.m3u</code></td></tr>
|
||||
<tr><td align="left">Fashion</td><td align="right">31</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/fashion.m3u</code></td></tr>
|
||||
<tr><td align="left">Food</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/food.m3u</code></td></tr>
|
||||
<tr><td align="left">General</td><td align="right">60</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/general.m3u</code></td></tr>
|
||||
<tr><td align="left">General</td><td align="right">66</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/general.m3u</code></td></tr>
|
||||
<tr><td align="left">Health</td><td align="right">1</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/health.m3u</code></td></tr>
|
||||
<tr><td align="left">History</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/history.m3u</code></td></tr>
|
||||
<tr><td align="left">Hobby</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/hobby.m3u</code></td></tr>
|
||||
<tr><td align="left">Kids</td><td align="right">67</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/kids.m3u</code></td></tr>
|
||||
<tr><td align="left">Legislative</td><td align="right">9</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/legislative.m3u</code></td></tr>
|
||||
<tr><td align="left">Lifestyle</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/lifestyle.m3u</code></td></tr>
|
||||
<tr><td align="left">Local</td><td align="right">249</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/local.m3u</code></td></tr>
|
||||
<tr><td align="left">Legislative</td><td align="right">21</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/legislative.m3u</code></td></tr>
|
||||
<tr><td align="left">Lifestyle</td><td align="right">7</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/lifestyle.m3u</code></td></tr>
|
||||
<tr><td align="left">Local</td><td align="right">255</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/local.m3u</code></td></tr>
|
||||
<tr><td align="left">Movies</td><td align="right">111</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/movies.m3u</code></td></tr>
|
||||
<tr><td align="left">Music</td><td align="right">206</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/music.m3u</code></td></tr>
|
||||
<tr><td align="left">News</td><td align="right">287</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/news.m3u</code></td></tr>
|
||||
<tr><td align="left">Religious</td><td align="right">121</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/religious.m3u</code></td></tr>
|
||||
<tr><td align="left">News</td><td align="right">282</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/news.m3u</code></td></tr>
|
||||
<tr><td align="left">Religious</td><td align="right">165</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/religious.m3u</code></td></tr>
|
||||
<tr><td align="left">Shop</td><td align="right">29</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/shop.m3u</code></td></tr>
|
||||
<tr><td align="left">Sport</td><td align="right">151</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/sport.m3u</code></td></tr>
|
||||
<tr><td align="left">Sport</td><td align="right">152</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/sport.m3u</code></td></tr>
|
||||
<tr><td align="left">Travel</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/travel.m3u</code></td></tr>
|
||||
<tr><td align="left">Weather</td><td align="right">7</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/weather.m3u</code></td></tr>
|
||||
<tr><td align="left">XXX</td><td align="right">47</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/xxx.m3u</code></td></tr>
|
||||
<tr><td align="left">Other</td><td align="right">4155</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/other.m3u</code></td></tr>
|
||||
<tr><td align="left">Other</td><td align="right">4123</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/other.m3u</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
|
@ -60,7 +60,7 @@
|
|||
<tr><td align="left">Guyana</td><td align="right">2</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/gy.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Haiti</td><td align="right">12</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ht.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Honduras</td><td align="right">23</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hn.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Hong Kong</td><td align="right">30</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hk.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Hong Kong</td><td align="right">19</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hk.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Hungary</td><td align="right">21</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hu.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-hungry.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Iceland</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/is.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">India</td><td align="right">213</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/in.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-india.xml.gz</code></td></tr>
|
||||
|
@ -87,7 +87,7 @@
|
|||
<tr><td align="left">Liechtenstein</td><td align="right">2</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/li.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Luxembourg</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/lu.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Macau</td><td align="right">14</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/mo.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Malaysia</td><td align="right">23</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/my.m3u</code></td><td align="left"><code>https://freeview.github.io/iptv/epg/tv.xml</code></td></tr>
|
||||
<tr><td align="left">Malaysia</td><td align="right">24</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/my.m3u</code></td><td align="left"><code>https://freeview.github.io/iptv/epg/tv.xml</code></td></tr>
|
||||
<tr><td align="left">Malta</td><td align="right">1</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/mt.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-malta.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Mexico</td><td align="right">45</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/mx.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Moldova</td><td align="right">16</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/md.m3u</code></td><td align="left"><code>https://iptvx.one/epg/epg.xml.gz</code></td></tr>
|
||||
|
@ -114,7 +114,7 @@
|
|||
<tr><td align="left">Poland</td><td align="right">8</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/pl.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidepoland.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Portugal</td><td align="right">16</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/pt.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideportugal.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Puerto Rico</td><td align="right">4</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/pr.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Qatar</td><td align="right">17</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/qa.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Qatar</td><td align="right">11</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/qa.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Romania</td><td align="right">81</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ro.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideromania.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Russia</td><td align="right">301</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ru.m3u</code></td><td align="left"><code>https://iptvx.one/epg/epg.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Rwanda</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/rw.m3u</code></td><td align="left"></td></tr>
|
||||
|
@ -136,7 +136,7 @@
|
|||
<tr><td align="left">Sweden</td><td align="right">14</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/se.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidesweden.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Switzerland</td><td align="right">24</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ch.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideswitzerland.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Syria</td><td align="right">28</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/sy.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Taiwan</td><td align="right">39</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tw.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Taiwan</td><td align="right">84</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tw.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Tanzania</td><td align="right">1</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tz.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Thailand</td><td align="right">66</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/th.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Trinidad and Tobago</td><td align="right">1</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tt.m3u</code></td><td align="left"></td></tr>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<tr><td align="left">Turkmenistan</td><td align="right">11</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tm.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Uganda</td><td align="right">2</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ug.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Ukraine</td><td align="right">174</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ua.m3u</code></td><td align="left"><code>https://iptvx.one/epg/epg.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United Arab Emirates</td><td align="right">119</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ae.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United Arab Emirates</td><td align="right">123</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ae.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United Kingdom</td><td align="right">57</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/uk.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideuk.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United States</td><td align="right">473</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/us.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-usa.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Uruguay</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/uy.m3u</code></td><td align="left"></td></tr>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<tr><td align="left">Akan</td><td align="right">2</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ak.m3u</code></td></tr>
|
||||
<tr><td align="left">Albanian</td><td align="right">34</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/sq.m3u</code></td></tr>
|
||||
<tr><td align="left">Amharic</td><td align="right">2</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/am.m3u</code></td></tr>
|
||||
<tr><td align="left">Arabic</td><td align="right">452</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ar.m3u</code></td></tr>
|
||||
<tr><td align="left">Arabic</td><td align="right">456</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ar.m3u</code></td></tr>
|
||||
<tr><td align="left">Armenian</td><td align="right">9</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/hy.m3u</code></td></tr>
|
||||
<tr><td align="left">Azerbaijani</td><td align="right">12</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/az.m3u</code></td></tr>
|
||||
<tr><td align="left">Bengali</td><td align="right">7</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/bn.m3u</code></td></tr>
|
||||
|
@ -14,12 +14,12 @@
|
|||
<tr><td align="left">Bulgarian</td><td align="right">22</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/bg.m3u</code></td></tr>
|
||||
<tr><td align="left">Burmese</td><td align="right">16</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/my.m3u</code></td></tr>
|
||||
<tr><td align="left">Catalan</td><td align="right">4</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ca.m3u</code></td></tr>
|
||||
<tr><td align="left">Chinese</td><td align="right">1555</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/zh.m3u</code></td></tr>
|
||||
<tr><td align="left">Chinese</td><td align="right">1589</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/zh.m3u</code></td></tr>
|
||||
<tr><td align="left">Croatian</td><td align="right">36</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/hr.m3u</code></td></tr>
|
||||
<tr><td align="left">Czech</td><td align="right">29</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/cs.m3u</code></td></tr>
|
||||
<tr><td align="left">Danish</td><td align="right">14</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/da.m3u</code></td></tr>
|
||||
<tr><td align="left">Dutch</td><td align="right">78</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/nl.m3u</code></td></tr>
|
||||
<tr><td align="left">English</td><td align="right">723</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/en.m3u</code></td></tr>
|
||||
<tr><td align="left">English</td><td align="right">717</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/en.m3u</code></td></tr>
|
||||
<tr><td align="left">Estonian</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/et.m3u</code></td></tr>
|
||||
<tr><td align="left">Faroese</td><td align="right">2</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/fo.m3u</code></td></tr>
|
||||
<tr><td align="left">Finnish</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/fi.m3u</code></td></tr>
|
||||
|
@ -45,7 +45,7 @@
|
|||
<tr><td align="left">Latvian</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/lv.m3u</code></td></tr>
|
||||
<tr><td align="left">Luxembourgish</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/lb.m3u</code></td></tr>
|
||||
<tr><td align="left">Macedonian</td><td align="right">4</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/mk.m3u</code></td></tr>
|
||||
<tr><td align="left">Malay</td><td align="right">27</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ms.m3u</code></td></tr>
|
||||
<tr><td align="left">Malay</td><td align="right">28</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ms.m3u</code></td></tr>
|
||||
<tr><td align="left">Mongolian</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/mn.m3u</code></td></tr>
|
||||
<tr><td align="left">Māori</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/mi.m3u</code></td></tr>
|
||||
<tr><td align="left">Nepali</td><td align="right">1</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ne.m3u</code></td></tr>
|
||||
|
|
38
README.md
38
README.md
|
@ -29,30 +29,30 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Business</td><td align="right">40</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/business.m3u</code></td></tr>
|
||||
<tr><td align="left">Classic</td><td align="right">1</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/classic.m3u</code></td></tr>
|
||||
<tr><td align="left">Comedy</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/comedy.m3u</code></td></tr>
|
||||
<tr><td align="left">Documentary</td><td align="right">9</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/documentary.m3u</code></td></tr>
|
||||
<tr><td align="left">Documentary</td><td align="right">10</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/documentary.m3u</code></td></tr>
|
||||
<tr><td align="left">Education</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/education.m3u</code></td></tr>
|
||||
<tr><td align="left">Entertainment</td><td align="right">87</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/entertainment.m3u</code></td></tr>
|
||||
<tr><td align="left">Entertainment</td><td align="right">86</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/entertainment.m3u</code></td></tr>
|
||||
<tr><td align="left">Family</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/family.m3u</code></td></tr>
|
||||
<tr><td align="left">Fashion</td><td align="right">31</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/fashion.m3u</code></td></tr>
|
||||
<tr><td align="left">Food</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/food.m3u</code></td></tr>
|
||||
<tr><td align="left">General</td><td align="right">60</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/general.m3u</code></td></tr>
|
||||
<tr><td align="left">General</td><td align="right">66</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/general.m3u</code></td></tr>
|
||||
<tr><td align="left">Health</td><td align="right">1</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/health.m3u</code></td></tr>
|
||||
<tr><td align="left">History</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/history.m3u</code></td></tr>
|
||||
<tr><td align="left">Hobby</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/hobby.m3u</code></td></tr>
|
||||
<tr><td align="left">Kids</td><td align="right">67</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/kids.m3u</code></td></tr>
|
||||
<tr><td align="left">Legislative</td><td align="right">9</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/legislative.m3u</code></td></tr>
|
||||
<tr><td align="left">Lifestyle</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/lifestyle.m3u</code></td></tr>
|
||||
<tr><td align="left">Local</td><td align="right">249</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/local.m3u</code></td></tr>
|
||||
<tr><td align="left">Legislative</td><td align="right">21</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/legislative.m3u</code></td></tr>
|
||||
<tr><td align="left">Lifestyle</td><td align="right">7</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/lifestyle.m3u</code></td></tr>
|
||||
<tr><td align="left">Local</td><td align="right">255</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/local.m3u</code></td></tr>
|
||||
<tr><td align="left">Movies</td><td align="right">111</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/movies.m3u</code></td></tr>
|
||||
<tr><td align="left">Music</td><td align="right">206</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/music.m3u</code></td></tr>
|
||||
<tr><td align="left">News</td><td align="right">287</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/news.m3u</code></td></tr>
|
||||
<tr><td align="left">Religious</td><td align="right">121</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/religious.m3u</code></td></tr>
|
||||
<tr><td align="left">News</td><td align="right">282</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/news.m3u</code></td></tr>
|
||||
<tr><td align="left">Religious</td><td align="right">165</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/religious.m3u</code></td></tr>
|
||||
<tr><td align="left">Shop</td><td align="right">29</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/shop.m3u</code></td></tr>
|
||||
<tr><td align="left">Sport</td><td align="right">151</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/sport.m3u</code></td></tr>
|
||||
<tr><td align="left">Sport</td><td align="right">152</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/sport.m3u</code></td></tr>
|
||||
<tr><td align="left">Travel</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/travel.m3u</code></td></tr>
|
||||
<tr><td align="left">Weather</td><td align="right">7</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/weather.m3u</code></td></tr>
|
||||
<tr><td align="left">XXX</td><td align="right">47</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/xxx.m3u</code></td></tr>
|
||||
<tr><td align="left">Other</td><td align="right">4155</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/other.m3u</code></td></tr>
|
||||
<tr><td align="left">Other</td><td align="right">4123</td><td align="left"><code>https://iptv-org.github.io/iptv/categories/other.m3u</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
@ -66,7 +66,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Akan</td><td align="right">2</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ak.m3u</code></td></tr>
|
||||
<tr><td align="left">Albanian</td><td align="right">34</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/sq.m3u</code></td></tr>
|
||||
<tr><td align="left">Amharic</td><td align="right">2</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/am.m3u</code></td></tr>
|
||||
<tr><td align="left">Arabic</td><td align="right">452</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ar.m3u</code></td></tr>
|
||||
<tr><td align="left">Arabic</td><td align="right">456</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ar.m3u</code></td></tr>
|
||||
<tr><td align="left">Armenian</td><td align="right">9</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/hy.m3u</code></td></tr>
|
||||
<tr><td align="left">Azerbaijani</td><td align="right">12</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/az.m3u</code></td></tr>
|
||||
<tr><td align="left">Bengali</td><td align="right">7</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/bn.m3u</code></td></tr>
|
||||
|
@ -74,12 +74,12 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Bulgarian</td><td align="right">22</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/bg.m3u</code></td></tr>
|
||||
<tr><td align="left">Burmese</td><td align="right">16</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/my.m3u</code></td></tr>
|
||||
<tr><td align="left">Catalan</td><td align="right">4</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ca.m3u</code></td></tr>
|
||||
<tr><td align="left">Chinese</td><td align="right">1555</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/zh.m3u</code></td></tr>
|
||||
<tr><td align="left">Chinese</td><td align="right">1589</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/zh.m3u</code></td></tr>
|
||||
<tr><td align="left">Croatian</td><td align="right">36</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/hr.m3u</code></td></tr>
|
||||
<tr><td align="left">Czech</td><td align="right">29</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/cs.m3u</code></td></tr>
|
||||
<tr><td align="left">Danish</td><td align="right">14</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/da.m3u</code></td></tr>
|
||||
<tr><td align="left">Dutch</td><td align="right">78</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/nl.m3u</code></td></tr>
|
||||
<tr><td align="left">English</td><td align="right">723</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/en.m3u</code></td></tr>
|
||||
<tr><td align="left">English</td><td align="right">717</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/en.m3u</code></td></tr>
|
||||
<tr><td align="left">Estonian</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/et.m3u</code></td></tr>
|
||||
<tr><td align="left">Faroese</td><td align="right">2</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/fo.m3u</code></td></tr>
|
||||
<tr><td align="left">Finnish</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/fi.m3u</code></td></tr>
|
||||
|
@ -105,7 +105,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Latvian</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/lv.m3u</code></td></tr>
|
||||
<tr><td align="left">Luxembourgish</td><td align="right">5</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/lb.m3u</code></td></tr>
|
||||
<tr><td align="left">Macedonian</td><td align="right">4</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/mk.m3u</code></td></tr>
|
||||
<tr><td align="left">Malay</td><td align="right">27</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ms.m3u</code></td></tr>
|
||||
<tr><td align="left">Malay</td><td align="right">28</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ms.m3u</code></td></tr>
|
||||
<tr><td align="left">Mongolian</td><td align="right">6</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/mn.m3u</code></td></tr>
|
||||
<tr><td align="left">Māori</td><td align="right">3</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/mi.m3u</code></td></tr>
|
||||
<tr><td align="left">Nepali</td><td align="right">1</td><td align="left"><code>https://iptv-org.github.io/iptv/languages/ne.m3u</code></td></tr>
|
||||
|
@ -200,7 +200,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Guyana</td><td align="right">2</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/gy.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Haiti</td><td align="right">12</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ht.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Honduras</td><td align="right">23</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hn.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Hong Kong</td><td align="right">30</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hk.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Hong Kong</td><td align="right">19</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hk.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Hungary</td><td align="right">21</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/hu.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-hungry.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Iceland</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/is.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">India</td><td align="right">213</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/in.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-india.xml.gz</code></td></tr>
|
||||
|
@ -227,7 +227,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Liechtenstein</td><td align="right">2</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/li.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Luxembourg</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/lu.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Macau</td><td align="right">14</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/mo.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Malaysia</td><td align="right">23</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/my.m3u</code></td><td align="left"><code>https://freeview.github.io/iptv/epg/tv.xml</code></td></tr>
|
||||
<tr><td align="left">Malaysia</td><td align="right">24</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/my.m3u</code></td><td align="left"><code>https://freeview.github.io/iptv/epg/tv.xml</code></td></tr>
|
||||
<tr><td align="left">Malta</td><td align="right">1</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/mt.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-malta.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Mexico</td><td align="right">45</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/mx.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Moldova</td><td align="right">16</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/md.m3u</code></td><td align="left"><code>https://iptvx.one/epg/epg.xml.gz</code></td></tr>
|
||||
|
@ -254,7 +254,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Poland</td><td align="right">8</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/pl.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidepoland.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Portugal</td><td align="right">16</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/pt.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideportugal.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Puerto Rico</td><td align="right">4</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/pr.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Qatar</td><td align="right">17</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/qa.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Qatar</td><td align="right">11</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/qa.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Romania</td><td align="right">81</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ro.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideromania.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Russia</td><td align="right">301</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ru.m3u</code></td><td align="left"><code>https://iptvx.one/epg/epg.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Rwanda</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/rw.m3u</code></td><td align="left"></td></tr>
|
||||
|
@ -276,7 +276,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Sweden</td><td align="right">14</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/se.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidesweden.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Switzerland</td><td align="right">24</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ch.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideswitzerland.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Syria</td><td align="right">28</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/sy.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Taiwan</td><td align="right">39</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tw.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Taiwan</td><td align="right">84</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tw.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Tanzania</td><td align="right">1</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tz.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Thailand</td><td align="right">66</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/th.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Trinidad and Tobago</td><td align="right">1</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tt.m3u</code></td><td align="left"></td></tr>
|
||||
|
@ -285,7 +285,7 @@ Or select one of the playlists from the list below.
|
|||
<tr><td align="left">Turkmenistan</td><td align="right">11</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/tm.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Uganda</td><td align="right">2</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ug.m3u</code></td><td align="left"></td></tr>
|
||||
<tr><td align="left">Ukraine</td><td align="right">174</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ua.m3u</code></td><td align="left"><code>https://iptvx.one/epg/epg.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United Arab Emirates</td><td align="right">119</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ae.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United Arab Emirates</td><td align="right">123</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/ae.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guidearab.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United Kingdom</td><td align="right">57</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/uk.m3u</code></td><td align="left"><code>http://195.154.221.171/epg/guideuk.xml.gz</code></td></tr>
|
||||
<tr><td align="left">United States</td><td align="right">473</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/us.m3u</code></td><td align="left"><code>http://epg.streamstv.me/epg/guide-usa.xml.gz</code></td></tr>
|
||||
<tr><td align="left">Uruguay</td><td align="right">5</td><td align="left" nowrap><code>https://iptv-org.github.io/iptv/countries/uy.m3u</code></td><td align="left"></td></tr>
|
||||
|
|
|
@ -221,6 +221,10 @@ http://livecdnh1.tvanywhere.ae/hls/star_movies/05.m3u8
|
|||
http://livecdnh1.tvanywhere.ae/hls/star_movies/05.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 tvg-id="Star Movies ARB" tvg-name="Star Movies ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/DQ1RfUa.png" group-title="Movies",Star Movies
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_movies/index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://i.imgur.com/SAfu2jz.png" group-title="Movies",Star Movies HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_movies/03.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://i.imgur.com/SAfu2jz.png" group-title="Movies",Star Movies HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_movies/04.m3u8
|
||||
#EXTINF:-1 tvg-id="Star World ARB" tvg-name="Star World ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/9c316dr.png" group-title="",Star World
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_world/02.m3u8
|
||||
#EXTINF:-1 tvg-id="Star World ARB" tvg-name="Star World ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/9c316dr.png" group-title="",Star World
|
||||
|
@ -231,6 +235,10 @@ http://livecdnh1.tvanywhere.ae/hls/star_world/05.m3u8?fluxustv.m3u8
|
|||
http://livecdnh1.tvanywhere.ae/hls/star_world/index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 tvg-id="Star World ARB" tvg-name="Star World ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/9c316dr.png" group-title="",Star World
|
||||
http://livecdnh1.tvanywhere.ae:80/hls/star_world/05.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="Star World ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/WyUSQok.png" group-title="Entertainment",Star World HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_world/03.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="Star World ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/WyUSQok.png" group-title="Entertainment",Star World HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_world/04.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://i.imgur.com/nsxrqta.jpg" group-title="",Toheed TV
|
||||
http://51.158.73.206/hls/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="Wanasah ARB" tvg-name="Wanasah ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/GmgibYW.jpg" group-title="",Wanasah
|
||||
|
|
|
@ -64,7 +64,7 @@ http://94.130.180.175:8081/live/greektv/playlist.m3u8
|
|||
#EXTINF:-1 tvg-id="Nea TV GR" tvg-name="Nea TV GR" tvg-language="Greek" tvg-logo="http://greektv.pbworks.com/w/file/fetch/46926622/NEA_TV.png" group-title="Local",Nea TV
|
||||
https://live.neatv.gr:8888/hls/neatv_high/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Netmax" tvg-name="Netmax GR" tvg-language="Greek" tvg-logo="https://i.imgur.com/0sjticV.png" group-title="Movies",Netmax
|
||||
http://netmaxlive.tk:8080/live/live/playlist.m3u8
|
||||
http://live.netmaxtv.com:8080/live/live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Greek" tvg-logo="http://i.imgur.com/pK2p5ey.png" group-title="Music",NG
|
||||
http://live.streams.ovh:1935/NGradio/NGradio/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Greek" tvg-logo="http://i.imgur.com/pK2p5ey.png" group-title="Music",NG
|
||||
|
|
|
@ -1,61 +1,39 @@
|
|||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/en/thumb/d/d0/Babyfirst-logo.png/345px-Babyfirst-logo.png" group-title="",BabyFirst臺灣
|
||||
http://ms003.happytv.com.tw/live/F9YMztT5DcwWEr1f/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",BSTV(贡献者:007)
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",BSTV(貢獻者:007)
|
||||
http://202.69.67.66:443/webcast/bshdlive-pc/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/mX1nnGy.png" group-title="Entertainment",KIX
|
||||
http://210.210.155.35/uq2663/h/h07/01.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://miaomi-tv.com/Public/images/miao-mi-logo-color.png" group-title="Kids",Miao Mi
|
||||
https://d3kw4vhbdpgtqk.cloudfront.net/hls/miaomipcweb/04.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="" tvg-logo="" group-title="Kids",MIAO MI
|
||||
https://d3kw4vhbdpgtqk.cloudfront.net/hls/miaomipcweb/prog_index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="" tvg-logo="https://tbivision.com/files/2015/05/miao-logo.jpg" group-title="Kids",Miao Mi
|
||||
https://d3kw4vhbdpgtqk.cloudfront.net/hls/miaomipcweb/prog_index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/SAfu2jz.png" group-title="Movies",Star Movies HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_movies/03.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/SAfu2jz.png" group-title="Movies",Star Movies HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_movies/04.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/SAfu2jz.png" group-title="Movies",Star Movies HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae:80/hls/star_movies/05.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/WyUSQok.png" group-title="Entertainment",Star World HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_world/03.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/WyUSQok.png" group-title="Entertainment",Star World HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae/hls/star_world/04.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/WyUSQok.png" group-title="Entertainment",Star World HD (Middle East)
|
||||
http://livecdnh1.tvanywhere.ae:80/hls/star_world/05.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/thumb/e/e1/SETN_logo.png/220px-SETN_logo.png" group-title="",三立新聞
|
||||
http://60.199.188.65/HLS/WG_ETTV-N/02.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",凤凰资讯HD
|
||||
http://117.169.120.138:8080/live/fhzixun/.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",凤凰资讯HD1
|
||||
http://223.82.250.72/live/fhzixun/1.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",凤凰香港高清
|
||||
http://223.82.250.72/live/fhhongkong/1.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://wxtv.asia/web/images/all/logoSm.jpg" group-title="",唯心頻道
|
||||
http://mobile.ccdntech.com/transcoder/_definst_/vod164_Live/live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://astrocontent.s3.amazonaws.com/Images/ChannelLogo/Pos/322_300.png" group-title="",天映頻道
|
||||
http://210.210.155.35/qwr9ew/s/s33/index2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://www.ntdtv.com/assets/themes/ntd/images/logo/logo_ntd.png" group-title="",新唐人亚太
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://www.ntdtv.com/assets/themes/ntd/images/logo/logo_ntd.png" group-title="",新唐人亞太
|
||||
https://live.ntdimg.com/aplive200/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",明珠台 / TVB Pearl
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://img.tvb.com/epg/img/phd_logos_v4/gif/pearl.gif" group-title="",明珠台 / TVB Pearl
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Pcontent_id=&Provider_id=&Fsv_chan_hls_se_idx=12
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://www.ttv.com.tw/news/15/images/TTV-N_logo200-min.png" group-title="",民视新聞
|
||||
http://6.mms.vlog.xuite.net/hls/ftvtv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://v.mastvnet.com/t/1/2/img/12qwewqeerwq2.png" group-title="",澳亞衛視
|
||||
http://stream.mastvnet.com/MSTV/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/09/TDM-Macau_Sat%C3%A9llite.png" group-title="",澳視MACAU衛視
|
||||
http://live4.tdm.com.mo:80/ch3/_definst_/ch3.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9b/TDM_Ou_Mun.png" group-title="",澳視澳門
|
||||
http://live4.tdm.com.mo:80/ch1/_definst_/ch1.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/4e/Canal_Macau.png" group-title="",澳視葡文
|
||||
http://live4.tdm.com.mo:80/ch2/_definst_/ch2.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9d/TDM_Informa%C3%A7%C3%A3o.jpg" group-title="",澳視資訊
|
||||
http://live4.tdm.com.mo/ch5/_definst_/info_ch5.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/3/3c/TDM_HD.png" group-title="",澳視高清
|
||||
http://live4.tdm.com.mo:80/ch6/_definst_/hd_ch6.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/0/09/TDM-Macau_Sat%C3%A9llite.png" group-title="",澳视MACAU衛視
|
||||
http://live4.tdm.com.mo:80/ch3/_definst_/ch3.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9b/TDM_Ou_Mun.png" group-title="",澳视澳门
|
||||
http://live4.tdm.com.mo:80/ch1/_definst_/ch1.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/4/4e/Canal_Macau.png" group-title="",澳视葡文
|
||||
http://live4.tdm.com.mo:80/ch2/_definst_/ch2.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/9/9d/TDM_Informa%C3%A7%C3%A3o.jpg" group-title="",澳视资讯
|
||||
http://live4.tdm.com.mo/ch5/_definst_/info_ch5.live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="HKSTV-HKS" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",香港开电视 / HKSTV-HKS
|
||||
http://media.fantv.hk/m3u8/archive/channel2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/c/cd/Hong_Kong_Open_TV.png" group-title="",香港开电视 / HKSTV-HKS
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://img.tvb.com/homepage/tvb_logo_night_2017.gif" group-title="",翡翠台
|
||||
http://m.567it.com/jade.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/c/cd/Hong_Kong_Open_TV.png" group-title="",香港開電視 / HKSTV-HKS
|
||||
http://media.fantv.hk/m3u8/archive/channel2_stream1.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",香港电影频道 (Dead link)
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",香港電影頻道 (Dead link)
|
||||
http://aldirect.hls.huya.com/huyalive/29106097-2689453724-11551115788685410304-2847687506-10057-A-1525422901-1_1200.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",鳳凰資訊HD
|
||||
http://117.169.120.138:8080/live/fhzixun/.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",鳳凰資訊HD1
|
||||
http://223.82.250.72/live/fhzixun/1.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="",鳳凰香港高清
|
||||
http://223.82.250.72/live/fhhongkong/1.m3u8
|
||||
|
|
|
@ -10,7 +10,7 @@ http://mbnhls-lh.akamaihd.net/i/MBN_1@118619/master.m3u8
|
|||
#EXTINF:-1 tvg-id="Al Hurra Iraq ARB" tvg-name="Al Hurra Iraq ARB" tvg-language="Arabic" tvg-logo="https://i.imgur.com/8EmVL2d.jpg" group-title="News",Al Hurra Iraq
|
||||
https://mbningestworld-i.akamaihd.net/hls/live/644021/iraqworldsafe/master.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="Al Iraqiya TV ARB" tvg-language="Arabic" tvg-logo="http://imn.iq/wp-content/uploads/2018/03/Logo.jpg" group-title="News",Al Iraqiya
|
||||
http://cdn.catiacast.video/abr/78054972db7708422595bc96c6e024ac.m3u8
|
||||
http://cdn.catiacast.video/abr/78054972db7708422595bc96c6e024ac/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://i.imgur.com/XyMDWkz.jpg" group-title="",Al Mayadeen TV
|
||||
http://95.170.215.109/hls/MAYADEEN-Backup-M.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Arabic" tvg-logo="https://alrafidain.org/style/assets/imgs/logo.png" group-title="General",Al Rafidain
|
||||
|
|
|
@ -19,6 +19,8 @@ http://210.210.155.35/uq2663/h/h04/01.m3u8
|
|||
https://raw.githubusercontent.com/exodiver/IPTV/master/M3U8/Token/DramaSangat.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Malay" tvg-logo="https://i.imgur.com/Vy0PPFD.jpg" group-title="Entertainment",Gem TV Asia
|
||||
http://210.210.155.66/h/h19/01.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Malay" tvg-logo="https://i.imgur.com/mX1nnGy.png" group-title="Entertainment",KIX
|
||||
http://210.210.155.35/uq2663/h/h07/01.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Malay" tvg-logo="https://i.imgur.com/469hshv.png" group-title="",Nabawi TV
|
||||
http://stream2.ninmedia.tv/nabawitv/nabawitv_360p/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="NTV7" tvg-name="NTV7" tvg-language="Malay" tvg-logo="https://freeview.github.io/iptv/logos/ntv7.png" group-title="",NTV7
|
||||
|
|
202
channels/tw.m3u
202
channels/tw.m3u
|
@ -1,79 +1,169 @@
|
|||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/NUflwTN.png" group-title="Kids",BabyFirst臺灣
|
||||
http://ms003.happytv.com.tw/live/F9YMztT5DcwWEr1f/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/PmD2WwD.jpg" group-title="",Da Ai 2
|
||||
http://61.58.60.230:9319/live/191.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6jbjVNy.png" group-title="News",FTV News
|
||||
http://210.61.56.23/hls/ftvtv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6jbjVNy.png" group-title="News",FTV News
|
||||
http://6.mms.vlog.xuite.net/hls/ftvtv/index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6jbjVNy.png" group-title="News",FTV News
|
||||
https://6.mms.vlog.xuite.net/hls/ftvtv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV1
|
||||
http://live.streamingfast.net/hls-live/goodtv/_definst_/liveevent/live-ch2-2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV1
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://apl-hamivideo.cdn.hinet.net/HamiVideo/getHamiVideoImg.php?deviceType=3&imageId=OTTLIVE_0000001752.png" group-title="Documentary",CNEX Taiwan
|
||||
http://61.58.60.230:9319/live/257.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://www.nettv.live/uploads/allimg/18/1-1PQH20T80-L.jpg" group-title="Local",CYC世新綜合
|
||||
http://61.58.60.230:9319/live/49.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH1 綜合台
|
||||
http://live.streamingfast.net/osmflivech1.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV10
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH10 烤箱讀書會 短版
|
||||
http://live.streamingfast.net/osmflivech10.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV13
|
||||
http://live.streamingfast.net/osmflivech13.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV14
|
||||
http://live.streamingfast.net/osmflivech14.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV2
|
||||
http://live.streamingfast.net/osmflivech2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV3
|
||||
http://live.streamingfast.net/hls-live/goodtv/_definst_/liveevent/live-ch2-3.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV5
|
||||
http://live.streamingfast.net/osmflivech5.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV6
|
||||
http://live.streamingfast.net/osmflivech6.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV7
|
||||
http://live.streamingfast.net/osmflivech7.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV8
|
||||
http://live.streamingfast.net/osmflivech8.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD TV9
|
||||
http://live.streamingfast.net/osmflivech9.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD卡通
|
||||
http://live.streamingfast.net/osmflivech40.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD烤箱读书会
|
||||
http://live.streamingfast.net/osmflivech44.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD生活台
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH12 維他命施
|
||||
http://live.streamingfast.net/osmflivech12.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="",GOOD真情部落格
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH13 健康新煮流 短版
|
||||
http://live.streamingfast.net/osmflivech13.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH14 真情部落格
|
||||
http://live.streamingfast.net/osmflivech14.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH15 真情之夜
|
||||
http://live.streamingfast.net/osmflivech15.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH16 葉光明
|
||||
http://live.streamingfast.net/osmflivech16.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH17 大衛鮑森
|
||||
http://live.streamingfast.net/osmflivech17.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH18 國際講員
|
||||
http://live.streamingfast.net/osmflivech18.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH19 共享觀點
|
||||
http://live.streamingfast.net/osmflivech19.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH2 真理台
|
||||
http://live.streamingfast.net/osmflivech2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH20 恩典時分
|
||||
http://live.streamingfast.net/osmflivech20.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH21 華語講員
|
||||
http://live.streamingfast.net/osmflivech21.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH22 職場新視野
|
||||
http://live.streamingfast.net/osmflivech22.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH23 空中主日學 生活
|
||||
http://live.streamingfast.net/osmflivech23.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH24 劉三講古
|
||||
http://live.streamingfast.net/osmflivech24.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH25 福氣人生
|
||||
http://live.streamingfast.net/osmflivech25.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH26 空中主日學 查經
|
||||
http://live.streamingfast.net/osmflivech26.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH27 空中聖經學院
|
||||
http://live.streamingfast.net/osmflivech27.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH28 現代詩歌
|
||||
http://live.streamingfast.net/osmflivech28.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH29 經典音樂河
|
||||
http://live.streamingfast.net/osmflivech29.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH3 真情部落格 短版
|
||||
http://live.streamingfast.net/osmflivech3.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/4KtjyeR.jpg" group-title="",NTD TV
|
||||
https://live.ntdimg.com/aplive200/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/e/e1/SETN_logo.png" group-title="News",SET News
|
||||
http://60.199.188.65/HLS/WG_ETTV-N/02.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/1/1c/Tvbsnews.png" group-title="News",TVBS News
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH30 天堂敬拜
|
||||
http://live.streamingfast.net/osmflivech30.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH31 福音佈道音樂會
|
||||
http://live.streamingfast.net/osmflivech31.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH32 特會系列:禱告與轉化
|
||||
http://live.streamingfast.net/osmflivech32.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH33 特會系列:研經培靈
|
||||
http://live.streamingfast.net/osmflivech33.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH36 特會系列:超自然大能.醫治釋放
|
||||
http://live.streamingfast.net/osmflivech36.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH37 特會系列:以色列專題
|
||||
http://live.streamingfast.net/osmflivech37.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH38 特會系列:青年特會
|
||||
http://live.streamingfast.net/osmflivech38.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH4 國度報導
|
||||
http://live.streamingfast.net/osmflivech4.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH40 家庭8點檔轉轉發現愛
|
||||
http://live.streamingfast.net/osmflivech40.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH41 幸福學堂
|
||||
http://live.streamingfast.net/osmflivech41.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH44 烤箱讀書會
|
||||
http://live.streamingfast.net/osmflivech44.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH45 卡通
|
||||
http://live.streamingfast.net/osmflivech45.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH47 牧者頻道
|
||||
http://live.streamingfast.net/osmflivech47.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH49 禱告頻道
|
||||
http://live.streamingfast.net/osmflivech49.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH5 共享觀點 短版
|
||||
http://live.streamingfast.net/osmflivech5.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH50 國際講員 中文發音
|
||||
http://live.streamingfast.net/osmflivech50.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH6 親近神 詩歌音樂
|
||||
http://live.streamingfast.net/osmflivech6.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH7 禱告大軍 信息
|
||||
http://live.streamingfast.net/osmflivech7.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH8 幸福學堂 短版
|
||||
http://live.streamingfast.net/osmflivech8.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/bOuErKv.jpg" group-title="Religious",GOOD TV CH9 愛+好醫生 短版
|
||||
http://live.streamingfast.net/osmflivech9.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/1/1c/Tvbsnews.png" group-title="News",TVBS新聞
|
||||
http://60.199.188.65/HLS/WG_TVBS-N/02.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://www.sjtv.com.tw/sjtvlive/views/img/live_web_logo.png" group-title="",信吉电视
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://upload.wikimedia.org/wikipedia/zh/e/e1/SETN_logo.png" group-title="News",三立新聞
|
||||
http://60.199.188.65/HLS/WG_ETTV-N/02.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://www.sjtv.com.tw/sjtvlive/views/img/live_web_logo.png" group-title="Local",信吉電視
|
||||
http://220.130.241.203:1935/sjtv/livestream/chunklist_w1048671923.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://titv.ipcf.org.tw/images/logo.png" group-title="",原住民族電視
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://pic.pimg.tw/sportcast/d28525d04fd7be954e32f9f0b344ee93_n.png" group-title="Sport",博斯魅力
|
||||
http://ms003.happytv.com.tw/live/OcScNdWHvBx5P4w3/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://titv.ipcf.org.tw/images/logo.png" group-title="General",原住民族電視台
|
||||
https://bcovlive-a.akamaihd.net/82be3b97f67745058447484cc8a2d015/ap-southeast-1/5817780548001/profile_0/chunklist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://www.tacttv.com/wp-content/uploads/2018/11/%E5%8F%B0%E7%81%A3%E8%97%9D%E8%A1%93%E5%8F%B0logo.png" group-title="",台灣藝術
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="Local",台南地方公用頻道
|
||||
http://61.58.60.230:9319/live/2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://www.tacttv.com/wp-content/uploads/2018/11/%E5%8F%B0%E7%81%A3%E8%97%9D%E8%A1%93%E5%8F%B0logo.png" group-title="",台灣藝術台
|
||||
http://210.209.3.1/live/4715A9B3-B3CB-93DC-EDD6-CABCE3AFD3E3.m3u8?fmt=x264_500K_ts&cpid=admin&size=1280X720
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/LkbfQoZ.jpg" group-title="",唯心电视台wxtv
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/LkbfQoZ.jpg" group-title="Religious",唯心電視台
|
||||
http://mobile.ccdntech.com/transcoder/_definst_/vod164_Live/live/chunklist_w1177047531.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/0zJYyXH.jpg" group-title="",奇妙电视
|
||||
http://media.fantv.hk/m3u8/archive/channel2.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://www.fanstv.tw/images/logo.png" group-title="",番薯 TV
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://yt3.ggpht.com/a/AATXAJwDZeIjVpLjekUbxILus0QTXvEft2fAFeo9Dg=s900-c-k-c0xffffffff-no-rj-mo" group-title="Legislative",國會頻道1
|
||||
http://61.58.60.230:9319/live/123.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://yt3.ggpht.com/a/AATXAJwDZeIjVpLjekUbxILus0QTXvEft2fAFeo9Dg=s900-c-k-c0xffffffff-no-rj-mo" group-title="Legislative",國會頻道2
|
||||
http://61.58.60.230:9319/live/124.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://yt3.ggpht.com/a/AATXAJw_cFz7ztlIykC5TY9NHehQfIe4x1fKpQvt9A=s288-c-k-c0xffffffff-no-rj-mo" group-title="Local",大嘉義綜合台
|
||||
http://61.58.60.230:9319/live/3.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/PmD2WwD.jpg" group-title="Religious",大愛二台
|
||||
http://61.58.60.230:9319/live/191.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="Local",幸福成家
|
||||
http://61.58.60.230:9319/live/80.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://gstv.com.tw/images/hometv_logo.png" group-title="Lifestyle",幸福空間居家台
|
||||
http://61.58.60.230:9319/live/125.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/4KtjyeR.jpg" group-title="General",新唐人亞太台
|
||||
https://live.ntdimg.com/aplive200/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6jbjVNy.png" group-title="News",民視新聞
|
||||
http://210.61.56.23/hls/ftvtv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6jbjVNy.png" group-title="News",民視新聞
|
||||
http://6.mms.vlog.xuite.net/hls/ftvtv/index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/6jbjVNy.png" group-title="News",民視新聞
|
||||
https://6.mms.vlog.xuite.net/hls/ftvtv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="http://www.fanstv.tw/images/logo.png" group-title="Local",番薯 TV
|
||||
http://210.209.3.1/live/C02DD98E-593E-47A8-905C-3B101183A555.m3u8?fmt=x264_500K_ts&cpid=admin
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播交通委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live6/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播內政委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live7/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播司法及法制委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live9/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播外交及國防委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live8/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播教育及文化委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live4/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播朝野協商
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live10/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播社會福利及衛生環境委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live3/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播經濟委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live5/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播財政委員會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live2/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://ivod.ly.gov.tw/themes/IVOD/zh-tw/html/img/ivod-logo.png" group-title="Legislative",立法院IVOD直播院會
|
||||
https://lylive-videorent.cdn.hinet.net/out/u/live/gop4/ly/ly-Live1/hls-cl-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="" group-title="News",行政院環保署空氣品質監測
|
||||
http://61.58.60.230:9319/live/709.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/Qo2WhLn.jpg" group-title="Kids",靖天卡通
|
||||
http://61.58.60.230:9319/live/207.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/xc7QiyI.png" group-title="",靖天國際
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/xc7QiyI.png" group-title="General",靖天國際
|
||||
http://61.58.60.230:9319/live/205.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/1PmloYC.jpg" group-title="",靖天戲劇
|
||||
http://61.58.60.230:9319/live/203.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Japanese" tvg-logo="https://i.imgur.com/E3hNfeG.jpg" group-title="",靖天日本
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Japanese" tvg-logo="https://i.imgur.com/E3hNfeG.jpg" group-title="General",靖天日本
|
||||
http://61.58.60.230:9319/live/243.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/dvt0GTy.png" group-title="",靖天歡樂
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/z5io5E8.jpg" group-title="Movies",靖天映畫
|
||||
http://61.58.60.230:9319/live/244.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/dvt0GTy.png" group-title="General",靖天歡樂
|
||||
http://61.58.60.230:9319/live/201.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/XNrGXtL.jpg" group-title="",靖天育樂
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/XNrGXtL.jpg" group-title="General",靖天育樂
|
||||
http://61.58.60.230:9319/live/204.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/shKvuIm.jpg" group-title="News",靖天資訊
|
||||
http://61.58.60.230:9319/live/202.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/z5io5E8.jpg" group-title="Movies",靖天電影
|
||||
http://61.58.60.230:9319/live/244.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/KoZMAWS.jpg" group-title="Kids",靖洋卡通
|
||||
http://61.58.60.230:9319/live/206.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-name="" tvg-language="Chinese" tvg-logo="https://i.imgur.com/1PmloYC.jpg" group-title="Movies",靖洋戲劇
|
||||
http://61.58.60.230:9319/live/203.m3u8
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -109,10 +109,10 @@
|
|||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
||||
"dev": true
|
||||
},
|
||||
"iso-639-1": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.0.tgz",
|
||||
"integrity": "sha512-8CTinLimb9ncAJ11wpCETWZ51qsQ3LS4vMHF2wxRRtR3+b7bvIxUlXOGYIdq0413+baWnbyG5dBluVcezOG/LQ==",
|
||||
"langs": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/langs/-/langs-2.0.0.tgz",
|
||||
"integrity": "sha1-AMMs5IFSpJphRFC5uiYyq1igo2Q=",
|
||||
"dev": true
|
||||
},
|
||||
"m3u8-file-parser": {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"escape-string-regexp": "^2.0.0",
|
||||
"fluent-ffmpeg": "^2.1.2",
|
||||
"iptv-playlist-parser": "^0.3.0",
|
||||
"iso-639-1": "^2.1.0",
|
||||
"langs": "^2.0.0",
|
||||
"markdown-include": "^0.4.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,27 +13,37 @@ async function main() {
|
|||
console.log(`Parsing index...`)
|
||||
const index = parseIndex()
|
||||
|
||||
for(let item of index.items) {
|
||||
for (let item of index.items) {
|
||||
console.log(`Processing '${item.url}'...`)
|
||||
let playlist = parsePlaylist(item.url)
|
||||
if(config.debug) { console.log(`Sorting channels...`) }
|
||||
if (config.debug) {
|
||||
console.log(`Sorting channels...`)
|
||||
}
|
||||
playlist = sortChannels(playlist)
|
||||
if(config.debug) { console.log(`Removing duplicates...`) }
|
||||
if (config.debug) {
|
||||
console.log(`Removing duplicates...`)
|
||||
}
|
||||
playlist = removeDuplicates(playlist)
|
||||
|
||||
if(config.epg) {
|
||||
|
||||
if (config.epg) {
|
||||
const tvgUrl = playlist.header.attrs['x-tvg-url']
|
||||
if(tvgUrl) {
|
||||
if(config.debug) { console.log(`Loading EPG from '${tvgUrl}'...`) }
|
||||
if (tvgUrl) {
|
||||
if (config.debug) {
|
||||
console.log(`Loading EPG from '${tvgUrl}'...`)
|
||||
}
|
||||
const epg = await loadEPG(tvgUrl)
|
||||
if(config.debug) { console.log(`Adding the missing data from EPG...`) }
|
||||
if (config.debug) {
|
||||
console.log(`Adding the missing data from EPG...`)
|
||||
}
|
||||
playlist = addDataFromEPG(playlist, epg)
|
||||
} else {
|
||||
if(config.debug) { console.log(`EPG source is not found`) }
|
||||
if (config.debug) {
|
||||
console.log(`EPG source is not found`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(playlist.changed) {
|
||||
if (playlist.changed) {
|
||||
updatePlaylist(item.url, playlist)
|
||||
updated++
|
||||
} else {
|
||||
|
@ -68,7 +78,9 @@ function parsePlaylist(url) {
|
|||
function sortChannels(playlist) {
|
||||
const channels = JSON.stringify(playlist.items)
|
||||
playlist.items = helper.sortBy(playlist.items, ['title', 'url'])
|
||||
if(channels !== JSON.stringify(playlist.items)) { playlist.changed = true }
|
||||
if (channels !== JSON.stringify(playlist.items)) {
|
||||
playlist.changed = true
|
||||
}
|
||||
|
||||
return playlist
|
||||
}
|
||||
|
@ -78,17 +90,21 @@ function removeDuplicates(playlist) {
|
|||
const channels = JSON.stringify(playlist.items)
|
||||
playlist.items = playlist.items.filter(i => {
|
||||
let result = typeof buffer[i.url] === 'undefined'
|
||||
|
||||
if(result) {
|
||||
|
||||
if (result) {
|
||||
buffer[i.url] = true
|
||||
} else {
|
||||
if(config.debug) { console.log(`Duplicate of '${i.title}' has been removed`) }
|
||||
if (config.debug) {
|
||||
console.log(`Duplicate of '${i.title}' has been removed`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result
|
||||
})
|
||||
|
||||
if(channels !== JSON.stringify(playlist.items)) { playlist.changed = true }
|
||||
if (channels !== JSON.stringify(playlist.items)) {
|
||||
playlist.changed = true
|
||||
}
|
||||
|
||||
return playlist
|
||||
}
|
||||
|
@ -96,38 +112,44 @@ function removeDuplicates(playlist) {
|
|||
async function loadEPG(url) {
|
||||
try {
|
||||
return await helper.parseEPG(url)
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
console.error(`Error: could not load '${url}'`)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
function addDataFromEPG(playlist, epg) {
|
||||
if(!epg) return playlist
|
||||
if (!epg) return playlist
|
||||
|
||||
for (let item of playlist.items) {
|
||||
if (!item.id) continue
|
||||
|
||||
for(let item of playlist.items) {
|
||||
if(!item.id) continue
|
||||
|
||||
const channel = epg.channels[item.id]
|
||||
|
||||
if(!channel) continue
|
||||
if (!channel) continue
|
||||
|
||||
if(!item.name && channel.name.length) {
|
||||
if (!item.name && channel.name.length) {
|
||||
item.name = channel.name[0].value
|
||||
playlist.changed = true
|
||||
if(config.debug) { console.log(`Added tvg-name '${item.name}' to '${item.title}'`) }
|
||||
if (config.debug) {
|
||||
console.log(`Added tvg-name '${item.name}' to '${item.title}'`)
|
||||
}
|
||||
}
|
||||
|
||||
if(!item.language && channel.name.length && channel.name[0].lang) {
|
||||
if (!item.language && channel.name.length && channel.name[0].lang) {
|
||||
item.language = channel.name[0].lang
|
||||
playlist.changed = true
|
||||
if(config.debug) { console.log(`Added tvg-language '${item.language}' to '${item.title}'`) }
|
||||
if (config.debug) {
|
||||
console.log(`Added tvg-language '${item.language}' to '${item.title}'`)
|
||||
}
|
||||
}
|
||||
|
||||
if(!item.logo && channel.icon.length) {
|
||||
if (!item.logo && channel.icon.length) {
|
||||
item.logo = channel.icon[0]
|
||||
playlist.changed = true
|
||||
if(config.debug) { console.log(`Added tvg-logo '${item.logo}' to '${item.title}'`) }
|
||||
if (config.debug) {
|
||||
console.log(`Added tvg-logo '${item.logo}' to '${item.title}'`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,7 +158,7 @@ function addDataFromEPG(playlist, epg) {
|
|||
|
||||
function updatePlaylist(filepath, playlist) {
|
||||
helper.createFile(filepath, playlist.getHeader())
|
||||
for(let channel of playlist.items) {
|
||||
for (let channel of playlist.items) {
|
||||
helper.appendToFile(filepath, channel.toShortString())
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,11 @@ function main() {
|
|||
generateLanguages()
|
||||
console.log('Done.\n')
|
||||
|
||||
console.log(`Countries: ${Object.values(list.countries).length}. Languages: ${Object.values(list.languages).length}. Categories: ${Object.values(list.categories).length}. Channels: ${list.all.length}.`)
|
||||
console.log(
|
||||
`Countries: ${Object.values(list.countries).length}. Languages: ${
|
||||
Object.values(list.languages).length
|
||||
}. Categories: ${Object.values(list.categories).length}. Channels: ${list.all.length}.`
|
||||
)
|
||||
}
|
||||
|
||||
function createRootDirectory() {
|
||||
|
@ -50,12 +54,12 @@ function parseIndex() {
|
|||
let languages = {}
|
||||
let categories = {}
|
||||
|
||||
for(let rootItem of root.items) {
|
||||
for (let rootItem of root.items) {
|
||||
const playlist = helper.parsePlaylist(rootItem.url)
|
||||
const countryCode = helper.getBasename(rootItem.url).toLowerCase()
|
||||
const countryName = rootItem.name
|
||||
|
||||
for(let item of playlist.items) {
|
||||
for (let item of playlist.items) {
|
||||
const channel = helper.createChannel(item)
|
||||
channel.countryCode = countryCode
|
||||
channel.countryName = countryName
|
||||
|
@ -65,21 +69,21 @@ function parseIndex() {
|
|||
list.all.push(channel)
|
||||
|
||||
// country
|
||||
if(!countries[countryCode]) {
|
||||
if (!countries[countryCode]) {
|
||||
countries[countryCode] = []
|
||||
}
|
||||
countries[countryCode].push(channel)
|
||||
|
||||
// language
|
||||
const languageCode = helper.getISO6391Code(channel.language) || 'undefined'
|
||||
if(!languages[languageCode]) {
|
||||
if (!languages[languageCode]) {
|
||||
languages[languageCode] = []
|
||||
}
|
||||
languages[languageCode].push(channel)
|
||||
|
||||
// category
|
||||
const categoryCode = channel.group.toLowerCase() || 'other'
|
||||
if(!categories[categoryCode]) {
|
||||
if (!categories[categoryCode]) {
|
||||
categories[categoryCode] = []
|
||||
}
|
||||
categories[categoryCode].push(channel)
|
||||
|
@ -96,7 +100,7 @@ function generateIndex() {
|
|||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(list.all, ['title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
}
|
||||
}
|
||||
|
@ -106,7 +110,7 @@ function generateCountryIndex() {
|
|||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(list.all, ['countryName', 'title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
const group = channel.group
|
||||
channel.group = channel.countryName
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
|
@ -119,7 +123,7 @@ function generateLanguageIndex() {
|
|||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(list.all, ['language', 'title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
const group = channel.group
|
||||
channel.group = channel.language
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
|
@ -132,7 +136,7 @@ function generateCategoryIndex() {
|
|||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(list.all, ['group', 'title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
}
|
||||
}
|
||||
|
@ -141,13 +145,13 @@ function generateCountries() {
|
|||
const outputDir = `${ROOT_DIR}/countries`
|
||||
helper.createDir(outputDir)
|
||||
|
||||
for(let cid in list.countries) {
|
||||
for (let cid in list.countries) {
|
||||
let country = list.countries[cid]
|
||||
const filename = `${outputDir}/${cid}.m3u`
|
||||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(Object.values(country), ['title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
}
|
||||
}
|
||||
|
@ -157,13 +161,13 @@ function generateCategories() {
|
|||
const outputDir = `${ROOT_DIR}/categories`
|
||||
helper.createDir(outputDir)
|
||||
|
||||
for(let cid in list.categories) {
|
||||
for (let cid in list.categories) {
|
||||
let category = list.categories[cid]
|
||||
const filename = `${outputDir}/${cid}.m3u`
|
||||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(Object.values(category), ['title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
}
|
||||
}
|
||||
|
@ -173,13 +177,13 @@ function generateLanguages() {
|
|||
const outputDir = `${ROOT_DIR}/languages`
|
||||
helper.createDir(outputDir)
|
||||
|
||||
for(let lid in list.languages) {
|
||||
for (let lid in list.languages) {
|
||||
let language = list.languages[lid]
|
||||
const filename = `${outputDir}/${lid}.m3u`
|
||||
helper.createFile(filename, '#EXTM3U\n')
|
||||
|
||||
const channels = helper.sortBy(Object.values(language), ['title', 'url'])
|
||||
for(let channel of channels) {
|
||||
for (let channel of channels) {
|
||||
helper.appendToFile(filename, channel.toString())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,71 +1,75 @@
|
|||
const fs = require("fs")
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const playlistParser = require('iptv-playlist-parser')
|
||||
const axios = require('axios')
|
||||
const zlib = require("zlib")
|
||||
const zlib = require('zlib')
|
||||
const epgParser = require('epg-parser')
|
||||
const urlParser = require('url')
|
||||
const ISO6391 = require('iso-639-1')
|
||||
const langs = require('langs')
|
||||
const escapeStringRegexp = require('escape-string-regexp')
|
||||
const markdownInclude = require('markdown-include')
|
||||
|
||||
let cache = {}
|
||||
let helper = {}
|
||||
|
||||
helper.sortBy = function(arr, fields) {
|
||||
helper.sortBy = function (arr, fields) {
|
||||
return arr.sort((a, b) => {
|
||||
for(let field of fields) {
|
||||
if(a[field].toLowerCase() < b[field].toLowerCase()) { return -1 }
|
||||
if(a[field].toLowerCase() > b[field].toLowerCase()) { return 1 }
|
||||
for (let field of fields) {
|
||||
if (a[field].toLowerCase() < b[field].toLowerCase()) {
|
||||
return -1
|
||||
}
|
||||
if (a[field].toLowerCase() > b[field].toLowerCase()) {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
return 0
|
||||
})
|
||||
}
|
||||
|
||||
helper.createDir = function(dir) {
|
||||
helper.createDir = function (dir) {
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir)
|
||||
}
|
||||
}
|
||||
|
||||
helper.compileMarkdown = function(filepath) {
|
||||
helper.compileMarkdown = function (filepath) {
|
||||
return markdownInclude.compileFiles(path.resolve(__dirname, filepath))
|
||||
}
|
||||
|
||||
helper.escapeStringRegexp = function(scring) {
|
||||
helper.escapeStringRegexp = function (scring) {
|
||||
return escapeStringRegexp(string)
|
||||
}
|
||||
|
||||
helper.getISO6391Name = function(code) {
|
||||
return ISO6391.getName(code)
|
||||
helper.getISO6391Name = function (code) {
|
||||
return langs.has('3', code) ? langs.where('3', code).name : null
|
||||
}
|
||||
|
||||
helper.getISO6391Code = function(name) {
|
||||
return ISO6391.getCode(name)
|
||||
helper.getISO6391Code = function (name) {
|
||||
return langs.has('name', name) ? langs.where('name', name)['3'] : null
|
||||
}
|
||||
|
||||
helper.parsePlaylist = function(filename) {
|
||||
helper.parsePlaylist = function (filename) {
|
||||
const content = this.readFile(filename)
|
||||
const result = playlistParser.parse(content)
|
||||
|
||||
return new Playlist(result)
|
||||
}
|
||||
|
||||
helper.parseEPG = async function(url) {
|
||||
helper.parseEPG = async function (url) {
|
||||
const content = await this.getEPG(url)
|
||||
const result = epgParser.parse(content)
|
||||
const channels = {}
|
||||
for(let channel of result.channels) {
|
||||
for (let channel of result.channels) {
|
||||
channels[channel.id] = channel
|
||||
}
|
||||
|
||||
return Promise.resolve({
|
||||
url,
|
||||
return Promise.resolve({
|
||||
url,
|
||||
channels
|
||||
})
|
||||
}
|
||||
|
||||
helper.getEPG = function(url) {
|
||||
helper.getEPG = function (url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
var buffer = []
|
||||
axios({
|
||||
|
@ -73,46 +77,51 @@ helper.getEPG = function(url) {
|
|||
url: url,
|
||||
responseType: 'stream',
|
||||
timeout: 60000
|
||||
}).then(res => {
|
||||
let stream
|
||||
if(/\.gz$/i.test(url)) {
|
||||
let gunzip = zlib.createGunzip()
|
||||
res.data.pipe(gunzip)
|
||||
stream = gunzip
|
||||
} else {
|
||||
stream = res.data
|
||||
}
|
||||
})
|
||||
.then(res => {
|
||||
let stream
|
||||
if (/\.gz$/i.test(url)) {
|
||||
let gunzip = zlib.createGunzip()
|
||||
res.data.pipe(gunzip)
|
||||
stream = gunzip
|
||||
} else {
|
||||
stream = res.data
|
||||
}
|
||||
|
||||
stream.on('data', function(data) {
|
||||
buffer.push(data.toString())
|
||||
}).on("end", function() {
|
||||
resolve(buffer.join(""))
|
||||
}).on("error", function(e) {
|
||||
stream
|
||||
.on('data', function (data) {
|
||||
buffer.push(data.toString())
|
||||
})
|
||||
.on('end', function () {
|
||||
resolve(buffer.join(''))
|
||||
})
|
||||
.on('error', function (e) {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
.catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
helper.readFile = function(filename) {
|
||||
return fs.readFileSync(path.resolve(__dirname) + `/../${filename}`, { encoding: "utf8" })
|
||||
helper.readFile = function (filename) {
|
||||
return fs.readFileSync(path.resolve(__dirname) + `/../${filename}`, { encoding: 'utf8' })
|
||||
}
|
||||
|
||||
helper.appendToFile = function(filename, data) {
|
||||
helper.appendToFile = function (filename, data) {
|
||||
fs.appendFileSync(path.resolve(__dirname) + '/../' + filename, data)
|
||||
}
|
||||
|
||||
helper.createFile = function(filename, data = '') {
|
||||
helper.createFile = function (filename, data = '') {
|
||||
fs.writeFileSync(path.resolve(__dirname) + '/../' + filename, data)
|
||||
}
|
||||
|
||||
helper.getBasename = function(filename) {
|
||||
helper.getBasename = function (filename) {
|
||||
return path.basename(filename, path.extname(filename))
|
||||
}
|
||||
|
||||
helper.getUrlPath = function(u) {
|
||||
helper.getUrlPath = function (u) {
|
||||
let parsed = urlParser.parse(u)
|
||||
let searchQuery = parsed.search || ''
|
||||
let path = parsed.host + parsed.pathname + searchQuery
|
||||
|
@ -120,23 +129,23 @@ helper.getUrlPath = function(u) {
|
|||
return path.toLowerCase()
|
||||
}
|
||||
|
||||
helper.filterPlaylists = function(arr, include = '', exclude = '') {
|
||||
if(include) {
|
||||
helper.filterPlaylists = function (arr, include = '', exclude = '') {
|
||||
if (include) {
|
||||
const included = include.split(',').map(filename => `channels/${filename}.m3u`)
|
||||
|
||||
|
||||
return arr.filter(i => included.indexOf(i.url) > -1)
|
||||
}
|
||||
|
||||
if(exclude) {
|
||||
if (exclude) {
|
||||
const excluded = exclude.split(',').map(filename => `channels/${filename}.m3u`)
|
||||
|
||||
|
||||
return arr.filter(i => excluded.indexOf(i.url) === -1)
|
||||
}
|
||||
|
||||
return arr
|
||||
}
|
||||
|
||||
helper.generateTable = function(data, options) {
|
||||
helper.generateTable = function (data, options) {
|
||||
let output = '<table>\n'
|
||||
|
||||
output += '\t<thead>\n\t\t<tr>'
|
||||
|
@ -165,7 +174,7 @@ helper.generateTable = function(data, options) {
|
|||
return output
|
||||
}
|
||||
|
||||
helper.createChannel = function(data) {
|
||||
helper.createChannel = function (data) {
|
||||
return new Channel({
|
||||
id: data.tvg.id,
|
||||
name: data.tvg.name,
|
||||
|
@ -177,24 +186,24 @@ helper.createChannel = function(data) {
|
|||
})
|
||||
}
|
||||
|
||||
helper.writeToLog = function(country, msg, url) {
|
||||
helper.writeToLog = function (country, msg, url) {
|
||||
var now = new Date()
|
||||
var line = `${country}: ${msg} '${url}'`
|
||||
this.appendToFile('error.log', now.toISOString() + ' ' + line + '\n')
|
||||
}
|
||||
|
||||
helper.parseMessage = function(err, u) {
|
||||
if(!err || !err.message) return
|
||||
helper.parseMessage = function (err, u) {
|
||||
if (!err || !err.message) return
|
||||
|
||||
const msgArr = err.message.split('\n')
|
||||
|
||||
if(msgArr.length === 0) return
|
||||
if (msgArr.length === 0) return
|
||||
|
||||
const line = msgArr.find(line => {
|
||||
return line.indexOf(u) === 0
|
||||
})
|
||||
|
||||
if(!line) return
|
||||
if (!line) return
|
||||
|
||||
return line.replace(`${u}: `, '')
|
||||
}
|
||||
|
@ -208,9 +217,9 @@ class Playlist {
|
|||
|
||||
getHeader() {
|
||||
let parts = ['#EXTM3U']
|
||||
for(let key in this.header.attrs) {
|
||||
for (let key in this.header.attrs) {
|
||||
let value = this.header.attrs[key]
|
||||
if(value) {
|
||||
if (value) {
|
||||
parts.push(`${key}="${value}"`)
|
||||
}
|
||||
}
|
||||
|
@ -231,12 +240,44 @@ class Channel {
|
|||
}
|
||||
|
||||
_filterGroup(groupTitle) {
|
||||
if(!groupTitle) return ''
|
||||
|
||||
const supportedCategories = [ 'Auto','Business', 'Classic','Comedy','Documentary','Education','Entertainment', 'Family','Fashion','Food', 'General', 'Health', 'History', 'Hobby', 'Kids', 'Legislative','Lifestyle','Local', 'Movies', 'Music', 'News', 'Quiz', 'Religious','Sci-Fi', 'Shop', 'Sport', 'Travel', 'Weather', 'XXX' ]
|
||||
const groupIndex = supportedCategories.map(g => g.toLowerCase()).indexOf(groupTitle.toLowerCase())
|
||||
if (!groupTitle) return ''
|
||||
|
||||
if(groupIndex === -1) {
|
||||
const supportedCategories = [
|
||||
'Auto',
|
||||
'Business',
|
||||
'Classic',
|
||||
'Comedy',
|
||||
'Documentary',
|
||||
'Education',
|
||||
'Entertainment',
|
||||
'Family',
|
||||
'Fashion',
|
||||
'Food',
|
||||
'General',
|
||||
'Health',
|
||||
'History',
|
||||
'Hobby',
|
||||
'Kids',
|
||||
'Legislative',
|
||||
'Lifestyle',
|
||||
'Local',
|
||||
'Movies',
|
||||
'Music',
|
||||
'News',
|
||||
'Quiz',
|
||||
'Religious',
|
||||
'Sci-Fi',
|
||||
'Shop',
|
||||
'Sport',
|
||||
'Travel',
|
||||
'Weather',
|
||||
'XXX'
|
||||
]
|
||||
const groupIndex = supportedCategories
|
||||
.map(g => g.toLowerCase())
|
||||
.indexOf(groupTitle.toLowerCase())
|
||||
|
||||
if (groupIndex === -1) {
|
||||
groupTitle = ''
|
||||
} else {
|
||||
groupTitle = supportedCategories[groupIndex]
|
||||
|
@ -246,7 +287,7 @@ class Channel {
|
|||
}
|
||||
|
||||
_filterLanguage(languageName) {
|
||||
if(ISO6391.getCode(languageName) !== '') {
|
||||
if (helper.getISO6391Code(languageName)) {
|
||||
return languageName
|
||||
}
|
||||
|
||||
|
@ -255,7 +296,7 @@ class Channel {
|
|||
|
||||
toString() {
|
||||
const country = this.countryCode.toUpperCase()
|
||||
const epg = (this.id && this.epg) ? this.epg : ''
|
||||
const epg = this.id && this.epg ? this.epg : ''
|
||||
const info = `-1 tvg-id="${this.id}" tvg-name="${this.name}" tvg-language="${this.language}" tvg-logo="${this.logo}" tvg-country="${country}" tvg-url="${epg}" group-title="${this.group}",${this.title}`
|
||||
|
||||
return '#EXTINF:' + info + '\n' + this.url + '\n'
|
||||
|
@ -268,4 +309,4 @@ class Channel {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = helper
|
||||
module.exports = helper
|
||||
|
|
|
@ -17,67 +17,60 @@ let stats = {
|
|||
}
|
||||
|
||||
async function test() {
|
||||
|
||||
const playlist = helper.parsePlaylist('index.m3u')
|
||||
|
||||
|
||||
const countries = helper.filterPlaylists(playlist.items, config.country, config.exclude)
|
||||
|
||||
for(let country of countries) {
|
||||
|
||||
for (let country of countries) {
|
||||
stats.playlists++
|
||||
|
||||
console.log(`Processing '${country.url}'...`)
|
||||
|
||||
const playlist = helper.parsePlaylist(country.url)
|
||||
|
||||
for(let item of playlist.items) {
|
||||
|
||||
for (let item of playlist.items) {
|
||||
stats.channels++
|
||||
|
||||
if(config.debug) { console.log(`Checking '${item.url}'...`) }
|
||||
if (config.debug) {
|
||||
console.log(`Checking '${item.url}'...`)
|
||||
}
|
||||
|
||||
await new Promise(resolve => {
|
||||
|
||||
const timeout = setTimeout(() => {
|
||||
|
||||
resolve()
|
||||
|
||||
}, config.timeout * 1000)
|
||||
|
||||
ffmpeg(item.url, { timeout: 60 }).ffprobe((err) => {
|
||||
|
||||
if(err) {
|
||||
const message = helper.parseMessage(err, item.url)
|
||||
ffmpeg(item.url, { timeout: 60 }).ffprobe(
|
||||
['-user_agent', `"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"`],
|
||||
err => {
|
||||
if (err) {
|
||||
const message = helper.parseMessage(err, item.url)
|
||||
|
||||
stats.failures++
|
||||
stats.failures++
|
||||
|
||||
helper.writeToLog(country.url, message, item.url)
|
||||
helper.writeToLog(country.url, message, item.url)
|
||||
|
||||
console.log(`${message} '${item.url}'`)
|
||||
console.log(`${message} '${item.url}'`)
|
||||
}
|
||||
|
||||
clearTimeout(timeout)
|
||||
|
||||
resolve()
|
||||
}
|
||||
|
||||
clearTimeout(timeout)
|
||||
|
||||
resolve()
|
||||
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(stats.failures === 0) {
|
||||
|
||||
if (stats.failures === 0) {
|
||||
console.log(`OK (${stats.playlists} playlists, ${stats.channels} channels)`)
|
||||
|
||||
} else {
|
||||
|
||||
console.log(`FAILURES! (${stats.playlists} playlists, ${stats.channels} channels, ${stats.failures} failures)`)
|
||||
console.log(
|
||||
`FAILURES! (${stats.playlists} playlists, ${stats.channels} channels, ${stats.failures} failures)`
|
||||
)
|
||||
|
||||
process.exit(1)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
console.log('Test is running...')
|
||||
|
|
|
@ -26,22 +26,23 @@ function parseIndex() {
|
|||
let countries = {}
|
||||
let languages = {}
|
||||
let categories = {}
|
||||
for(let rootItem of root.items) {
|
||||
for (let rootItem of root.items) {
|
||||
const playlist = helper.parsePlaylist(rootItem.url)
|
||||
const countryName = rootItem.name
|
||||
const countryCode = helper.getBasename(rootItem.url).toLowerCase()
|
||||
const countryEpg = playlist.header.attrs['x-tvg-url'] ? `<code>${playlist.header.attrs['x-tvg-url']}</code>` : ''
|
||||
const countryEpg = playlist.header.attrs['x-tvg-url']
|
||||
? `<code>${playlist.header.attrs['x-tvg-url']}</code>`
|
||||
: ''
|
||||
|
||||
for(let item of playlist.items) {
|
||||
|
||||
for (let item of playlist.items) {
|
||||
// countries
|
||||
if(countries[countryCode]) {
|
||||
if (countries[countryCode]) {
|
||||
countries[countryCode].channels++
|
||||
} else {
|
||||
countries[countryCode] = {
|
||||
country: countryName,
|
||||
channels: 1,
|
||||
playlist: `<code>https://iptv-org.github.io/iptv/countries/${countryCode}.m3u</code>`,
|
||||
countries[countryCode] = {
|
||||
country: countryName,
|
||||
channels: 1,
|
||||
playlist: `<code>https://iptv-org.github.io/iptv/countries/${countryCode}.m3u</code>`,
|
||||
epg: countryEpg
|
||||
}
|
||||
}
|
||||
|
@ -49,26 +50,26 @@ function parseIndex() {
|
|||
// languages
|
||||
const languageName = item.tvg.language || 'Undefined'
|
||||
const languageCode = helper.getISO6391Code(languageName) || 'undefined'
|
||||
if(languages[languageCode]) {
|
||||
if (languages[languageCode]) {
|
||||
languages[languageCode].channels++
|
||||
} else {
|
||||
languages[languageCode] = {
|
||||
language: languageName,
|
||||
channels: 1,
|
||||
playlist: `<code>https://iptv-org.github.io/iptv/languages/${languageCode}.m3u</code>`
|
||||
languages[languageCode] = {
|
||||
language: languageName,
|
||||
channels: 1,
|
||||
playlist: `<code>https://iptv-org.github.io/iptv/languages/${languageCode}.m3u</code>`
|
||||
}
|
||||
}
|
||||
|
||||
// categories
|
||||
const categoryName = item.group.title || 'Other'
|
||||
const categoryCode = categoryName.toLowerCase()
|
||||
if(categories[categoryCode]) {
|
||||
if (categories[categoryCode]) {
|
||||
categories[categoryCode].channels++
|
||||
} else {
|
||||
categories[categoryCode] = {
|
||||
category: categoryName,
|
||||
channels: 1,
|
||||
playlist: `<code>https://iptv-org.github.io/iptv/categories/${categoryCode}.m3u</code>`
|
||||
categories[categoryCode] = {
|
||||
category: categoryName,
|
||||
channels: 1,
|
||||
playlist: `<code>https://iptv-org.github.io/iptv/categories/${categoryCode}.m3u</code>`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -94,10 +95,18 @@ function generateCountriesTable() {
|
|||
|
||||
function generateLanguagesTable() {
|
||||
output.languages.sort((a, b) => {
|
||||
if(a.language === 'Undefined') { return 1 }
|
||||
if(b.language === 'Undefined') { return -1 }
|
||||
if(a.language < b.language) { return -1 }
|
||||
if(a.language > b.language) { return 1 }
|
||||
if (a.language === 'Undefined') {
|
||||
return 1
|
||||
}
|
||||
if (b.language === 'Undefined') {
|
||||
return -1
|
||||
}
|
||||
if (a.language < b.language) {
|
||||
return -1
|
||||
}
|
||||
if (a.language > b.language) {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
})
|
||||
|
||||
|
@ -114,10 +123,18 @@ function generateLanguagesTable() {
|
|||
|
||||
function generateCategoriesTable() {
|
||||
output.categories.sort((a, b) => {
|
||||
if(a.category === 'Other') { return 1 }
|
||||
if(b.category === 'Other') { return -1 }
|
||||
if(a.category < b.category) { return -1 }
|
||||
if(a.category > b.category) { return 1 }
|
||||
if (a.category === 'Other') {
|
||||
return 1
|
||||
}
|
||||
if (b.category === 'Other') {
|
||||
return -1
|
||||
}
|
||||
if (a.category < b.category) {
|
||||
return -1
|
||||
}
|
||||
if (a.category > b.category) {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue