Merge pull request #5 from iptv-org/master

merge
This commit is contained in:
Link4K 2020-04-11 16:00:31 +01:00 committed by GitHub
commit 1cd420b18e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 468 additions and 3045 deletions

View File

@ -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)

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

8
package-lock.json generated
View File

@ -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": {

View File

@ -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"
}
}

View File

@ -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())
}

View File

@ -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())
}
}

View File

@ -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

View File

@ -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...')

View File

@ -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
})