Merge branch 'master' into patch-27
This commit is contained in:
3
.readme/.gitignore
vendored
3
.readme/.gitignore
vendored
@@ -1,5 +1,4 @@
|
||||
_categories.md
|
||||
_countries.md
|
||||
_languages.md
|
||||
_regions.md
|
||||
_subdivisions.md
|
||||
_regions.md
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"build" : "PLAYLISTS.md",
|
||||
"files" : ["./.readme/template.md"]
|
||||
}
|
||||
@@ -40,13 +40,14 @@ Same thing, but split up into separate files:
|
||||
|
||||
</details>
|
||||
|
||||
### Grouped by country
|
||||
### Grouped by broadcast area
|
||||
|
||||
Playlists in which channels are grouped by country for which they are broadcasted.
|
||||
Playlists in which channels are grouped by broadcast area.
|
||||
|
||||
<details>
|
||||
<summary>Expand</summary>
|
||||
<br>
|
||||
|
||||
#### Countries
|
||||
|
||||
```
|
||||
https://iptv-org.github.io/iptv/index.country.m3u
|
||||
@@ -57,34 +58,7 @@ Same thing, but split up into separate files:
|
||||
<!-- prettier-ignore -->
|
||||
#include "./.readme/_countries.md"
|
||||
|
||||
</details>
|
||||
|
||||
### Grouped by subdivision
|
||||
|
||||
Playlists in which channels are grouped by subdivision for which they are broadcasted.
|
||||
|
||||
<details>
|
||||
<summary>Expand</summary>
|
||||
<br>
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
#include "./.readme/_subdivisions.md"
|
||||
|
||||
</details>
|
||||
|
||||
### Grouped by region
|
||||
|
||||
Playlists in which channels are grouped by the region for which they are broadcasted.
|
||||
|
||||
<details>
|
||||
<summary>Expand</summary>
|
||||
<br>
|
||||
|
||||
```
|
||||
https://iptv-org.github.io/iptv/index.region.m3u
|
||||
```
|
||||
|
||||
Same thing, but split up into separate files:
|
||||
#### Regions
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
#include "./.readme/_regions.md"
|
||||
|
||||
6821
PLAYLISTS.md
6821
PLAYLISTS.md
File diff suppressed because it is too large
Load Diff
91
package-lock.json
generated
91
package-lock.json
generated
@@ -8,6 +8,7 @@
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alex_neo/jest-expect-message": "^1.0.5",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "^9.32.0",
|
||||
"@freearhey/core": "^0.10.2",
|
||||
@@ -45,6 +46,11 @@
|
||||
"tsx": "^4.20.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@alex_neo/jest-expect-message": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@alex_neo/jest-expect-message/-/jest-expect-message-1.0.5.tgz",
|
||||
"integrity": "sha512-1eBykZCd0pPGl5qKtV6Z5ARA6yuhXzHsVN2h5GH5/H6svYa37Jr7vMio5OFpiw1LBHtscrZs7amSkZkcwm0cvQ=="
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
|
||||
@@ -1254,14 +1260,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/editor": {
|
||||
"version": "4.2.15",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.15.tgz",
|
||||
"integrity": "sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==",
|
||||
"license": "MIT",
|
||||
"version": "4.2.17",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.17.tgz",
|
||||
"integrity": "sha512-r6bQLsyPSzbWrZZ9ufoWL+CztkSatnJ6uSxqd6N+o41EZC51sQeWOzI6s5jLb+xxTWxl7PlUppqm8/sow241gg==",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^10.1.15",
|
||||
"@inquirer/type": "^3.0.8",
|
||||
"external-editor": "^3.1.0"
|
||||
"@inquirer/external-editor": "^1.0.1",
|
||||
"@inquirer/type": "^3.0.8"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
@@ -1297,6 +1302,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/external-editor": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz",
|
||||
"integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==",
|
||||
"dependencies": {
|
||||
"chardet": "^2.1.0",
|
||||
"iconv-lite": "^0.6.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/node": ">=18"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/node": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/figures": {
|
||||
"version": "1.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz",
|
||||
@@ -3853,10 +3878,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/chardet": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
|
||||
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
|
||||
"license": "MIT"
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz",
|
||||
"integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA=="
|
||||
},
|
||||
"node_modules/ci-info": {
|
||||
"version": "4.3.0",
|
||||
@@ -4547,20 +4571,6 @@
|
||||
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/external-editor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
||||
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chardet": "^0.7.0",
|
||||
"iconv-lite": "^0.4.24",
|
||||
"tmp": "^0.0.33"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-content-type-parse": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz",
|
||||
@@ -5033,12 +5043,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"license": "MIT",
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
@@ -6848,15 +6857,6 @@
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/outvariant": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
|
||||
@@ -7280,8 +7280,7 @@
|
||||
"node_modules/safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"license": "MIT"
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
@@ -7667,18 +7666,6 @@
|
||||
"resolved": "https://registry.npmjs.org/timer-node/-/timer-node-5.0.9.tgz",
|
||||
"integrity": "sha512-zXxCE/5/YDi0hY9pygqgRqjRbrFRzigYxOudG0I3syaqAAmX9/w9sxex1bNFCN6c1S66RwPtEIJv65dN+1psew=="
|
||||
},
|
||||
"node_modules/tmp": {
|
||||
"version": "0.0.33",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
||||
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"os-tmpdir": "~1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tmpl": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alex_neo/jest-expect-message": "^1.0.5",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "^9.32.0",
|
||||
"@freearhey/core": "^0.10.2",
|
||||
|
||||
@@ -18,7 +18,8 @@ async function main() {
|
||||
loader.download('logos.json'),
|
||||
loader.download('timezones.json'),
|
||||
loader.download('guides.json'),
|
||||
loader.download('streams.json')
|
||||
loader.download('streams.json'),
|
||||
loader.download('cities.json')
|
||||
])
|
||||
}
|
||||
|
||||
|
||||
@@ -10,12 +10,12 @@ import {
|
||||
IndexLanguageGenerator,
|
||||
IndexCountryGenerator,
|
||||
SubdivisionsGenerator,
|
||||
IndexRegionGenerator,
|
||||
CategoriesGenerator,
|
||||
CountriesGenerator,
|
||||
LanguagesGenerator,
|
||||
RegionsGenerator,
|
||||
SourcesGenerator,
|
||||
CitiesGenerator,
|
||||
IndexGenerator,
|
||||
RawGenerator
|
||||
} from '../../generators'
|
||||
@@ -36,7 +36,8 @@ async function main() {
|
||||
subdivisions,
|
||||
categories,
|
||||
countries,
|
||||
regions
|
||||
regions,
|
||||
cities
|
||||
}: DataProcessorData = processor.process(data)
|
||||
|
||||
logger.info('loading streams...')
|
||||
@@ -90,6 +91,13 @@ async function main() {
|
||||
logFile
|
||||
}).generate()
|
||||
|
||||
logger.info('generating cities/...')
|
||||
await new CitiesGenerator({
|
||||
cities,
|
||||
streams,
|
||||
logFile
|
||||
}).generate()
|
||||
|
||||
logger.info('generating regions/...')
|
||||
await new RegionsGenerator({
|
||||
streams,
|
||||
@@ -115,9 +123,6 @@ async function main() {
|
||||
logger.info('generating index.language.m3u...')
|
||||
await new IndexLanguageGenerator({ streams, logFile }).generate()
|
||||
|
||||
logger.info('generating index.region.m3u...')
|
||||
await new IndexRegionGenerator({ streams, regions, logFile }).generate()
|
||||
|
||||
logger.info('saving generators.log...')
|
||||
const logStorage = new Storage(LOGS_DIR)
|
||||
logStorage.saveFile(logFile)
|
||||
|
||||
@@ -1,32 +1,47 @@
|
||||
import { Logger } from '@freearhey/core'
|
||||
import {
|
||||
CategoryTable,
|
||||
CountryTable,
|
||||
LanguageTable,
|
||||
RegionTable,
|
||||
SubdivisionTable
|
||||
} from '../../tables'
|
||||
import { Markdown } from '../../core'
|
||||
import { README_DIR } from '../../constants'
|
||||
import path from 'path'
|
||||
import { CategoriesTable, CountriesTable, LanguagesTable, RegionsTable } from '../../tables'
|
||||
import { DataLoader, DataProcessor, Markdown } from '../../core'
|
||||
import { DataProcessorData } from '../../types/dataProcessor'
|
||||
import { DataLoaderData } from '../../types/dataLoader'
|
||||
import { README_DIR, DATA_DIR, ROOT_DIR } from '../../constants'
|
||||
import { Logger, Storage } from '@freearhey/core'
|
||||
|
||||
async function main() {
|
||||
const logger = new Logger()
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
const processor = new DataProcessor()
|
||||
const loader = new DataLoader({ storage: dataStorage })
|
||||
const data: DataLoaderData = await loader.load()
|
||||
const {
|
||||
subdivisionsKeyByCode,
|
||||
languagesKeyByCode,
|
||||
countriesKeyByCode,
|
||||
categoriesKeyById,
|
||||
subdivisions,
|
||||
countries,
|
||||
regions,
|
||||
cities
|
||||
}: DataProcessorData = processor.process(data)
|
||||
|
||||
logger.info('creating category table...')
|
||||
await new CategoryTable().make()
|
||||
await new CategoriesTable({ categoriesKeyById }).make()
|
||||
logger.info('creating language table...')
|
||||
await new LanguageTable().make()
|
||||
logger.info('creating country table...')
|
||||
await new CountryTable().make()
|
||||
logger.info('creating subdivision table...')
|
||||
await new SubdivisionTable().make()
|
||||
await new LanguagesTable({ languagesKeyByCode }).make()
|
||||
logger.info('creating countires table...')
|
||||
await new CountriesTable({
|
||||
countriesKeyByCode,
|
||||
subdivisionsKeyByCode,
|
||||
subdivisions,
|
||||
countries,
|
||||
cities
|
||||
}).make()
|
||||
logger.info('creating region table...')
|
||||
await new RegionTable().make()
|
||||
await new RegionsTable({ regions }).make()
|
||||
|
||||
logger.info('updating playlists.md...')
|
||||
const configPath = path.join(README_DIR, 'config.json')
|
||||
const playlists = new Markdown(configPath)
|
||||
const playlists = new Markdown({
|
||||
build: `${ROOT_DIR}/PLAYLISTS.md`,
|
||||
template: `${README_DIR}/template.md`
|
||||
})
|
||||
playlists.compile()
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,8 @@ export class DataLoader {
|
||||
logos,
|
||||
timezones,
|
||||
guides,
|
||||
streams
|
||||
streams,
|
||||
cities
|
||||
] = await Promise.all([
|
||||
this.storage.json('countries.json'),
|
||||
this.storage.json('regions.json'),
|
||||
@@ -70,7 +71,8 @@ export class DataLoader {
|
||||
this.storage.json('logos.json'),
|
||||
this.storage.json('timezones.json'),
|
||||
this.storage.json('guides.json'),
|
||||
this.storage.json('streams.json')
|
||||
this.storage.json('streams.json'),
|
||||
this.storage.json('cities.json')
|
||||
])
|
||||
|
||||
return {
|
||||
@@ -85,7 +87,8 @@ export class DataLoader {
|
||||
logos,
|
||||
timezones,
|
||||
guides,
|
||||
streams
|
||||
streams,
|
||||
cities
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { DataProcessorData } from '../types/dataProcessor'
|
||||
import { DataLoaderData } from '../types/dataLoader'
|
||||
import { Collection } from '@freearhey/core'
|
||||
import {
|
||||
@@ -11,14 +12,16 @@ import {
|
||||
Region,
|
||||
Stream,
|
||||
Guide,
|
||||
City,
|
||||
Feed,
|
||||
Logo
|
||||
} from '../models'
|
||||
|
||||
export class DataProcessor {
|
||||
constructor() {}
|
||||
process(data: DataLoaderData): DataProcessorData {
|
||||
let regions = new Collection(data.regions).map(data => new Region(data))
|
||||
let regionsKeyByCode = regions.keyBy((region: Region) => region.code)
|
||||
|
||||
process(data: DataLoaderData) {
|
||||
const categories = new Collection(data.categories).map(data => new Category(data))
|
||||
const categoriesKeyById = categories.keyBy((category: Category) => category.id)
|
||||
|
||||
@@ -26,25 +29,23 @@ export class DataProcessor {
|
||||
const languagesKeyByCode = languages.keyBy((language: Language) => language.code)
|
||||
|
||||
let subdivisions = new Collection(data.subdivisions).map(data => new Subdivision(data))
|
||||
const subdivisionsKeyByCode = subdivisions.keyBy((subdivision: Subdivision) => subdivision.code)
|
||||
const subdivisionsGroupedByCountryCode = subdivisions.groupBy(
|
||||
let subdivisionsKeyByCode = subdivisions.keyBy((subdivision: Subdivision) => subdivision.code)
|
||||
let subdivisionsGroupedByCountryCode = subdivisions.groupBy(
|
||||
(subdivision: Subdivision) => subdivision.countryCode
|
||||
)
|
||||
|
||||
let regions = new Collection(data.regions).map(data => new Region(data))
|
||||
const regionsKeyByCode = regions.keyBy((region: Region) => region.code)
|
||||
let countries = new Collection(data.countries).map(data => new Country(data))
|
||||
let countriesKeyByCode = countries.keyBy((country: Country) => country.code)
|
||||
|
||||
const countries = new Collection(data.countries).map(data =>
|
||||
new Country(data)
|
||||
const cities = new Collection(data.cities).map(data =>
|
||||
new City(data)
|
||||
.withRegions(regions)
|
||||
.withLanguage(languagesKeyByCode)
|
||||
.withSubdivisions(subdivisionsGroupedByCountryCode)
|
||||
)
|
||||
const countriesKeyByCode = countries.keyBy((country: Country) => country.code)
|
||||
|
||||
subdivisions = subdivisions.map((subdivision: Subdivision) =>
|
||||
subdivision.withCountry(countriesKeyByCode)
|
||||
.withCountry(countriesKeyByCode)
|
||||
.withSubdivision(subdivisionsKeyByCode)
|
||||
)
|
||||
const citiesKeyByCode = cities.keyBy((city: City) => city.code)
|
||||
const citiesGroupedByCountryCode = cities.groupBy((city: City) => city.countryCode)
|
||||
const citiesGroupedBySubdivisionCode = cities.groupBy((city: City) => city.subdivisionCode)
|
||||
|
||||
const timezones = new Collection(data.timezones).map(data =>
|
||||
new Timezone(data).withCountries(countriesKeyByCode)
|
||||
@@ -56,27 +57,12 @@ export class DataProcessor {
|
||||
(blocklistRecord: BlocklistRecord) => blocklistRecord.channelId
|
||||
)
|
||||
|
||||
let channels = new Collection(data.channels).map(data =>
|
||||
new Channel(data)
|
||||
.withCategories(categoriesKeyById)
|
||||
.withCountry(countriesKeyByCode)
|
||||
.withSubdivision(subdivisionsKeyByCode)
|
||||
.withCategories(categoriesKeyById)
|
||||
)
|
||||
let channels = new Collection(data.channels).map(data => new Channel(data))
|
||||
let channelsKeyById = channels.keyBy((channel: Channel) => channel.id)
|
||||
|
||||
const channelsKeyById = channels.keyBy((channel: Channel) => channel.id)
|
||||
|
||||
const feeds = new Collection(data.feeds).map(data =>
|
||||
new Feed(data)
|
||||
.withChannel(channelsKeyById)
|
||||
.withLanguages(languagesKeyByCode)
|
||||
.withTimezones(timezonesKeyById)
|
||||
.withBroadcastCountries(countriesKeyByCode, regionsKeyByCode, subdivisionsKeyByCode)
|
||||
.withBroadcastRegions(regions)
|
||||
.withBroadcastSubdivisions(subdivisionsKeyByCode)
|
||||
)
|
||||
const feedsGroupedByChannelId = feeds.groupBy((feed: Feed) => feed.channelId)
|
||||
const feedsGroupedById = feeds.groupBy((feed: Feed) => feed.id)
|
||||
let feeds = new Collection(data.feeds).map(data => new Feed(data))
|
||||
let feedsGroupedByChannelId = feeds.groupBy((feed: Feed) => feed.channelId)
|
||||
let feedsGroupedById = feeds.groupBy((feed: Feed) => feed.id)
|
||||
|
||||
const logos = new Collection(data.logos).map(data => new Logo(data).withFeed(feedsGroupedById))
|
||||
const logosGroupedByChannelId = logos.groupBy((logo: Logo) => logo.channelId)
|
||||
@@ -90,11 +76,60 @@ export class DataProcessor {
|
||||
const guides = new Collection(data.guides).map(data => new Guide(data))
|
||||
const guidesGroupedByStreamId = guides.groupBy((guide: Guide) => guide.getStreamId())
|
||||
|
||||
regions = regions.map((region: Region) => region.withCountries(countriesKeyByCode))
|
||||
regions = regions.map((region: Region) =>
|
||||
region
|
||||
.withCountries(countriesKeyByCode)
|
||||
.withRegions(regions)
|
||||
.withSubdivisions(subdivisions)
|
||||
.withCities(cities)
|
||||
)
|
||||
regionsKeyByCode = regions.keyBy((region: Region) => region.code)
|
||||
|
||||
countries = countries.map((country: Country) =>
|
||||
country
|
||||
.withCities(citiesGroupedByCountryCode)
|
||||
.withSubdivisions(subdivisionsGroupedByCountryCode)
|
||||
.withRegions(regions)
|
||||
.withLanguage(languagesKeyByCode)
|
||||
)
|
||||
countriesKeyByCode = countries.keyBy((country: Country) => country.code)
|
||||
|
||||
subdivisions = subdivisions.map((subdivision: Subdivision) =>
|
||||
subdivision
|
||||
.withCities(citiesGroupedBySubdivisionCode)
|
||||
.withCountry(countriesKeyByCode)
|
||||
.withRegions(regions)
|
||||
)
|
||||
subdivisionsKeyByCode = subdivisions.keyBy((subdivision: Subdivision) => subdivision.code)
|
||||
subdivisionsGroupedByCountryCode = subdivisions.groupBy(
|
||||
(subdivision: Subdivision) => subdivision.countryCode
|
||||
)
|
||||
|
||||
channels = channels.map((channel: Channel) =>
|
||||
channel.withFeeds(feedsGroupedByChannelId).withLogos(logosGroupedByChannelId)
|
||||
channel
|
||||
.withFeeds(feedsGroupedByChannelId)
|
||||
.withLogos(logosGroupedByChannelId)
|
||||
.withCategories(categoriesKeyById)
|
||||
.withCountry(countriesKeyByCode)
|
||||
.withSubdivision(subdivisionsKeyByCode)
|
||||
.withCategories(categoriesKeyById)
|
||||
)
|
||||
channelsKeyById = channels.keyBy((channel: Channel) => channel.id)
|
||||
|
||||
feeds = feeds.map((feed: Feed) =>
|
||||
feed
|
||||
.withChannel(channelsKeyById)
|
||||
.withLanguages(languagesKeyByCode)
|
||||
.withTimezones(timezonesKeyById)
|
||||
.withBroadcastArea(
|
||||
citiesKeyByCode,
|
||||
subdivisionsKeyByCode,
|
||||
countriesKeyByCode,
|
||||
regionsKeyByCode
|
||||
)
|
||||
)
|
||||
feedsGroupedByChannelId = feeds.groupBy((feed: Feed) => feed.channelId)
|
||||
feedsGroupedById = feeds.groupBy((feed: Feed) => feed.id)
|
||||
|
||||
return {
|
||||
blocklistRecordsGroupedByChannelId,
|
||||
@@ -111,6 +146,7 @@ export class DataProcessor {
|
||||
regionsKeyByCode,
|
||||
blocklistRecords,
|
||||
channelsKeyById,
|
||||
citiesKeyByCode,
|
||||
subdivisions,
|
||||
categories,
|
||||
countries,
|
||||
@@ -119,6 +155,7 @@ export class DataProcessor {
|
||||
channels,
|
||||
regions,
|
||||
streams,
|
||||
cities,
|
||||
guides,
|
||||
feeds,
|
||||
logos
|
||||
|
||||
@@ -1,33 +1,37 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
export class Markdown {
|
||||
filepath: string
|
||||
type MarkdownConfig = {
|
||||
build: string
|
||||
template: string
|
||||
}
|
||||
|
||||
constructor(filepath: string) {
|
||||
this.filepath = filepath
|
||||
export class Markdown {
|
||||
build: string
|
||||
template: string
|
||||
|
||||
constructor(config: MarkdownConfig) {
|
||||
this.build = config.build
|
||||
this.template = config.template
|
||||
}
|
||||
|
||||
compile() {
|
||||
const config = JSON.parse(fs.readFileSync(this.filepath, 'utf8'))
|
||||
const workingDir = process.cwd()
|
||||
|
||||
config.files.forEach((templateFile: string) => {
|
||||
const templatePath = path.resolve(workingDir, templateFile)
|
||||
const content = fs.readFileSync(templatePath, 'utf8')
|
||||
const processedContent = this.processIncludes(content, workingDir)
|
||||
|
||||
if (config.build) {
|
||||
const outputPath = path.resolve(workingDir, config.build)
|
||||
fs.writeFileSync(outputPath, processedContent, 'utf8')
|
||||
}
|
||||
})
|
||||
const workingDir = process.cwd()
|
||||
|
||||
const templatePath = path.resolve(workingDir, this.template)
|
||||
const template = fs.readFileSync(templatePath, 'utf8')
|
||||
const processedContent = this.processIncludes(template, workingDir)
|
||||
|
||||
if (this.build) {
|
||||
const outputPath = path.resolve(workingDir, this.build)
|
||||
fs.writeFileSync(outputPath, processedContent, 'utf8')
|
||||
}
|
||||
}
|
||||
|
||||
private processIncludes(content: string, baseDir: string): string {
|
||||
private processIncludes(template: string, baseDir: string): string {
|
||||
const includeRegex = /#include\s+"([^"]+)"/g
|
||||
|
||||
return content.replace(includeRegex, (match, includePath) => {
|
||||
|
||||
return template.replace(includeRegex, (match, includePath) => {
|
||||
try {
|
||||
const fullPath = path.resolve(baseDir, includePath)
|
||||
const includeContent = fs.readFileSync(fullPath, 'utf8')
|
||||
|
||||
43
scripts/generators/citiesGenerator.ts
Normal file
43
scripts/generators/citiesGenerator.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { City, Stream, Playlist } from '../models'
|
||||
import { Collection, Storage, File } from '@freearhey/core'
|
||||
import { PUBLIC_DIR, EOL } from '../constants'
|
||||
import { Generator } from './generator'
|
||||
|
||||
type CitiesGeneratorProps = {
|
||||
streams: Collection
|
||||
cities: Collection
|
||||
logFile: File
|
||||
}
|
||||
|
||||
export class CitiesGenerator implements Generator {
|
||||
streams: Collection
|
||||
cities: Collection
|
||||
storage: Storage
|
||||
logFile: File
|
||||
|
||||
constructor({ streams, cities, logFile }: CitiesGeneratorProps) {
|
||||
this.streams = streams.clone()
|
||||
this.cities = cities
|
||||
this.storage = new Storage(PUBLIC_DIR)
|
||||
this.logFile = logFile
|
||||
}
|
||||
|
||||
async generate(): Promise<void> {
|
||||
const streams = this.streams
|
||||
.orderBy((stream: Stream) => stream.getTitle())
|
||||
.filter((stream: Stream) => stream.isSFW())
|
||||
|
||||
this.cities.forEach(async (city: City) => {
|
||||
const cityStreams = streams.filter((stream: Stream) => stream.isBroadcastInCity(city))
|
||||
|
||||
if (cityStreams.isEmpty()) return
|
||||
|
||||
const playlist = new Playlist(cityStreams, { public: true })
|
||||
const filepath = `cities/${city.code.toLowerCase()}.m3u`
|
||||
await this.storage.save(filepath, playlist.toString())
|
||||
this.logFile.append(
|
||||
JSON.stringify({ type: 'city', filepath, count: playlist.streams.count() }) + EOL
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,18 @@ export class CountriesGenerator implements Generator {
|
||||
)
|
||||
})
|
||||
|
||||
const internationalStreams = streams.filter((stream: Stream) => stream.isInternational())
|
||||
const internationalPlaylist = new Playlist(internationalStreams, { public: true })
|
||||
const internationalFilepath = 'countries/int.m3u'
|
||||
await this.storage.save(internationalFilepath, internationalPlaylist.toString())
|
||||
this.logFile.append(
|
||||
JSON.stringify({
|
||||
type: 'country',
|
||||
filepath: internationalFilepath,
|
||||
count: internationalPlaylist.streams.count()
|
||||
}) + EOL
|
||||
)
|
||||
|
||||
const undefinedStreams = streams.filter((stream: Stream) => !stream.hasBroadcastArea())
|
||||
const undefinedPlaylist = new Playlist(undefinedStreams, { public: true })
|
||||
const undefinedFilepath = 'countries/undefined.m3u'
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
export * from './categoriesGenerator'
|
||||
export * from './citiesGenerator'
|
||||
export * from './countriesGenerator'
|
||||
export * from './indexCategoryGenerator'
|
||||
export * from './indexCountryGenerator'
|
||||
export * from './indexGenerator'
|
||||
export * from './indexLanguageGenerator'
|
||||
export * from './indexNsfwGenerator'
|
||||
export * from './indexRegionGenerator'
|
||||
export * from './languagesGenerator'
|
||||
export * from './rawGenerator'
|
||||
export * from './regionsGenerator'
|
||||
|
||||
@@ -33,17 +33,17 @@ export class IndexCountryGenerator implements Generator {
|
||||
return
|
||||
}
|
||||
|
||||
if (stream.isInternational()) {
|
||||
const streamClone = stream.clone()
|
||||
streamClone.groupTitle = 'International'
|
||||
groupedStreams.add(streamClone)
|
||||
}
|
||||
|
||||
stream.getBroadcastCountries().forEach((country: Country) => {
|
||||
const streamClone = stream.clone()
|
||||
streamClone.groupTitle = country.name
|
||||
groupedStreams.add(streamClone)
|
||||
})
|
||||
|
||||
if (stream.isInternational()) {
|
||||
const streamClone = stream.clone()
|
||||
streamClone.groupTitle = 'International'
|
||||
groupedStreams.add(streamClone)
|
||||
}
|
||||
})
|
||||
|
||||
groupedStreams = groupedStreams.orderBy((stream: Stream) => {
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
import { Collection, Storage, File } from '@freearhey/core'
|
||||
import { Stream, Playlist, Region } from '../models'
|
||||
import { PUBLIC_DIR, EOL } from '../constants'
|
||||
import { Generator } from './generator'
|
||||
|
||||
type IndexRegionGeneratorProps = {
|
||||
streams: Collection
|
||||
regions: Collection
|
||||
logFile: File
|
||||
}
|
||||
|
||||
export class IndexRegionGenerator implements Generator {
|
||||
streams: Collection
|
||||
regions: Collection
|
||||
storage: Storage
|
||||
logFile: File
|
||||
|
||||
constructor({ streams, regions, logFile }: IndexRegionGeneratorProps) {
|
||||
this.streams = streams.clone()
|
||||
this.regions = regions
|
||||
this.storage = new Storage(PUBLIC_DIR)
|
||||
this.logFile = logFile
|
||||
}
|
||||
|
||||
async generate(): Promise<void> {
|
||||
let groupedStreams = new Collection()
|
||||
this.streams
|
||||
.orderBy((stream: Stream) => stream.getTitle())
|
||||
.filter((stream: Stream) => stream.isSFW())
|
||||
.forEach((stream: Stream) => {
|
||||
if (stream.isInternational()) {
|
||||
const streamClone = stream.clone()
|
||||
streamClone.groupTitle = 'International'
|
||||
groupedStreams.push(streamClone)
|
||||
return
|
||||
}
|
||||
|
||||
if (!stream.hasBroadcastArea()) {
|
||||
const streamClone = stream.clone()
|
||||
streamClone.groupTitle = 'Undefined'
|
||||
groupedStreams.push(streamClone)
|
||||
return
|
||||
}
|
||||
|
||||
stream.getBroadcastRegions().forEach((region: Region) => {
|
||||
const streamClone = stream.clone()
|
||||
streamClone.groupTitle = region.name
|
||||
groupedStreams.push(streamClone)
|
||||
})
|
||||
})
|
||||
|
||||
groupedStreams = groupedStreams.orderBy((stream: Stream) => {
|
||||
if (stream.groupTitle === 'International') return 'ZZ'
|
||||
if (stream.groupTitle === 'Undefined') return 'ZZZ'
|
||||
return stream.groupTitle
|
||||
})
|
||||
|
||||
const playlist = new Playlist(groupedStreams, { public: true })
|
||||
const filepath = 'index.region.m3u'
|
||||
await this.storage.save(filepath, playlist.toString())
|
||||
this.logFile.append(
|
||||
JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -28,8 +28,6 @@ export class RegionsGenerator implements Generator {
|
||||
.filter((stream: Stream) => stream.isSFW())
|
||||
|
||||
this.regions.forEach(async (region: Region) => {
|
||||
if (region.isWorldwide()) return
|
||||
|
||||
const regionStreams = streams.filter((stream: Stream) => stream.isBroadcastInRegion(region))
|
||||
|
||||
const playlist = new Playlist(regionStreams, { public: true })
|
||||
@@ -39,25 +37,5 @@ export class RegionsGenerator implements Generator {
|
||||
JSON.stringify({ type: 'region', filepath, count: playlist.streams.count() }) + EOL
|
||||
)
|
||||
})
|
||||
|
||||
const internationalStreams = streams.filter((stream: Stream) => stream.isInternational())
|
||||
const internationalPlaylist = new Playlist(internationalStreams, { public: true })
|
||||
const internationalFilepath = 'regions/int.m3u'
|
||||
await this.storage.save(internationalFilepath, internationalPlaylist.toString())
|
||||
this.logFile.append(
|
||||
JSON.stringify({
|
||||
type: 'region',
|
||||
filepath: internationalFilepath,
|
||||
count: internationalPlaylist.streams.count()
|
||||
}) + EOL
|
||||
)
|
||||
|
||||
const undefinedStreams = streams.filter((stream: Stream) => !stream.hasBroadcastArea())
|
||||
const playlist = new Playlist(undefinedStreams, { public: true })
|
||||
const filepath = 'regions/undefined.m3u'
|
||||
await this.storage.save(filepath, playlist.toString())
|
||||
this.logFile.append(
|
||||
JSON.stringify({ type: 'region', filepath, count: playlist.streams.count() }) + EOL
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,103 @@
|
||||
type BroadcastAreaProps = {
|
||||
code: string
|
||||
}
|
||||
import { Collection, Dictionary } from '@freearhey/core'
|
||||
import { City, Subdivision, Region, Country } from './'
|
||||
|
||||
export class BroadcastArea {
|
||||
code: string
|
||||
codes: Collection
|
||||
citiesIncluded: Collection
|
||||
subdivisionsIncluded: Collection
|
||||
countriesIncluded: Collection
|
||||
regionsIncluded: Collection
|
||||
|
||||
constructor(data: BroadcastAreaProps) {
|
||||
this.code = data.code
|
||||
constructor(codes: Collection) {
|
||||
this.codes = codes
|
||||
}
|
||||
|
||||
withLocations(
|
||||
citiesKeyByCode: Dictionary,
|
||||
subdivisionsKeyByCode: Dictionary,
|
||||
countriesKeyByCode: Dictionary,
|
||||
regionsKeyByCode: Dictionary
|
||||
): this {
|
||||
let citiesIncluded = new Collection()
|
||||
let subdivisionsIncluded = new Collection()
|
||||
let countriesIncluded = new Collection()
|
||||
let regionsIncluded = new Collection()
|
||||
|
||||
this.codes.forEach((value: string) => {
|
||||
const [type, code] = value.split('/')
|
||||
|
||||
switch (type) {
|
||||
case 'ct': {
|
||||
const city: City = citiesKeyByCode.get(code)
|
||||
if (!city) return
|
||||
citiesIncluded.add(city)
|
||||
regionsIncluded = regionsIncluded.concat(city.getRegions())
|
||||
break
|
||||
}
|
||||
case 's': {
|
||||
const subdivision: Subdivision = subdivisionsKeyByCode.get(code)
|
||||
if (!subdivision) return
|
||||
subdivisionsIncluded.add(subdivision)
|
||||
regionsIncluded = regionsIncluded.concat(subdivision.getRegions())
|
||||
break
|
||||
}
|
||||
case 'c': {
|
||||
const country: Country = countriesKeyByCode.get(code)
|
||||
if (!country) return
|
||||
countriesIncluded.add(country)
|
||||
regionsIncluded = regionsIncluded.concat(country.getRegions())
|
||||
break
|
||||
}
|
||||
case 'r': {
|
||||
const region: Region = regionsKeyByCode.get(code)
|
||||
if (!region) return
|
||||
regionsIncluded = regionsIncluded.concat(region.getRegions())
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
this.citiesIncluded = citiesIncluded.uniqBy((city: City) => city.code)
|
||||
this.subdivisionsIncluded = subdivisionsIncluded.uniqBy(
|
||||
(subdivision: Subdivision) => subdivision.code
|
||||
)
|
||||
this.countriesIncluded = countriesIncluded.uniqBy((country: Country) => country.code)
|
||||
this.regionsIncluded = regionsIncluded.uniqBy((region: Region) => region.code)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
getCountries(): Collection {
|
||||
return this.countriesIncluded || new Collection()
|
||||
}
|
||||
|
||||
getSubdivisions(): Collection {
|
||||
return this.subdivisionsIncluded || new Collection()
|
||||
}
|
||||
|
||||
getCities(): Collection {
|
||||
return this.citiesIncluded || new Collection()
|
||||
}
|
||||
|
||||
getRegions(): Collection {
|
||||
return this.regionsIncluded || new Collection()
|
||||
}
|
||||
|
||||
includesCountry(country: Country): boolean {
|
||||
return this.getCountries().includes((_country: Country) => _country.code === country.code)
|
||||
}
|
||||
|
||||
includesSubdivision(subdivision: Subdivision): boolean {
|
||||
return this.getSubdivisions().includes(
|
||||
(_subdivision: Subdivision) => _subdivision.code === subdivision.code
|
||||
)
|
||||
}
|
||||
|
||||
includesRegion(region: Region): boolean {
|
||||
return this.getRegions().includes((_region: Region) => _region.code === region.code)
|
||||
}
|
||||
|
||||
includesCity(city: City): boolean {
|
||||
return this.getCities().includes((_city: City) => _city.code === city.code)
|
||||
}
|
||||
}
|
||||
|
||||
78
scripts/models/city.ts
Normal file
78
scripts/models/city.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { Collection, Dictionary } from '@freearhey/core'
|
||||
import { Country, Region, Subdivision } from '.'
|
||||
import type { CityData, CitySerializedData } from '../types/city'
|
||||
|
||||
export class City {
|
||||
code: string
|
||||
name: string
|
||||
countryCode: string
|
||||
country?: Country
|
||||
subdivisionCode?: string
|
||||
subdivision?: Subdivision
|
||||
wikidataId: string
|
||||
regions?: Collection
|
||||
|
||||
constructor(data?: CityData) {
|
||||
if (!data) return
|
||||
|
||||
this.code = data.code
|
||||
this.name = data.name
|
||||
this.countryCode = data.country
|
||||
this.subdivisionCode = data.subdivision || undefined
|
||||
this.wikidataId = data.wikidata_id
|
||||
}
|
||||
|
||||
withCountry(countriesKeyByCode: Dictionary): this {
|
||||
this.country = countriesKeyByCode.get(this.countryCode)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withSubdivision(subdivisionsKeyByCode: Dictionary): this {
|
||||
if (!this.subdivisionCode) return this
|
||||
|
||||
this.subdivision = subdivisionsKeyByCode.get(this.subdivisionCode)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withRegions(regions: Collection): this {
|
||||
this.regions = regions.filter((region: Region) =>
|
||||
region.countryCodes.includes(this.countryCode)
|
||||
)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
getRegions(): Collection {
|
||||
if (!this.regions) return new Collection()
|
||||
|
||||
return this.regions
|
||||
}
|
||||
|
||||
serialize(): CitySerializedData {
|
||||
return {
|
||||
code: this.code,
|
||||
name: this.name,
|
||||
countryCode: this.countryCode,
|
||||
country: this.country ? this.country.serialize() : undefined,
|
||||
subdivisionCode: this.subdivisionCode || null,
|
||||
subdivision: this.subdivision ? this.subdivision.serialize() : undefined,
|
||||
wikidataId: this.wikidataId
|
||||
}
|
||||
}
|
||||
|
||||
deserialize(data: CitySerializedData): this {
|
||||
this.code = data.code
|
||||
this.name = data.name
|
||||
this.countryCode = data.countryCode
|
||||
this.country = data.country ? new Country().deserialize(data.country) : undefined
|
||||
this.subdivisionCode = data.subdivisionCode || undefined
|
||||
this.subdivision = data.subdivision
|
||||
? new Subdivision().deserialize(data.subdivision)
|
||||
: undefined
|
||||
this.wikidataId = data.wikidataId
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ export class Country {
|
||||
language?: Language
|
||||
subdivisions?: Collection
|
||||
regions?: Collection
|
||||
cities?: Collection
|
||||
|
||||
constructor(data?: CountryData) {
|
||||
if (!data) return
|
||||
@@ -23,15 +24,19 @@ export class Country {
|
||||
}
|
||||
|
||||
withSubdivisions(subdivisionsGroupedByCountryCode: Dictionary): this {
|
||||
this.subdivisions = subdivisionsGroupedByCountryCode.get(this.code) || new Collection()
|
||||
this.subdivisions = new Collection(subdivisionsGroupedByCountryCode.get(this.code))
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withRegions(regions: Collection): this {
|
||||
this.regions = regions.filter(
|
||||
(region: Region) => region.code !== 'INT' && region.includesCountryCode(this.code)
|
||||
)
|
||||
this.regions = regions.filter((region: Region) => region.includesCountryCode(this.code))
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withCities(citiesGroupedByCountryCode: Dictionary): this {
|
||||
this.cities = new Collection(citiesGroupedByCountryCode.get(this.code))
|
||||
|
||||
return this
|
||||
}
|
||||
@@ -54,6 +59,10 @@ export class Country {
|
||||
return this.subdivisions || new Collection()
|
||||
}
|
||||
|
||||
getCities(): Collection {
|
||||
return this.cities || new Collection()
|
||||
}
|
||||
|
||||
serialize(): CountrySerializedData {
|
||||
return {
|
||||
code: this.code,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Country, Language, Region, Channel, Subdivision } from './index'
|
||||
import { Country, Language, Region, Channel, Subdivision, BroadcastArea, City } from './index'
|
||||
import { Collection, Dictionary } from '@freearhey/core'
|
||||
import type { FeedData } from '../types/feed'
|
||||
|
||||
@@ -9,12 +9,7 @@ export class Feed {
|
||||
name: string
|
||||
isMain: boolean
|
||||
broadcastAreaCodes: Collection
|
||||
broadcastCountryCodes: Collection
|
||||
broadcastCountries?: Collection
|
||||
broadcastRegionCodes: Collection
|
||||
broadcastRegions?: Collection
|
||||
broadcastSubdivisionCodes: Collection
|
||||
broadcastSubdivisions?: Collection
|
||||
broadcastArea?: BroadcastArea
|
||||
languageCodes: Collection
|
||||
languages?: Collection
|
||||
timezoneIds: Collection
|
||||
@@ -32,25 +27,6 @@ export class Feed {
|
||||
this.languageCodes = new Collection(data.languages)
|
||||
this.timezoneIds = new Collection(data.timezones)
|
||||
this.videoFormat = data.video_format
|
||||
this.broadcastCountryCodes = new Collection()
|
||||
this.broadcastRegionCodes = new Collection()
|
||||
this.broadcastSubdivisionCodes = new Collection()
|
||||
|
||||
this.broadcastAreaCodes.forEach((areaCode: string) => {
|
||||
const [type, code] = areaCode.split('/')
|
||||
|
||||
switch (type) {
|
||||
case 'c':
|
||||
this.broadcastCountryCodes.add(code)
|
||||
break
|
||||
case 'r':
|
||||
this.broadcastRegionCodes.add(code)
|
||||
break
|
||||
case 's':
|
||||
this.broadcastSubdivisionCodes.add(code)
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
withChannel(channelsKeyById: Dictionary): this {
|
||||
@@ -93,76 +69,36 @@ export class Feed {
|
||||
return this
|
||||
}
|
||||
|
||||
withBroadcastSubdivisions(subdivisionsKeyByCode: Dictionary): this {
|
||||
this.broadcastSubdivisions = this.broadcastSubdivisionCodes.map((code: string) =>
|
||||
subdivisionsKeyByCode.get(code)
|
||||
)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withBroadcastCountries(
|
||||
withBroadcastArea(
|
||||
citiesKeyByCode: Dictionary,
|
||||
subdivisionsKeyByCode: Dictionary,
|
||||
countriesKeyByCode: Dictionary,
|
||||
regionsKeyByCode: Dictionary,
|
||||
subdivisionsKeyByCode: Dictionary
|
||||
regionsKeyByCode: Dictionary
|
||||
): this {
|
||||
const broadcastCountries = new Collection()
|
||||
|
||||
if (this.isInternational()) {
|
||||
this.broadcastCountries = broadcastCountries
|
||||
return this
|
||||
}
|
||||
|
||||
this.broadcastCountryCodes.forEach((code: string) => {
|
||||
broadcastCountries.add(countriesKeyByCode.get(code))
|
||||
})
|
||||
|
||||
this.broadcastRegionCodes.forEach((code: string) => {
|
||||
const region: Region = regionsKeyByCode.get(code)
|
||||
if (region) {
|
||||
region.countryCodes.forEach((countryCode: string) => {
|
||||
broadcastCountries.add(countriesKeyByCode.get(countryCode))
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.broadcastSubdivisionCodes.forEach((code: string) => {
|
||||
const subdivision: Subdivision = subdivisionsKeyByCode.get(code)
|
||||
if (subdivision) {
|
||||
broadcastCountries.add(countriesKeyByCode.get(subdivision.countryCode))
|
||||
}
|
||||
})
|
||||
|
||||
this.broadcastCountries = broadcastCountries.uniq().filter(Boolean)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withBroadcastRegions(regions: Collection): this {
|
||||
if (!this.broadcastCountries) return this
|
||||
const countriesCodes = this.broadcastCountries.map((country: Country) => country.code)
|
||||
|
||||
this.broadcastRegions = regions.filter((region: Region) => {
|
||||
if (region.code === 'INT') return false
|
||||
const intersected = region.countryCodes.intersects(countriesCodes)
|
||||
return intersected.notEmpty()
|
||||
})
|
||||
this.broadcastArea = new BroadcastArea(this.broadcastAreaCodes).withLocations(
|
||||
citiesKeyByCode,
|
||||
subdivisionsKeyByCode,
|
||||
countriesKeyByCode,
|
||||
regionsKeyByCode
|
||||
)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
hasBroadcastArea(): boolean {
|
||||
return (
|
||||
this.isInternational() || (!!this.broadcastCountries && this.broadcastCountries.notEmpty())
|
||||
)
|
||||
return !!this.broadcastArea
|
||||
}
|
||||
|
||||
getBroadcastCountries(): Collection {
|
||||
return this.broadcastCountries || new Collection()
|
||||
if (!this.broadcastArea) return new Collection()
|
||||
|
||||
return this.broadcastArea.getCountries()
|
||||
}
|
||||
|
||||
getBroadcastRegions(): Collection {
|
||||
return this.broadcastRegions || new Collection()
|
||||
if (!this.broadcastArea) return new Collection()
|
||||
|
||||
return this.broadcastArea.getRegions()
|
||||
}
|
||||
|
||||
getTimezones(): Collection {
|
||||
@@ -184,35 +120,34 @@ export class Feed {
|
||||
)
|
||||
}
|
||||
|
||||
isInternational(): boolean {
|
||||
return this.broadcastAreaCodes.includes('r/INT')
|
||||
isBroadcastInCity(city: City): boolean {
|
||||
if (!this.broadcastArea) return false
|
||||
|
||||
return this.broadcastArea.includesCity(city)
|
||||
}
|
||||
|
||||
isBroadcastInSubdivision(subdivision: Subdivision): boolean {
|
||||
if (this.isInternational()) return false
|
||||
if (this.broadcastSubdivisionCodes.includes(subdivision.code)) return true
|
||||
if (
|
||||
this.broadcastSubdivisionCodes.isEmpty() &&
|
||||
subdivision.country &&
|
||||
this.isBroadcastInCountry(subdivision.country)
|
||||
)
|
||||
return true
|
||||
if (!this.broadcastArea) return false
|
||||
|
||||
return false
|
||||
return this.broadcastArea.includesSubdivision(subdivision)
|
||||
}
|
||||
|
||||
isBroadcastInCountry(country: Country): boolean {
|
||||
if (this.isInternational()) return false
|
||||
if (!this.broadcastArea) return false
|
||||
|
||||
return this.getBroadcastCountries().includes(
|
||||
(_country: Country) => _country.code === country.code
|
||||
)
|
||||
return this.broadcastArea.includesCountry(country)
|
||||
}
|
||||
|
||||
isBroadcastInRegion(region: Region): boolean {
|
||||
if (this.isInternational()) return false
|
||||
if (!this.broadcastArea) return false
|
||||
|
||||
return this.getBroadcastRegions().includes((_region: Region) => _region.code === region.code)
|
||||
return this.broadcastArea.includesRegion(region)
|
||||
}
|
||||
|
||||
isInternational(): boolean {
|
||||
if (!this.broadcastArea) return false
|
||||
|
||||
return this.broadcastArea.codes.join(',').includes('r/')
|
||||
}
|
||||
|
||||
getGuides(): Collection {
|
||||
|
||||
@@ -2,6 +2,7 @@ export * from './blocklistRecord'
|
||||
export * from './broadcastArea'
|
||||
export * from './category'
|
||||
export * from './channel'
|
||||
export * from './city'
|
||||
export * from './country'
|
||||
export * from './feed'
|
||||
export * from './guide'
|
||||
|
||||
@@ -1,15 +1,18 @@
|
||||
import { Collection, Dictionary } from '@freearhey/core'
|
||||
import { Country, Subdivision } from '.'
|
||||
import { City, Country, Subdivision } from '.'
|
||||
import type { RegionData, RegionSerializedData } from '../types/region'
|
||||
import { CountrySerializedData } from '../types/country'
|
||||
import { SubdivisionSerializedData } from '../types/subdivision'
|
||||
import { CitySerializedData } from '../types/city'
|
||||
|
||||
export class Region {
|
||||
code: string
|
||||
name: string
|
||||
countryCodes: Collection
|
||||
countries: Collection = new Collection()
|
||||
subdivisions: Collection = new Collection()
|
||||
countries?: Collection
|
||||
subdivisions?: Collection
|
||||
cities?: Collection
|
||||
regions?: Collection
|
||||
|
||||
constructor(data?: RegionData) {
|
||||
if (!data) return
|
||||
@@ -33,20 +36,50 @@ export class Region {
|
||||
return this
|
||||
}
|
||||
|
||||
withCities(cities: Collection): this {
|
||||
this.cities = cities.filter((city: City) => this.countryCodes.indexOf(city.countryCode) > -1)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withRegions(regions: Collection): this {
|
||||
this.regions = regions.filter(
|
||||
(region: Region) => !region.countryCodes.intersects(this.countryCodes).isEmpty()
|
||||
)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
getSubdivisions(): Collection {
|
||||
if (!this.subdivisions) return new Collection()
|
||||
|
||||
return this.subdivisions
|
||||
}
|
||||
|
||||
getCountries(): Collection {
|
||||
if (!this.countries) return new Collection()
|
||||
|
||||
return this.countries
|
||||
}
|
||||
|
||||
getCities(): Collection {
|
||||
if (!this.cities) return new Collection()
|
||||
|
||||
return this.cities
|
||||
}
|
||||
|
||||
getRegions(): Collection {
|
||||
if (!this.regions) return new Collection()
|
||||
|
||||
return this.regions
|
||||
}
|
||||
|
||||
includesCountryCode(code: string): boolean {
|
||||
return this.countryCodes.includes((countryCode: string) => countryCode === code)
|
||||
}
|
||||
|
||||
isWorldwide(): boolean {
|
||||
return this.code === 'INT'
|
||||
return ['INT', 'WW'].includes(this.code)
|
||||
}
|
||||
|
||||
serialize(): RegionSerializedData {
|
||||
@@ -54,9 +87,14 @@ export class Region {
|
||||
code: this.code,
|
||||
name: this.name,
|
||||
countryCodes: this.countryCodes.all(),
|
||||
countries: this.countries.map((country: Country) => country.serialize()).all(),
|
||||
subdivisions: this.subdivisions
|
||||
countries: this.getCountries()
|
||||
.map((country: Country) => country.serialize())
|
||||
.all(),
|
||||
subdivisions: this.getSubdivisions()
|
||||
.map((subdivision: Subdivision) => subdivision.serialize())
|
||||
.all(),
|
||||
cities: this.getCities()
|
||||
.map((city: City) => city.serialize())
|
||||
.all()
|
||||
}
|
||||
}
|
||||
@@ -71,6 +109,9 @@ export class Region {
|
||||
this.subdivisions = new Collection(data.subdivisions).map((data: SubdivisionSerializedData) =>
|
||||
new Subdivision().deserialize(data)
|
||||
)
|
||||
this.cities = new Collection(data.cities).map((data: CitySerializedData) =>
|
||||
new City().deserialize(data)
|
||||
)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
import { Feed, Channel, Category, Region, Subdivision, Country, Language, Logo } from './index'
|
||||
import {
|
||||
Feed,
|
||||
Channel,
|
||||
Category,
|
||||
Region,
|
||||
Subdivision,
|
||||
Country,
|
||||
Language,
|
||||
Logo,
|
||||
City
|
||||
} from './index'
|
||||
import { URL, Collection, Dictionary } from '@freearhey/core'
|
||||
import type { StreamData } from '../types/stream'
|
||||
import parser from 'iptv-playlist-parser'
|
||||
@@ -330,6 +340,10 @@ export class Stream {
|
||||
return this.feed ? this.feed.broadcastAreaCodes : new Collection()
|
||||
}
|
||||
|
||||
isBroadcastInCity(city: City): boolean {
|
||||
return this.feed ? this.feed.isBroadcastInCity(city) : false
|
||||
}
|
||||
|
||||
isBroadcastInSubdivision(subdivision: Subdivision): boolean {
|
||||
return this.feed ? this.feed.isBroadcastInSubdivision(subdivision) : false
|
||||
}
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
import { SubdivisionData, SubdivisionSerializedData } from '../types/subdivision'
|
||||
import { Dictionary } from '@freearhey/core'
|
||||
import { Country } from '.'
|
||||
import { Dictionary, Collection } from '@freearhey/core'
|
||||
import { Country, Region } from '.'
|
||||
|
||||
export class Subdivision {
|
||||
code: string
|
||||
name: string
|
||||
countryCode: string
|
||||
country?: Country
|
||||
parentCode?: string
|
||||
regions?: Collection
|
||||
cities?: Collection
|
||||
|
||||
constructor(data?: SubdivisionData) {
|
||||
if (!data) return
|
||||
@@ -14,6 +17,7 @@ export class Subdivision {
|
||||
this.code = data.code
|
||||
this.name = data.name
|
||||
this.countryCode = data.country
|
||||
this.parentCode = data.parent || undefined
|
||||
}
|
||||
|
||||
withCountry(countriesKeyByCode: Dictionary): this {
|
||||
@@ -22,12 +26,39 @@ export class Subdivision {
|
||||
return this
|
||||
}
|
||||
|
||||
withRegions(regions: Collection): this {
|
||||
this.regions = regions.filter((region: Region) =>
|
||||
region.countryCodes.includes(this.countryCode)
|
||||
)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
withCities(citiesGroupedBySubdivisionCode: Dictionary): this {
|
||||
this.cities = new Collection(citiesGroupedBySubdivisionCode.get(this.code))
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
getRegions(): Collection {
|
||||
if (!this.regions) return new Collection()
|
||||
|
||||
return this.regions
|
||||
}
|
||||
|
||||
getCities(): Collection {
|
||||
if (!this.cities) return new Collection()
|
||||
|
||||
return this.cities
|
||||
}
|
||||
|
||||
serialize(): SubdivisionSerializedData {
|
||||
return {
|
||||
code: this.code,
|
||||
name: this.name,
|
||||
countryCode: this.code,
|
||||
country: this.country ? this.country.serialize() : undefined
|
||||
countryCode: this.countryCode,
|
||||
country: this.country ? this.country.serialize() : undefined,
|
||||
parentCode: this.parentCode || null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +67,7 @@ export class Subdivision {
|
||||
this.name = data.name
|
||||
this.countryCode = data.countryCode
|
||||
this.country = data.country ? new Country().deserialize(data.country) : undefined
|
||||
this.parentCode = data.parentCode || undefined
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -1,32 +1,35 @@
|
||||
import { Storage, Collection, File } from '@freearhey/core'
|
||||
import { Storage, Collection, File, Dictionary } from '@freearhey/core'
|
||||
import { HTMLTable, LogParser, LogItem } from '../core'
|
||||
import { LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Category } from '../models'
|
||||
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Table } from './table'
|
||||
|
||||
export class CategoryTable implements Table {
|
||||
constructor() {}
|
||||
type CategoriesTableProps = {
|
||||
categoriesKeyById: Dictionary
|
||||
}
|
||||
|
||||
export class CategoriesTable implements Table {
|
||||
categoriesKeyById: Dictionary
|
||||
|
||||
constructor({ categoriesKeyById }: CategoriesTableProps) {
|
||||
this.categoriesKeyById = categoriesKeyById
|
||||
}
|
||||
|
||||
async make() {
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
const categoriesContent = await dataStorage.json('categories.json')
|
||||
const categories = new Collection(categoriesContent).map(data => new Category(data))
|
||||
const categoriesGroupedById = categories.keyBy((category: Category) => category.id)
|
||||
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
|
||||
let data = new Collection()
|
||||
let items = new Collection()
|
||||
parser
|
||||
.parse(generatorsLog)
|
||||
.filter((logItem: LogItem) => logItem.type === 'category')
|
||||
.forEach((logItem: LogItem) => {
|
||||
const file = new File(logItem.filepath)
|
||||
const categoryId = file.name()
|
||||
const category: Category = categoriesGroupedById.get(categoryId)
|
||||
const category: Category = this.categoriesKeyById.get(categoryId)
|
||||
|
||||
data.add([
|
||||
items.add([
|
||||
category ? category.name : 'ZZ',
|
||||
category ? category.name : 'Undefined',
|
||||
logItem.count,
|
||||
@@ -34,14 +37,14 @@ export class CategoryTable implements Table {
|
||||
])
|
||||
})
|
||||
|
||||
data = data
|
||||
items = items
|
||||
.orderBy(item => item[0])
|
||||
.map(item => {
|
||||
item.shift()
|
||||
return item
|
||||
})
|
||||
|
||||
const table = new HTMLTable(data.all(), [
|
||||
const table = new HTMLTable(items.all(), [
|
||||
{ name: 'Category' },
|
||||
{ name: 'Channels', align: 'right' },
|
||||
{ name: 'Playlist', nowrap: true }
|
||||
189
scripts/tables/countriesTable.ts
Normal file
189
scripts/tables/countriesTable.ts
Normal file
@@ -0,0 +1,189 @@
|
||||
import { Storage, Collection, Dictionary } from '@freearhey/core'
|
||||
import { City, Country, Subdivision } from '../models'
|
||||
import { LOGS_DIR, README_DIR } from '../constants'
|
||||
import { LogParser, LogItem } from '../core'
|
||||
import { Table } from './table'
|
||||
|
||||
type CountriesTableProps = {
|
||||
countriesKeyByCode: Dictionary
|
||||
subdivisionsKeyByCode: Dictionary
|
||||
countries: Collection
|
||||
subdivisions: Collection
|
||||
cities: Collection
|
||||
}
|
||||
|
||||
export class CountriesTable implements Table {
|
||||
countriesKeyByCode: Dictionary
|
||||
subdivisionsKeyByCode: Dictionary
|
||||
countries: Collection
|
||||
subdivisions: Collection
|
||||
cities: Collection
|
||||
|
||||
constructor({
|
||||
countriesKeyByCode,
|
||||
subdivisionsKeyByCode,
|
||||
countries,
|
||||
subdivisions,
|
||||
cities
|
||||
}: CountriesTableProps) {
|
||||
this.countriesKeyByCode = countriesKeyByCode
|
||||
this.subdivisionsKeyByCode = subdivisionsKeyByCode
|
||||
this.countries = countries
|
||||
this.subdivisions = subdivisions
|
||||
this.cities = cities
|
||||
}
|
||||
|
||||
async make() {
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
const parsed = parser.parse(generatorsLog)
|
||||
const logCountries = parsed.filter((logItem: LogItem) => logItem.type === 'country')
|
||||
const logSubdivisions = parsed.filter((logItem: LogItem) => logItem.type === 'subdivision')
|
||||
const logCities = parsed.filter((logItem: LogItem) => logItem.type === 'city')
|
||||
|
||||
let items = new Collection()
|
||||
this.countries.forEach((country: Country) => {
|
||||
const countriesLogItem = logCountries.find(
|
||||
(logItem: LogItem) => logItem.filepath === `countries/${country.code.toLowerCase()}.m3u`
|
||||
)
|
||||
|
||||
let countryItem = {
|
||||
index: country.name,
|
||||
count: 0,
|
||||
link: `https://iptv-org.github.io/iptv/countries/${country.code.toLowerCase()}.m3u`,
|
||||
name: `${country.flag} ${country.name}`,
|
||||
children: new Collection()
|
||||
}
|
||||
|
||||
if (countriesLogItem) {
|
||||
countryItem.count = countriesLogItem.count
|
||||
}
|
||||
|
||||
const countrySubdivisions = this.subdivisions.filter(
|
||||
(subdivision: Subdivision) => subdivision.countryCode === country.code
|
||||
)
|
||||
const countryCities = this.cities.filter((city: City) => city.countryCode === country.code)
|
||||
if (countrySubdivisions.notEmpty()) {
|
||||
this.subdivisions.forEach((subdivision: Subdivision) => {
|
||||
if (subdivision.countryCode !== country.code) return
|
||||
const subdivisionCities = countryCities.filter(
|
||||
(city: City) =>
|
||||
(city.subdivisionCode && city.subdivisionCode === subdivision.code) ||
|
||||
city.countryCode === subdivision.countryCode
|
||||
)
|
||||
const subdivisionsLogItem = logSubdivisions.find(
|
||||
(logItem: LogItem) =>
|
||||
logItem.filepath === `subdivisions/${subdivision.code.toLowerCase()}.m3u`
|
||||
)
|
||||
|
||||
let subdivisionItem = {
|
||||
index: subdivision.name,
|
||||
name: subdivision.name,
|
||||
count: 0,
|
||||
link: `https://iptv-org.github.io/iptv/subdivisions/${subdivision.code.toLowerCase()}.m3u`,
|
||||
children: new Collection()
|
||||
}
|
||||
|
||||
if (subdivisionsLogItem) {
|
||||
subdivisionItem.count = subdivisionsLogItem.count
|
||||
}
|
||||
|
||||
subdivisionCities.forEach((city: City) => {
|
||||
if (city.countryCode !== country.code || city.subdivisionCode !== subdivision.code)
|
||||
return
|
||||
const citiesLogItem = logCities.find(
|
||||
(logItem: LogItem) => logItem.filepath === `cities/${city.code.toLowerCase()}.m3u`
|
||||
)
|
||||
|
||||
if (!citiesLogItem) return
|
||||
|
||||
subdivisionItem.children.add({
|
||||
index: city.name,
|
||||
name: city.name,
|
||||
count: citiesLogItem.count,
|
||||
link: `https://iptv-org.github.io/iptv/${citiesLogItem.filepath}`
|
||||
})
|
||||
})
|
||||
|
||||
if (subdivisionItem.count > 0 || subdivisionItem.children.notEmpty()) {
|
||||
countryItem.children.add(subdivisionItem)
|
||||
}
|
||||
})
|
||||
} else if (countryCities.notEmpty()) {
|
||||
countryCities.forEach((city: City) => {
|
||||
const citiesLogItem = logCities.find(
|
||||
(logItem: LogItem) => logItem.filepath === `cities/${city.code.toLowerCase()}.m3u`
|
||||
)
|
||||
|
||||
if (!citiesLogItem) return
|
||||
|
||||
countryItem.children.add({
|
||||
index: city.name,
|
||||
name: city.name,
|
||||
count: citiesLogItem.count,
|
||||
link: `https://iptv-org.github.io/iptv/${citiesLogItem.filepath}`,
|
||||
children: new Collection()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (countryItem.count > 0 || countryItem.children.notEmpty()) {
|
||||
items.add(countryItem)
|
||||
}
|
||||
})
|
||||
|
||||
const internationalLogItem = logCountries.find(
|
||||
(logItem: LogItem) => logItem.filepath === 'countries/int.m3u'
|
||||
)
|
||||
|
||||
if (internationalLogItem) {
|
||||
items.push({
|
||||
index: 'ZZ',
|
||||
name: '🌐 International',
|
||||
count: internationalLogItem.count,
|
||||
link: `https://iptv-org.github.io/iptv/${internationalLogItem.filepath}`,
|
||||
children: new Collection()
|
||||
})
|
||||
}
|
||||
|
||||
const undefinedLogItem = logCountries.find(
|
||||
(logItem: LogItem) => logItem.filepath === `countries/undefined.m3u`
|
||||
)
|
||||
|
||||
if (undefinedLogItem) {
|
||||
items.push({
|
||||
index: 'ZZZ',
|
||||
name: 'Undefined',
|
||||
count: undefinedLogItem.count,
|
||||
link: `https://iptv-org.github.io/iptv/${undefinedLogItem.filepath}`,
|
||||
children: new Collection()
|
||||
})
|
||||
}
|
||||
|
||||
items = items.orderBy(item => item.index)
|
||||
|
||||
const output = items
|
||||
.map(item => {
|
||||
let row = `- ${item.name} <code>${item.link}</code>`
|
||||
|
||||
item.children
|
||||
.orderBy(item => item.index)
|
||||
.forEach(item => {
|
||||
row += `\r\n\ - ${item.name} <code>${item.link}</code>`
|
||||
|
||||
item.children
|
||||
.orderBy(item => item.index)
|
||||
.forEach(item => {
|
||||
row += `\r\n\ - ${item.name} <code>${item.link}</code>`
|
||||
})
|
||||
})
|
||||
|
||||
return row
|
||||
})
|
||||
.join('\r\n')
|
||||
|
||||
const readmeStorage = new Storage(README_DIR)
|
||||
await readmeStorage.save('_countries.md', output)
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
import { Storage, Collection, File } from '@freearhey/core'
|
||||
import { HTMLTable, LogParser, LogItem } from '../core'
|
||||
import { Country } from '../models'
|
||||
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Table } from './table'
|
||||
|
||||
export class CountryTable implements Table {
|
||||
constructor() {}
|
||||
|
||||
async make() {
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
|
||||
const countriesContent = await dataStorage.json('countries.json')
|
||||
const countries = new Collection(countriesContent).map(data => new Country(data))
|
||||
const countriesGroupedByCode = countries.keyBy((country: Country) => country.code)
|
||||
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
const parsed = parser.parse(generatorsLog)
|
||||
|
||||
let data = new Collection()
|
||||
|
||||
parsed
|
||||
.filter((logItem: LogItem) => logItem.type === 'country')
|
||||
.forEach((logItem: LogItem) => {
|
||||
const file = new File(logItem.filepath)
|
||||
const code = file.name().toUpperCase()
|
||||
const [countryCode] = code.split('-') || ['', '']
|
||||
const country = countriesGroupedByCode.get(countryCode)
|
||||
|
||||
if (country) {
|
||||
data.add([
|
||||
country.name,
|
||||
`${country.flag} ${country.name}`,
|
||||
logItem.count,
|
||||
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
|
||||
])
|
||||
} else {
|
||||
data.add([
|
||||
'ZZ',
|
||||
'Undefined',
|
||||
logItem.count,
|
||||
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
|
||||
])
|
||||
}
|
||||
})
|
||||
|
||||
data = data
|
||||
.orderBy(item => item[0])
|
||||
.map(item => {
|
||||
item.shift()
|
||||
return item
|
||||
})
|
||||
|
||||
const table = new HTMLTable(data.all(), [
|
||||
{ name: 'Country' },
|
||||
{ name: 'Channels', align: 'right' },
|
||||
{ name: 'Playlist', nowrap: true }
|
||||
])
|
||||
|
||||
const readmeStorage = new Storage(README_DIR)
|
||||
await readmeStorage.save('_countries.md', table.toString())
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
export * from './categoryTable'
|
||||
export * from './countryTable'
|
||||
export * from './languageTable'
|
||||
export * from './regionTable'
|
||||
export * from './subdivisionTable'
|
||||
export * from './categoriesTable'
|
||||
export * from './countriesTable'
|
||||
export * from './languagesTable'
|
||||
export * from './regionsTable'
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import { Storage, Collection, File } from '@freearhey/core'
|
||||
import { Storage, Collection, File, Dictionary } from '@freearhey/core'
|
||||
import { HTMLTable, LogParser, LogItem } from '../core'
|
||||
import { LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Language } from '../models'
|
||||
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Table } from './table'
|
||||
|
||||
export class LanguageTable implements Table {
|
||||
constructor() {}
|
||||
type LanguagesTableProps = {
|
||||
languagesKeyByCode: Dictionary
|
||||
}
|
||||
|
||||
export class LanguagesTable implements Table {
|
||||
languagesKeyByCode: Dictionary
|
||||
|
||||
constructor({ languagesKeyByCode }: LanguagesTableProps) {
|
||||
this.languagesKeyByCode = languagesKeyByCode
|
||||
}
|
||||
|
||||
async make() {
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
const languagesContent = await dataStorage.json('languages.json')
|
||||
const languages = new Collection(languagesContent).map(data => new Language(data))
|
||||
const languagesGroupedByCode = languages.keyBy((language: Language) => language.code)
|
||||
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
@@ -24,7 +27,7 @@ export class LanguageTable implements Table {
|
||||
.forEach((logItem: LogItem) => {
|
||||
const file = new File(logItem.filepath)
|
||||
const languageCode = file.name()
|
||||
const language: Language = languagesGroupedByCode.get(languageCode)
|
||||
const language: Language = this.languagesKeyByCode.get(languageCode)
|
||||
|
||||
data.add([
|
||||
language ? language.name : 'ZZ',
|
||||
@@ -1,62 +0,0 @@
|
||||
import { Storage, Collection, File } from '@freearhey/core'
|
||||
import { HTMLTable, LogParser, LogItem } from '../core'
|
||||
import { Region } from '../models'
|
||||
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Table } from './table'
|
||||
|
||||
export class RegionTable implements Table {
|
||||
constructor() {}
|
||||
|
||||
async make() {
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
const regionsContent = await dataStorage.json('regions.json')
|
||||
const regions = new Collection(regionsContent).map(data => new Region(data))
|
||||
const regionsGroupedByCode = regions.keyBy((region: Region) => region.code)
|
||||
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
|
||||
let data = new Collection()
|
||||
parser
|
||||
.parse(generatorsLog)
|
||||
.filter((logItem: LogItem) => logItem.type === 'region')
|
||||
.forEach((logItem: LogItem) => {
|
||||
const file = new File(logItem.filepath)
|
||||
const regionCode = file.name().toUpperCase()
|
||||
const region: Region = regionsGroupedByCode.get(regionCode)
|
||||
|
||||
if (region) {
|
||||
data.add([
|
||||
region.name,
|
||||
region.name,
|
||||
logItem.count,
|
||||
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
|
||||
])
|
||||
} else {
|
||||
data.add([
|
||||
'ZZZ',
|
||||
'Undefined',
|
||||
logItem.count,
|
||||
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
|
||||
])
|
||||
}
|
||||
})
|
||||
|
||||
data = data
|
||||
.orderBy(item => item[0])
|
||||
.map(item => {
|
||||
item.shift()
|
||||
return item
|
||||
})
|
||||
|
||||
const table = new HTMLTable(data.all(), [
|
||||
{ name: 'Region', align: 'left' },
|
||||
{ name: 'Channels', align: 'right' },
|
||||
{ name: 'Playlist', align: 'left', nowrap: true }
|
||||
])
|
||||
|
||||
const readmeStorage = new Storage(README_DIR)
|
||||
await readmeStorage.save('_regions.md', table.toString())
|
||||
}
|
||||
}
|
||||
52
scripts/tables/regionsTable.ts
Normal file
52
scripts/tables/regionsTable.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { Storage, Collection, File } from '@freearhey/core'
|
||||
import { HTMLTable, LogParser, LogItem } from '../core'
|
||||
import { LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Region } from '../models'
|
||||
import { Table } from './table'
|
||||
|
||||
type RegionsTableProps = {
|
||||
regions: Collection
|
||||
}
|
||||
|
||||
export class RegionsTable implements Table {
|
||||
regions: Collection
|
||||
|
||||
constructor({ regions }: RegionsTableProps) {
|
||||
this.regions = regions
|
||||
}
|
||||
|
||||
async make() {
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
const parsed = parser.parse(generatorsLog)
|
||||
const logRegions = parsed.filter((logItem: LogItem) => logItem.type === 'region')
|
||||
|
||||
let items = new Collection()
|
||||
this.regions.forEach((region: Region) => {
|
||||
const logItem = logRegions.find(
|
||||
(logItem: LogItem) => logItem.filepath === `regions/${region.code.toLowerCase()}.m3u`
|
||||
)
|
||||
|
||||
if (!logItem) return
|
||||
|
||||
items.add({
|
||||
index: region.name,
|
||||
name: region.name,
|
||||
count: logItem.count,
|
||||
link: `https://iptv-org.github.io/iptv/${logItem.filepath}`
|
||||
})
|
||||
})
|
||||
|
||||
items = items.orderBy(item => item.index)
|
||||
|
||||
const output = items
|
||||
.map(item => {
|
||||
return `- ${item.name} <code>${item.link}</code>`
|
||||
})
|
||||
.join('\r\n')
|
||||
|
||||
const readmeStorage = new Storage(README_DIR)
|
||||
await readmeStorage.save('_regions.md', output)
|
||||
}
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
import { Storage, Collection, File } from '@freearhey/core'
|
||||
import { HTMLTable, LogParser, LogItem } from '../core'
|
||||
import { Country, Subdivision } from '../models'
|
||||
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
|
||||
import { Table } from './table'
|
||||
|
||||
export class SubdivisionTable implements Table {
|
||||
constructor() {}
|
||||
|
||||
async make() {
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
|
||||
const countriesContent = await dataStorage.json('countries.json')
|
||||
const countries = new Collection(countriesContent).map(data => new Country(data))
|
||||
const countriesGroupedByCode = countries.keyBy((country: Country) => country.code)
|
||||
const subdivisionsContent = await dataStorage.json('subdivisions.json')
|
||||
const subdivisions = new Collection(subdivisionsContent).map(data => new Subdivision(data))
|
||||
const subdivisionsGroupedByCode = subdivisions.keyBy(
|
||||
(subdivision: Subdivision) => subdivision.code
|
||||
)
|
||||
|
||||
const parser = new LogParser()
|
||||
const logsStorage = new Storage(LOGS_DIR)
|
||||
const generatorsLog = await logsStorage.load('generators.log')
|
||||
const parsed = parser.parse(generatorsLog)
|
||||
const parsedSubdivisions = parsed.filter((logItem: LogItem) => logItem.type === 'subdivision')
|
||||
|
||||
let output = ''
|
||||
countries.forEach((country: Country) => {
|
||||
const parsedCountrySubdivisions = parsedSubdivisions.filter((logItem: LogItem) =>
|
||||
logItem.filepath.includes(`subdivisions/${country.code.toLowerCase()}`)
|
||||
)
|
||||
|
||||
if (!parsedCountrySubdivisions.length) return
|
||||
|
||||
output += `\r\n<details>\r\n<summary>${country.name}</summary>\r\n`
|
||||
|
||||
const data = new Collection()
|
||||
|
||||
parsedCountrySubdivisions.forEach((logItem: LogItem) => {
|
||||
const file = new File(logItem.filepath)
|
||||
const code = file.name().toUpperCase()
|
||||
const [countryCode, subdivisionCode] = code.split('-') || ['', '']
|
||||
const country = countriesGroupedByCode.get(countryCode)
|
||||
|
||||
if (country && subdivisionCode) {
|
||||
const subdivision = subdivisionsGroupedByCode.get(code)
|
||||
if (subdivision) {
|
||||
data.add([
|
||||
subdivision.name,
|
||||
logItem.count,
|
||||
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
|
||||
])
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const table = new HTMLTable(data.all(), [
|
||||
{ name: 'Subdivision' },
|
||||
{ name: 'Channels', align: 'right' },
|
||||
{ name: 'Playlist', nowrap: true }
|
||||
])
|
||||
|
||||
output += table.toString()
|
||||
|
||||
output += '\r\n</details>'
|
||||
})
|
||||
|
||||
const readmeStorage = new Storage(README_DIR)
|
||||
await readmeStorage.save('_subdivisions.md', output.trim())
|
||||
}
|
||||
}
|
||||
20
scripts/types/city.d.ts
vendored
Normal file
20
scripts/types/city.d.ts
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
import { CountrySerializedData } from './country'
|
||||
import { SubdivisionSerializedData } from './subdivision'
|
||||
|
||||
export type CitySerializedData = {
|
||||
code: string
|
||||
name: string
|
||||
countryCode: string
|
||||
country?: CountrySerializedData
|
||||
subdivisionCode: string | null
|
||||
subdivision?: SubdivisionSerializedData
|
||||
wikidataId: string
|
||||
}
|
||||
|
||||
export type CityData = {
|
||||
code: string
|
||||
name: string
|
||||
country: string
|
||||
subdivision: string | null
|
||||
wikidata_id: string
|
||||
}
|
||||
1
scripts/types/dataLoader.d.ts
vendored
1
scripts/types/dataLoader.d.ts
vendored
@@ -17,4 +17,5 @@ export type DataLoaderData = {
|
||||
timezones: object | object[]
|
||||
guides: object | object[]
|
||||
streams: object | object[]
|
||||
cities: object | object[]
|
||||
}
|
||||
|
||||
3
scripts/types/dataProcessor.d.ts
vendored
3
scripts/types/dataProcessor.d.ts
vendored
@@ -15,6 +15,7 @@ export type DataProcessorData = {
|
||||
regionsKeyByCode: Dictionary
|
||||
blocklistRecords: Collection
|
||||
channelsKeyById: Dictionary
|
||||
citiesKeyByCode: Dictionary
|
||||
subdivisions: Collection
|
||||
categories: Collection
|
||||
countries: Collection
|
||||
@@ -23,6 +24,8 @@ export type DataProcessorData = {
|
||||
channels: Collection
|
||||
regions: Collection
|
||||
streams: Collection
|
||||
cities: Collection
|
||||
guides: Collection
|
||||
feeds: Collection
|
||||
logos: Collection
|
||||
}
|
||||
|
||||
8
scripts/types/feed.d.ts
vendored
8
scripts/types/feed.d.ts
vendored
@@ -1,12 +1,10 @@
|
||||
import { Collection } from '@freearhey/core'
|
||||
|
||||
export type FeedData = {
|
||||
channel: string
|
||||
id: string
|
||||
name: string
|
||||
is_main: boolean
|
||||
broadcast_area: Collection
|
||||
languages: Collection
|
||||
timezones: Collection
|
||||
broadcast_area: string[]
|
||||
languages: string[]
|
||||
timezones: string[]
|
||||
video_format: string
|
||||
}
|
||||
|
||||
5
scripts/types/region.d.ts
vendored
5
scripts/types/region.d.ts
vendored
@@ -1,9 +1,14 @@
|
||||
import { CitySerializedData } from './city'
|
||||
import { CountrySerializedData } from './country'
|
||||
import { SubdivisionSerializedData } from './subdivision'
|
||||
|
||||
export type RegionSerializedData = {
|
||||
code: string
|
||||
name: string
|
||||
countryCodes: string[]
|
||||
countries?: CountrySerializedData[]
|
||||
subdivisions?: SubdivisionSerializedData[]
|
||||
cities?: CitySerializedData[]
|
||||
}
|
||||
|
||||
export type RegionData = {
|
||||
|
||||
4
scripts/types/subdivision.d.ts
vendored
4
scripts/types/subdivision.d.ts
vendored
@@ -1,12 +1,16 @@
|
||||
import { CountrySerializedData } from './country'
|
||||
|
||||
export type SubdivisionSerializedData = {
|
||||
code: string
|
||||
name: string
|
||||
countryCode: string
|
||||
country?: CountrySerializedData
|
||||
parentCode: string | null
|
||||
}
|
||||
|
||||
export type SubdivisionData = {
|
||||
code: string
|
||||
name: string
|
||||
country: string
|
||||
parent: string | null
|
||||
}
|
||||
|
||||
@@ -67,8 +67,8 @@ https://mbc1-enc.edgenextcdn.net/out/v1/0965e4d7deae49179172426cbfb3bc5e/index.m
|
||||
https://shd-gcp-live.edgenextcdn.net/live/bitmovin-mbc-1-na/eec141533c90dd34722c503a296dd0d8/index.m3u8
|
||||
#EXTINF:-1 tvg-id="MBC1.ae",MBC 1 (1080p)
|
||||
https://shls-live-enc.edgenextcdn.net/out/v1/0965e4d7deae49179172426cbfb3bc5e/index.m3u8
|
||||
#EXTINF:-1 tvg-id="MBC2.ae",MBC 2 (480p)
|
||||
https://edge66.magictvbox.com/liveApple/MBC_2/index.m3u8
|
||||
#EXTINF:-1 tvg-id="MBC2.ae",MBC 2 (576p)
|
||||
http://213.57.91.138:8000/play/a05k
|
||||
#EXTINF:-1 tvg-id="MBC4.ae@SD",MBC 4 (1080p)
|
||||
https://shd-gcp-live.edgenextcdn.net/live/bitmovin-mbc-4/24f134f1cd63db9346439e96b86ca6ed/index.m3u8
|
||||
#EXTINF:-1 tvg-id="MBC5.ae@SD",MBC 5 (1080p)
|
||||
@@ -133,3 +133,11 @@ https://shd-gcp-live.edgenextcdn.net/live/bitmovin-wanasah/13e82ea6232fa647c43b2
|
||||
https://svs.itworkscdn.net/smcwatarlive/smcwatar/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="YasTV.ae@SD",Yas TV (1080p)
|
||||
https://vo-live-media.cdb.cdn.orange.com/Content/Channel/YASSportsChannel/HLS/index.m3u8
|
||||
#EXTINF:-1 tvg-id="NationalGeographicAbuDhabi.ae@HD",National Geographic Abu Dhabi HD (1080p)
|
||||
http://213.57.91.138:8000/play/a05a
|
||||
#EXTINF:-1 tvg-id="Alarabiya.ae@SD",Alarabiya
|
||||
https://viamotionhsi.netplus.ch/live/eds/alarabiya/browser-HLS8/alarabiya.m3u8
|
||||
#EXTINF:-1 tvg-id="Alarabiya.ae@SD",Alarabiya
|
||||
https://viamotionhsi.netplus.ch/live/eds/alarabiya/browser-dash/alarabiya.mpd
|
||||
#EXTINF:-1 tvg-id="MBCAction.ae@SD",MBC Action (576p)
|
||||
http://213.57.91.138:8000/play/a05l
|
||||
|
||||
@@ -23,3 +23,7 @@ https://deb10stream.duckdns.org/hls/stream.m3u8
|
||||
https://tringliveviz.akamaized.net/delta/105/out/u/qwaszxerdfcvrtryuy.m3u8
|
||||
#EXTINF:-1 tvg-id="ZjarrTV.al",Zjarr TV (360p)
|
||||
https://zjarr.future.al/hls/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Cufo.al",Cufo
|
||||
https://digitalb-live.morescreens.com/DAL_1_005/playlist.m3u8?id=DAL_1_005&video_id=12498&token=142cda7d50870275a9ca7988ff001b32ab30709b&authority_instance_id=spectar-prd-digitalb&profile_id=1&application_installation_id=1&uuid=backoffice1&subscriber_id=1&application_id=backoffice1&detected_delivery_method=hls&playlist_template=nginx&ps=94d0066599d8f74d1c090e93ac4617b6491d3629d2e2d770870fcef1f7effa25b204aa53b3821da5e9e65bee8e94331bcae2cb344d0739ca3a938b4ef2051cc8&vh=7ab82e63aae8510c6b37ea16da502e54e441a5a1a88bce0c8ed63da99bce948d86253d64ae00424dda8b9c8b6e2cd0f6cd79d8b0a56e10759210cdf4f6761d11
|
||||
#EXTINF:-1 tvg-id="BangBang.al",Bang Bang (480p)
|
||||
https://digitalb-live.morescreens.com/DAL_1_004/playlist.m3u8?id=DAL_1_004&video_id=16377&token=142cda7d50870275a9ca7988ff001b32ab30709b&authority_instance_id=spectar-prd-digitalb&profile_id=1&application_installation_id=1&uuid=backoffice1&subscriber_id=1&application_id=backoffice1&detected_delivery_method=hls&playlist_template=nginx&ps=6ca6054c4d6f9fafd6e3202ad620d4cc30ee45fdbbf1526cab3fdcac143b283d2f7251b3babf442b3a4fb90820abcc0cfaab2bff9a76799adc92b09fa0151f25&vh=7edb2a069c1d9e1872251cc87e99c568dfd18769f97905bd1dcaf519b259c970f880a1c43b6a7392ac496426adb0e55a2f6dbb06981536af9c1c987416282783
|
||||
|
||||
@@ -84,3 +84,5 @@ https://streaming10.huberwebmedia.at/LiveApp/streams/238985177034727564068269_ad
|
||||
http://89.187.168.245:8080/live/sUPPERchannel2/index.m3u8
|
||||
#EXTINF:-1 tvg-id="W24.at",W24 (720p) [Not 24/7]
|
||||
https://ms01.w24.at/W24/smil:liveevent.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="ServusTV.at@HD",ServusTV HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/servustvhd/browser-HLS8/servustvhd.m3u8
|
||||
|
||||
@@ -23,3 +23,5 @@ http://probashi.alvegroups.com:8081/probashitv/probashi/playlist.m3u8
|
||||
https://www.btvlive.gov.bd/streams/ef8b8bbc-98b7-4ba7-a49d-a0adaf259d35/ES/9ee3b4f9-fd0a-47c5-a135-2575c5691613/9ee3b4f9-fd0a-47c5-a135-2575c5691613_3_playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="VoktaTV.bd",Vokta TV (720p)
|
||||
https://vokta.raytahost.com/live/voktatv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DurontoTV.bd@SD",Duronto TV (720p)
|
||||
https://tvsen4.aynaott.com/durontotv/index.m3u8
|
||||
|
||||
@@ -77,3 +77,5 @@ https://live-radio-cf-vrt.akamaized.net/groupb/live/0f394a26-c87d-475e-8590-e9c6
|
||||
https://live-radio-cf-vrt.akamaized.net/groupb/live/0f394a26-c87d-475e-8590-e9c6e79b28d9/live.isml/.mpd
|
||||
#EXTINF:-1 tvg-id="VTM.be",VTM (720p)
|
||||
https://dpp-live-events.medialaancdn.be/events/hls/aes/webstream1.m3u8
|
||||
#EXTINF:-1 tvg-id="AB3.be@HD",AB3 HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/ab3/browser-HLS8/ab3.m3u8
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="78TV.bg",7/8 TV (1080p)
|
||||
https://ms4.sedemosmi.tv/live/M3E5ajhtdjJkaXBscmZubmUxMmh1cjN1bjZrbm5wZW8/index.m3u8
|
||||
#EXTINF:-1 tvg-id="100AutoMotoTV.bg",100% Auto Moto TV (406p) [Not 24/7]
|
||||
http://100automoto.tv:1935/bgtv1/autotv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AgroTV.bg",Agro TV (480p)
|
||||
https://restr2.bgtv.bg/agro/hls/agro.m3u8
|
||||
#EXTINF:-1 tvg-id="BalkanikaTV.bg",Balkanika TV (270p)
|
||||
rtsp://stream.teracomm.bg/balkanika
|
||||
#EXTINF:-1 tvg-id="CityTV.bg",City TV (576p) [Not 24/7]
|
||||
https://tv.city.bg/play/tshls/citytv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DSTV.bg",DSTV (614p) [Not 24/7]
|
||||
@@ -22,8 +18,6 @@ https://old2.rn-tv.com/k0/stream.m3u8
|
||||
https://streamer1.streamhost.org/salive/GMIlcbgM/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MagicTV.bg",Magic TV (720p)
|
||||
https://bss1.neterra.tv/magictv/magictv.m3u8
|
||||
#EXTINF:-1 tvg-id="PIKTV.bg",PIK TV (720p)
|
||||
https://s.piktv.bg/l/live/index.m3u8
|
||||
#EXTINF:-1 tvg-id="PlovdivOrthodoxTV.bg",Plovdivska Pravoslavna TV (1080p)
|
||||
http://78.130.149.196:1935/live/pptv.stream/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RMTV.bg",RMTV (288p)
|
||||
@@ -38,9 +32,9 @@ https://streamer103.neterra.tv/tiankov-folk/live.m3u8
|
||||
https://streamer103.neterra.tv/tiankov-orient/live.m3u8
|
||||
#EXTINF:-1 tvg-id="TravelTV.bg",Travel TV (576p)
|
||||
https://streamer103.neterra.tv/travel/live.m3u8
|
||||
#EXTINF:-1 tvg-id="TV1.bg",TV 1 (720p)
|
||||
https://tv1.cloudcdn.bg:8081/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="TVZagora.bg",TV Zagora (576p)
|
||||
http://zagoratv.ddns.net:8080/tvzagora.m3u8
|
||||
#EXTINF:-1 tvg-id="TVNBulgaria.bg",TVN-Bulgaria (1080p)
|
||||
https://obs.friendshipchurch.eu/tvn/mystream.m3u8
|
||||
#EXTINF:-1 tvg-id="BNT4.bg@SD",BNT 4
|
||||
https://viamotionhsi.netplus.ch/live/eds/bntworld/browser-HLS8/bntworld.m3u8
|
||||
|
||||
@@ -400,3 +400,7 @@ http://unitvaovivo.ufrgs.br:8080/live.ogg
|
||||
https://sistemavrt.vrtchannel.tv.br:3473/stream/play.m3u8
|
||||
#EXTINF:-1 tvg-id="VV8TV.br",VV8 TV (720p)
|
||||
https://video01.kshost.com.br/seap8272/seap8272/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Record.br@SD",Record
|
||||
https://viamotionhsi.netplus.ch/live/eds/rederecordinternacional/browser-HLS8/rederecordinternacional.m3u8
|
||||
#EXTINF:-1 tvg-id="RecordNews.br@SD",Record News
|
||||
https://viamotionhsi.netplus.ch/live/eds/recordnews/browser-HLS8/recordnews.m3u8
|
||||
|
||||
@@ -85,3 +85,57 @@ https://rtmp-vm.fidion.de/live/tvrt.m3u8
|
||||
https://livevideo.infomaniak.com/streaming/livecast/tvm3/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVO.ch",TVO (CH) (720p)
|
||||
https://cdnapisec.kaltura.com/p/1719221/sp/171922100/playManifest/entryId/1_t5h46v64/format/applehttp/protocol/https/a.m3u8
|
||||
#EXTINF:-1 tvg-id="LemanBleu.ch@SD",Leman Bleu (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/lemanbleu/browser-HLS8/lemanbleu.m3u8
|
||||
#EXTINF:-1 tvg-id="Carac4.ch@SD",Carac 4 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvsuisseplus/browser-HLS8/tvsuisseplus.m3u8
|
||||
#EXTINF:-1 tvg-id="Carac3.ch@SD",Carac 3
|
||||
https://viamotionhsi.netplus.ch/live/eds/lfmtv/browser-HLS8/lfmtv.m3u8
|
||||
#EXTINF:-1 tvg-id="Carac2.ch@SD",Carac 2
|
||||
https://viamotionhsi.netplus.ch/live/eds/onetv/browser-HLS8/onetv.m3u8
|
||||
#EXTINF:-1 tvg-id="Carac1.ch@SD",Carac 1 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/rougetv/browser-HLS8/rougetv.m3u8
|
||||
#EXTINF:-1 tvg-id="TeleBielingue.ch@SD",TeleBielingue (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/telebielingue/browser-HLS8/telebielingue.m3u8
|
||||
#EXTINF:-1 tvg-id="TV24.ch@SD",TV 24 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/tv24/browser-HLS8/tv24.m3u8
|
||||
#EXTINF:-1 tvg-id="TeleBarn.ch@SD",TeleBarn (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/telebaern/browser-HLS8/telebaern.m3u8
|
||||
#EXTINF:-1 tvg-id="SRFzwei.ch@SD",SRF zwei (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/srf2hd/browser-HLS8/srf2hd.m3u8
|
||||
#EXTINF:-1 tvg-id="SRFinfo.ch@HD",SRF info HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/srfinfo/browser-HLS8/srfinfo.m3u8
|
||||
#EXTINF:-1 tvg-id="SRF1.ch@SD",SRF 1 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/srf1hd/browser-HLS8/srf1hd.m3u8
|
||||
#EXTINF:-1 tvg-id="Carac5.ch@HD",Carac 5 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/teleswizz/browser-HLS8/teleswizz.m3u8
|
||||
#EXTINF:-1 tvg-id="TV24.ch@SD",TV 24
|
||||
https://viamotionhsi.netplus.ch/live/eds/tv24/browser-dash/tv24.mpd
|
||||
#EXTINF:-1 tvg-id="TeleBarn.ch@SD",TeleBarn
|
||||
https://viamotionhsi.netplus.ch/live/eds/telebaern/browser-dash/telebaern.mpd
|
||||
#EXTINF:-1 tvg-id="TeleBielingue.ch@SD",TeleBielingue
|
||||
https://viamotionhsi.netplus.ch/live/eds/telebielingue/browser-dash/telebielingue.mpd
|
||||
#EXTINF:-1 tvg-id="SRFzwei.ch@SD",SRF zwei
|
||||
https://viamotionhsi.netplus.ch/live/eds/srf2hd/browser-dash/srf2hd.mpd
|
||||
#EXTINF:-1 tvg-id="SRFinfo.ch@HD",SRF info HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/srfinfo/browser-dash/srfinfo.mpd
|
||||
#EXTINF:-1 tvg-id="SRF1.ch@SD",SRF 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/srf1hd/browser-dash/srf1hd.mpd
|
||||
#EXTINF:-1 tvg-id="RSILa2.ch@SD",RSI La 2
|
||||
https://viamotionhsi.netplus.ch/live/eds/rsila2hd/browser-dash/rsila2hd.mpd
|
||||
#EXTINF:-1 tvg-id="RSILa1.ch@SD",RSI La 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/rsila1hd/browser-dash/rsila1hd.mpd
|
||||
#EXTINF:-1 tvg-id="LemanBleu.ch@SD",Leman Bleu
|
||||
https://viamotionhsi.netplus.ch/live/eds/lemanbleu/browser-dash/lemanbleu.mpd
|
||||
#EXTINF:-1 tvg-id="Carac4.ch@SD",Carac 4
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvsuisseplus/browser-dash/tvsuisseplus.mpd
|
||||
#EXTINF:-1 tvg-id="Carac3.ch@SD",Carac 3
|
||||
https://viamotionhsi.netplus.ch/live/eds/lfmtv/browser-dash/lfmtv.mpd
|
||||
#EXTINF:-1 tvg-id="Carac2.ch@SD",Carac 2
|
||||
https://viamotionhsi.netplus.ch/live/eds/onetv/browser-dash/onetv.mpd
|
||||
#EXTINF:-1 tvg-id="Carac1.ch@SD",Carac 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/rougetv/browser-dash/rougetv.mpd
|
||||
#EXTINF:-1 tvg-id="Carac5.ch@SD",Carac 5 SD
|
||||
https://viamotionhsi.netplus.ch/live/eds/teleswizz/browser-dash/teleswizz.mpd
|
||||
#EXTINF:-1 tvg-id="NRTV.ch@SD",NRTV
|
||||
https://viamotionhsi.netplus.ch/live/eds/nrtv/browser-HLS8/nrtv.m3u8
|
||||
|
||||
@@ -27,3 +27,5 @@ http://connectiktv.ddns.net:5000/playtv/@playtv/playlist.m3u8
|
||||
https://stream.it-innov.com/tr24/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Vision4.cm",Vision 4 (360p)
|
||||
https://cdn-globecast.akamaized.net/live/eds/vision4/hls_video/index.m3u8
|
||||
#EXTINF:-1 tvg-id="PLEXTV.cm@SD",PLEX TV
|
||||
http://connectiktv.ddns.net:5000/plextv/@plextv/playlist.m3u8
|
||||
|
||||
@@ -143,6 +143,8 @@ http://49.113.179.174:4022/udp/238.125.7.93:5140
|
||||
http://110.19.156.172:9901/tsfile/live/1003_1.m3u8
|
||||
#EXTINF:-1 tvg-id="NeiMonggolTV.cn",Nei Monggol TV
|
||||
http://play1-qk.nmtv.cn/live/1686560387346365.m3u8
|
||||
#EXTINF:-1 tvg-id="NeiMonggolTV.cn",Nei Monggol TV
|
||||
https://cdn4.skygo.mn/live/disk1/NeigMGL/HLSv3-FTA/NeigMGL.m3u8
|
||||
#EXTINF:-1 tvg-id="NeiMonggolTV2MongolianCultureChannel.cn",Nei Monggol TV 2 Mongolian Culture Channel
|
||||
http://1.24.190.98:10080/hls/40/index.m3u8
|
||||
#EXTINF:-1 tvg-id="NeiMonggolTV2MongolianCultureChannel.cn",Nei Monggol TV 2 Mongolian Culture Channel
|
||||
@@ -1389,3 +1391,9 @@ http://39.134.115.163:8080/PLTV/88888910/224/3221225736/index.m3u8
|
||||
http://183.207.249.36/PLTV/4/224/3221227323/index.m3u8
|
||||
#EXTINF:-1 tvg-id="HeilongjiangTV.cn",黑龙江卫视 (1080p)
|
||||
http://223.110.254.143:6610/cntv/live1/HD-8000k-1080P-heilongjiangstv/HD-8000k-1080P-heilongjiangstv/1.m3u8
|
||||
#EXTINF:-1 tvg-id="CCTV4Europe.cn@SD",CCTV-4 Europe
|
||||
https://viamotionhsi.netplus.ch/live/eds/cctv4/browser-HLS8/cctv4.m3u8
|
||||
#EXTINF:-1 tvg-id="CCTV4Europe.cn@SD",CCTV-4 Europe
|
||||
https://viamotionhsi.netplus.ch/live/eds/cctv4/browser-dash/cctv4.mpd
|
||||
#EXTINF:-1 tvg-id="HarbinComprehensiveNewsChannel.cn",Harbin Comprehensive News Channel
|
||||
https://stream.hrbtv.net/xwzh/playlist.m3u8?_upt=ef41dd531755913594
|
||||
|
||||
@@ -123,7 +123,7 @@ https://mist01.homestream.fun/hls/tlmas904/0_1/index.m3u8
|
||||
https://k20.usastreams.com:8081/telered/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TeleSURCostaRica.cr",TeleSUR Costa Rica (720p) [Not 24/7]
|
||||
https://s1.tvdatta.com:3582/live/telesurlive.m3u8
|
||||
#EXTINF:-1 tvg-id="Teletica7.cr" http-referrer="https://bradmax.com/client/embed-player/c7c83ebb46fa89529a7383d933e2038729f8e4c9_13428?id=tv7&mediaUrl=https://cdn01.teletica.com/TeleticaLiveStream/Stream/playlist_dvr.m3u8&mediaUrl2=https://6zklxk9bdw9b-hls-live.5centscdn.com/TeleticaLiveStream/d072c3a8dde8622c607ecd258fd628e8.sdp/playlist_dvr.m3u8",Teletica 7 (720p) [Geo-blocked]
|
||||
#EXTINF:-1 tvg-id="Teletica7.cr@SD" http-referrer="https://bradmax.com/client/embed-player/c7c83ebb46fa89529a7383d933e2038729f8e4c9_13428?id=tv7&mediaUrl=https://cdn01.teletica.com/TeleticaLiveStream/Stream/playlist_dvr.m3u8&mediaUrl2=https://6zklxk9bdw9b-hls-live.5centscdn.com/TeleticaLiveStream/d072c3a8dde8622c607ecd258fd628e8.sdp/playlist_dvr.m3u8",Teletica 7 (720p) [Geo-blocked]
|
||||
#EXTVLCOPT:http-referrer=https://bradmax.com/client/embed-player/c7c83ebb46fa89529a7383d933e2038729f8e4c9_13428?id=tv7&mediaUrl=https://cdn01.teletica.com/TeleticaLiveStream/Stream/playlist_dvr.m3u8&mediaUrl2=https://6zklxk9bdw9b-hls-live.5centscdn.com/TeleticaLiveStream/d072c3a8dde8622c607ecd258fd628e8.sdp/playlist_dvr.m3u8
|
||||
https://cdn01.teletica.com/TeleticaLiveStream/Stream/playlist_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="TicaVision.cr@SD",TicaVision
|
||||
|
||||
@@ -335,7 +335,7 @@ http://185.189.225.150:85/RTL/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RTL.de@HD",RTL HD
|
||||
https://strm.hdtvizlecanli.com/live/rtl.m3u8
|
||||
#EXTINF:-1 tvg-id="RTLSuper.de@SD",RTL Super
|
||||
https://trn09.bozztv.com/gin-superrtl/index.m3u8
|
||||
https://viamotionhsi.netplus.ch/live/eds/superrtl/browser-HLS8/superrtl.m3u8
|
||||
#EXTINF:-1 tvg-id="SaarlandFernsehen1.de",Saarland Fernsehen 1 (1080p)
|
||||
https://saarland1.iptv-playoutcenter.de/saarland1/saarland1.stream_1/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="SaarlandFernsehen2.de",Saarland Fernsehen 2 (720p) [Not 24/7]
|
||||
@@ -476,3 +476,45 @@ https://viamotionhsi.netplus.ch/live/eds/vox/browser-HLS8/vox.m3u8
|
||||
https://viamotionhsi.netplus.ch/live/eds/ntv/browser-HLS8/ntv.m3u8
|
||||
#EXTINF:-1 tvg-id="Nitro.de@HD",Nitro HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtlnitro/browser-HLS8/rtlnitro.m3u8
|
||||
#EXTINF:-1 tvg-id="NickComedyCentralPlus1.de@HD",Nick/Comedy Central +1 HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/comedycentralnick/browser-HLS8/comedycentralnick.m3u8
|
||||
#EXTINF:-1 tvg-id="3sat.de@HD",3sat HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/3sathd/browser-HLS8/3sathd.m3u8
|
||||
#EXTINF:-1 tvg-id="WELT.de@SD",WELT (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/n24/browser-HLS8/n24.m3u8
|
||||
#EXTINF:-1 tvg-id="phoenix.de@HD",phoenix
|
||||
https://viamotionhsi.netplus.ch/live/eds/phoenixhd/browser-HLS8/phoenixhd.m3u8
|
||||
#EXTINF:-1 tvg-id="VOX.de@SD",VOX
|
||||
https://viamotionhsi.netplus.ch/live/eds/vox/browser-dash/vox.mpd
|
||||
#EXTINF:-1 tvg-id="RTLZwei.de@HD",RTL Zwei HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtl2/browser-dash/rtl2.mpd
|
||||
#EXTINF:-1 tvg-id="RTLSuper.de@SD",RTL Super
|
||||
https://viamotionhsi.netplus.ch/live/eds/superrtl/browser-dash/superrtl.mpd
|
||||
#EXTINF:-1 tvg-id="phoenix.de@HD",phoenix
|
||||
https://viamotionhsi.netplus.ch/live/eds/phoenixhd/browser-dash/phoenixhd.mpd
|
||||
#EXTINF:-1 tvg-id="ntv.de@SD",n-tv
|
||||
https://viamotionhsi.netplus.ch/live/eds/ntv/browser-dash/ntv.mpd
|
||||
#EXTINF:-1 tvg-id="Nitro.de@HD",Nitro HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtlnitro/browser-dash/rtlnitro.mpd
|
||||
#EXTINF:-1 tvg-id="NickComedyCentralPlus1.de@HD",Nick/Comedy Central +1 HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/comedycentralnick/browser-dash/comedycentralnick.mpd
|
||||
#EXTINF:-1 tvg-id="3sat.de@HD",3sat HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/3sathd/browser-dash/3sathd.mpd
|
||||
#EXTINF:-1 tvg-id="rbbFernsehen.de@SD",rbb Fernsehen
|
||||
https://viamotionhsi.netplus.ch/live/eds/rbb/browser-HLS8/rbb.m3u8
|
||||
#EXTINF:-1 tvg-id="RiC.de@SD",RiC
|
||||
https://viamotionhsi.netplus.ch/live/eds/ric/browser-HLS8/ric.m3u8
|
||||
#EXTINF:-1 tvg-id="DeluxeMusic.de@SD",Deluxe Music
|
||||
https://viamotionhsi.netplus.ch/live/eds/deluxemusic/browser-HLS8/deluxemusic.m3u8
|
||||
#EXTINF:-1 tvg-id="SWRFernsehenBadenWurttemberg.de@SD",SWR Fernsehen Baden-Wurttemberg
|
||||
https://viamotionhsi.netplus.ch/live/eds/swrbw/browser-HLS8/swrbw.m3u8
|
||||
#EXTINF:-1 tvg-id="KiKA.de@HD",KiKA HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/kikahd/browser-HLS8/kikahd.m3u8
|
||||
#EXTINF:-1 tvg-id="RTL.de@SD",RTL
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtl/browser-HLS8/rtl.m3u8
|
||||
#EXTINF:-1 tvg-id="NDRFernsehen.de@Hamburg",NDR Fernsehen
|
||||
https://viamotionhsi.netplus.ch/live/eds/ndr/browser-HLS8/ndr.m3u8
|
||||
#EXTINF:-1 tvg-id="MDRFernsehen.de@Thuringen",MDR Fernsehen Thuringen
|
||||
https://viamotionhsi.netplus.ch/live/eds/mdr/browser-HLS8/mdr.m3u8
|
||||
#EXTINF:-1 tvg-id="ARDalpha.de@HD",ARD-alpha HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/bralpha/browser-HLS8/bralpha.m3u8
|
||||
|
||||
@@ -27,3 +27,7 @@ http://149.62.177.98:8000/play/a01x/index.m3u8
|
||||
http://149.62.177.98:8000/play/a01y/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TV2.dz@SD",TV2
|
||||
https://viamotionhsi.netplus.ch/live/eds/canalalgerie/browser-HLS8/canalalgerie.m3u8
|
||||
#EXTINF:-1 tvg-id="ElFadjerTV.dz@SD",El Fadjer TV (720p)
|
||||
https://stream.wsla.top/play/1.m3u8
|
||||
#EXTINF:-1 tvg-id="TV2.dz@SD",TV2
|
||||
https://viamotionhsi.netplus.ch/live/eds/canalalgerie/browser-dash/canalalgerie.mpd
|
||||
|
||||
@@ -56,3 +56,5 @@ https://d35j504z0x2vu2.cloudfront.net/v1/master/0bc8e8376bd8417a1b6761138aa41c26
|
||||
https://rotana.hibridcdn.net/rotananet/cinemamasr_net-7Y83PP5adWixDF93/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="WatanTV.eg",Watan TV (1080p)
|
||||
https://rp.tactivemedia.com/watantv_source/live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AlMasriyah.eg@SD",Al Masriyah
|
||||
https://viamotionhsi.netplus.ch/live/eds/almasriyah/browser-HLS8/almasriyah.m3u8
|
||||
|
||||
139
streams/es.m3u
139
streams/es.m3u
@@ -15,8 +15,6 @@ https://cloud.streamingconnect.tv/hls/12tv/12tv2.m3u8
|
||||
https://cloud.fastchannel.es/mic/manifiest/hls/12tv/12tv.m3u8
|
||||
#EXTINF:-1 tvg-id="24Horas.es",24 Horas (1080p)
|
||||
https://d32rw80ytx9uxs.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-vlldndmow4yre/24HES.m3u8
|
||||
#EXTINF:-1 tvg-id="24HorasInternacional.es",24 Horas Internacional [Geo-blocked]
|
||||
https://rtvelivestream.akamaized.net/rtvesec/24h/24h_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="28kanala.es@SD",28 kanala
|
||||
https://streaming.28kanala.eus/hls/z.m3u8
|
||||
#EXTINF:-1 tvg-id="101tvAntequera.es" http-referrer="https://www.101tv.es/antequera/",101tv Antequera
|
||||
@@ -50,7 +48,7 @@ https://d1ujfw1zyymzyd.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68
|
||||
https://d82pyvmcw2kdc.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-swfivzrzwamaq/live/fast-channel-animevisionclassics-efc8dc6d/fast-channel-animevisionclassics-efc8dc6d.m3u8
|
||||
#EXTINF:-1 tvg-id="ArabiTV.es",Arabí TV (1080p)
|
||||
https://streamtv2.elitecomunicacion.cloud:3628/live/arabitv2025live.m3u8
|
||||
#EXTINF:-1 tvg-id="AragonTV.es",Aragón TV (720p) [Not 24/7]
|
||||
#EXTINF:-1 tvg-id="AragonTVInternacional.es@SD",Aragon TV Internacional (720p) [Not 24/7]
|
||||
https://cartv.streaming.aranova.es/hls/live/aragontv_canal1.m3u8
|
||||
#EXTINF:-1 tvg-id="BabyTV.uk@Spain",BabyTV (Spain) (1080p)
|
||||
http://185.189.225.150:85/BabyTV/index.m3u8
|
||||
@@ -85,24 +83,14 @@ https://limited35.todostreaming.es/live/mitjans-livestream.m3u8
|
||||
https://limited35.todostreaming.es/live/mitjans-livestream1.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal4ManchaCentro.es",Canal 4 Mancha Centro (720p) [Not 24/7]
|
||||
https://5924d3ad0efcf.streamlock.net/canal4/canal4live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal4Tenerife.es",Canal 4 Tenerife (576p)
|
||||
https://5940924978228.streamlock.net/Directo2/Directo2/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal10Emporda.es",Canal 10 Empordà (360p) [Not 24/7]
|
||||
http://ventdelnord.tv:8080/escala/directe.m3u8
|
||||
#EXTINF:-1 tvg-id="24Horas.es",Canal 24 Horas (720p)
|
||||
https://ztnr.rtve.es/ztnr/1694255.m3u8
|
||||
#EXTINF:-1 tvg-id="24HorasCanarias.es",Canal 24 Horas Canarias (720p)
|
||||
https://rtvelivestream.akamaized.net/rtvesec/can/24h_can_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="24HorasCanarias.es",Canal 24 Horas Canarias (720p)
|
||||
https://ztnr.rtve.es/ztnr/5473142.m3u8
|
||||
#EXTINF:-1 tvg-id="24HorasCatalunya.es",Canal 24 Horas Catalunya (720p)
|
||||
https://rtvelivestream.akamaized.net/rtvesec/cat/24h_cat_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="24HorasCatalunya.es",Canal 24 Horas Catalunya (720p)
|
||||
https://ztnr.rtve.es/ztnr/4952053.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal25TV.es",Canal 25 TV (Barbastro) (720p) [Not 24/7]
|
||||
https://common01.todostreaming.es/live/tvbarbastro-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal33Madrid.es",Canal 33 Madrid (720p) [Not 24/7]
|
||||
https://5ab29cc78f681.streamlock.net/canal33tvmadridgmailcom/livestream/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal45.es",Canal 45 (576p)
|
||||
https://nlb1-live.emitstream.com/hls/625csn5et2iszm9oze65/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal56.es",Canal 56 (576p) [Not 24/7]
|
||||
@@ -138,9 +126,6 @@ https://live-24-canalsur.interactvty.pro/9bb0f4edcb8946e79f5017ddca6c02b0/26af54
|
||||
https://cdnlive.codev8.net/rtvalive/smil:channel22.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CanalSurNoticias.es@SD",Canal Sur Noticias
|
||||
https://cdnlive.codev8.net/rtvalive/smil:channel42.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CanalTaronjaAnoia.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",Canal Taronja Anoia (1080p) [Not 24/7]
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://ingest1-video.streaming-pro.com/canaltaronja/anoia/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CanalTaronjaComarquesCentrals.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",Canal Taronja Comarques Centrals (1080p) [Not 24/7]
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://ingest1-video.streaming-pro.com/canaltaronja/central/playlist.m3u8
|
||||
@@ -176,13 +161,7 @@ https://cloudvideo.servers10.com:8081/8024/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Clan.es",Clan (1280p)
|
||||
https://dum8zv1rbdjj2.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-x6uutpgph4tpt/ClanES.m3u8
|
||||
#EXTINF:-1 tvg-id="Clan.es",Clan TVE (1080p) [Geo-blocked]
|
||||
https://rtvelivestream.akamaized.net/rtvesec/clan/clan_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="Clan.es",Clan TVE (1080p) [Geo-blocked]
|
||||
https://ztnr.rtve.es/ztnr/5466990.m3u8
|
||||
#EXTINF:-1 tvg-id="ClanInternacional.es",Clan TVE Internacional (1080p)
|
||||
https://rtvelivestream.akamaized.net/rtvesec/int/clan_int_main.m3u8
|
||||
#EXTINF:-1 tvg-id="CMMTV.es",CMM TV (1080p) [Not 24/7]
|
||||
https://cdnapi.kaltura.com/p/2288691/sp/228869100/playManifest/entryId/1_01fn4ycl/format/applehttp/.m3u8
|
||||
#EXTINF:-1 tvg-id="Condavision.es",Condavisión (1080p) [Not 24/7]
|
||||
https://5d8d85cf2c308.streamlock.net:1936/Condavision/endirecto/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CongresodelosDiputados1.es",Congreso de los Diputados 1 (360p) [Not 24/7]
|
||||
@@ -201,8 +180,6 @@ https://cloudvideo.servers10.com:8081/8020/index.m3u8
|
||||
https://streamserver3.seneca.tv/cval_live/cdn_enc_3/master.m3u8
|
||||
#EXTINF:-1 tvg-id="CostaNoroesteTV.es",Costa Noroeste TV (1080p) [Not 24/7]
|
||||
https://limited31.todostreaming.es/live/noroestetv-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="CostadelSolTV.es",CostadelSol TV (576p)
|
||||
https://limited11.todostreaming.es/live/benalmadena-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="CristianaTV.es",Cristiana TV (576p)
|
||||
https://cristianos2.todostreaming.es/live/malaga-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="CugatTV.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",Cugat TV (1080p)
|
||||
@@ -233,8 +210,6 @@ https://streaming-1.eltorotv.com/lb0/eltorotv-streaming-web/index.m3u8
|
||||
https://elche7tv.gestec-video.com/hls/canal2.m3u8
|
||||
#EXTINF:-1 tvg-id="EmpordaTV.es",Empordà TV (1080p)
|
||||
https://video3.lhdserver.es/empordatv2/live.m3u8
|
||||
#EXTINF:-1 tvg-id="ErloTelebista.es",Erlo Telebista (720p)
|
||||
https://5940924978228.streamlock.net/8159/8159/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Esport3.es",Esport3 (1080p) [Geo-blocked]
|
||||
https://directes-tv-cat.3catdirectes.cat/live-origin/esport3-hls/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Esport3.es",Esport3 (1080p) [Geo-blocked]
|
||||
@@ -255,24 +230,14 @@ https://multimedia.eitb.eus/live-content/eitbbasque-hls/master.m3u8
|
||||
#EXTINF:-1 tvg-id="etv.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",ETV Terramar (1080p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://liveingesta318.cdnmedia.tv/tvetvlive/smil:rtmp01.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="EurolatinaTV.es",Eurolatina TV (720p) [Not 24/7]
|
||||
https://media2.streambrothers.com:1936/8150/8150/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Fibwi.es",Fibwi (1080p) [Not 24/7]
|
||||
https://hostcdn3.fibwi.com/fibwi_diario/index.fmp4.m3u8
|
||||
#EXTINF:-1 tvg-id="FitelTV.es",Fitel TV (1080p)
|
||||
https://tv.mywifisocial.es/live.m3u8
|
||||
#EXTINF:-1 tvg-id="FuengirolaTV.es",Fuengirola TV (360p) [Not 24/7]
|
||||
https://secure.todostreaming.es/live/nerja-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="FuerteventuraTV.es",Fuerteventura TV (1080p)
|
||||
https://5c0956165db0b.streamlock.net/ftv/directo/.m3u8
|
||||
#EXTINF:-1 tvg-id="GaliciaTVAmerica.es",Galicia TV América (720p)
|
||||
https://america-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="GaliciaTVEuropa.es",Galicia TV Europa (720p)
|
||||
https://europa-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="GoienaEus.es",Goiena Eus (720p)
|
||||
https://zuzenean.goienamedia.eus/goiena-telebista.m3u8
|
||||
#EXTINF:-1 tvg-id="GoierriIrratiTelebista.es",Goierri Irrati Telebista (720p)
|
||||
https://5940924978228.streamlock.net/8155/8155/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="GuadaTV.es",Guada TV (720p) [Not 24/7]
|
||||
https://cloud.streamingconnect.tv/hls/guadatv/guadatv.m3u8
|
||||
#EXTINF:-1 tvg-id="HamaikaTelebista.es",Hamaika Telebista (1080p)
|
||||
@@ -285,46 +250,28 @@ https://hola-play-2108fd06-86d4-44e8-9867-c35b4895a1c1-es.fast.rakuten.tv/v1/mas
|
||||
https://5d8d85cf2c308.streamlock.net:1936/huelvatv/htvdirecto/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="IberoamericaTV.es",IberoAmerica TV (1080p)
|
||||
https://limited39.todostreaming.es/live/salome-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="IbizaGlobalTV.es",Ibiza Global TV (720p) [Not 24/7]
|
||||
https://ibgrtv.streaming-pro.com/hls/ibgrlive.m3u8
|
||||
#EXTINF:-1 tvg-id="ImasTV.es",Imás TV (1080p) [Not 24/7]
|
||||
https://secure3.todostreaming.es/live/imastv-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="InteralmeriaTV.es",Interalmeria TV (1080p)
|
||||
https://interalmeria.tv/directo/live.m3u8
|
||||
#EXTINF:-1 tvg-id="IntercomarcalTV.es",Intercomarcal TV (576p) [Not 24/7]
|
||||
https://streamingtvi.gestec-video.com/hls/tvixa.m3u8
|
||||
#EXTINF:-1 tvg-id="JuntadeCastillayLeon.es",Junta de Castilla y León (1080p) [Not 24/7]
|
||||
https://16escalones-live2.flumotion.com/chunks.m3u8
|
||||
#EXTINF:-1 tvg-id="La1.es",La 1 (720p)
|
||||
https://ztnr.rtve.es/ztnr/1688877.m3u8
|
||||
#EXTINF:-1 tvg-id="La1Canarias.es",La 1 Canarias (720p)
|
||||
https://ztnr.rtve.es/ztnr/5190066.m3u8
|
||||
#EXTINF:-1 tvg-id="La1Canarias.es",La 1 Canarias (720p) [Not 24/7]
|
||||
https://rtvelivestream-clnx.rtve.es/rtvesec/can/la1_can_main_720.m3u8
|
||||
#EXTINF:-1 tvg-id="La1Catalunya.es",La 1 Catalunya (720p)
|
||||
https://ztnr.rtve.es/ztnr/3293681.m3u8
|
||||
#EXTINF:-1 tvg-id="La1Catalunya.es",La 1 Catalunya (720p) [Not 24/7]
|
||||
https://rtvelivestream-clnx.rtve.es/rtvesec/cat/la1_cat_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="La2.es",La 2 (1080p)
|
||||
http://185.189.225.150:85/TV2/index.m3u8
|
||||
#EXTINF:-1 tvg-id="La2.es",La 2 (1080p)
|
||||
https://d4g9wh8d4wiaw.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-crbrakk0yedqb/La2ES.m3u8
|
||||
#EXTINF:-1 tvg-id="La2.es",La 2 (1080p)
|
||||
https://ztnr.rtve.es/ztnr/1688885.m3u8
|
||||
#EXTINF:-1 tvg-id="La2.es",La 2 (1080p) [Not 24/7]
|
||||
https://rtvelivestream-clnx.rtve.es/rtvesec/la2/la2_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="La2Canarias.es",La 2 Canarias (720p)
|
||||
https://ztnr.rtve.es/ztnr/5468585.m3u8
|
||||
#EXTINF:-1 tvg-id="La2Canarias.es",La 2 Canarias (720p) [Not 24/7]
|
||||
https://rtvelivestream.akamaized.net/rtvesec/can/la2_can_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="La2Catalunya.es",La 2 Catalunya (720p)
|
||||
https://ztnr.rtve.es/ztnr/3987218.m3u8
|
||||
#EXTINF:-1 tvg-id="La2Catalunya.es",La 2 Catalunya (720p) [Not 24/7]
|
||||
https://rtvelivestream.akamaized.net/rtvesec/cat/la2_cat_main_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="La8Mediterraneo.es",La 8 Mediterráneo (1080p) [Not 24/7]
|
||||
https://streaming004.gestec-video.com/hls/8TV.m3u8
|
||||
#EXTINF:-1 tvg-id="LaFabricaTV.es",La Fábrica TV (720p) [Not 24/7]
|
||||
https://mejorestrucos.com:5443/LiveApp/streams/854077030689510682594068.m3u8
|
||||
#EXTINF:-1 tvg-id="LaUrbanTV.es",La Urban TV (1080p) [Not 24/7]
|
||||
https://urbanrevolution.es:8443/live/TV/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="LancelotTV.es",Lancelot TV (404p)
|
||||
@@ -367,8 +314,6 @@ http://185.189.225.150:85/nickelodeon/index.m3u8
|
||||
https://cloudvideo.servers10.com:8081/8032/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Nortevision.es",NORTEvisión (1080p)
|
||||
http://amaru.dyndns.org:8870/0.m3u8
|
||||
#EXTINF:-1 tvg-id="OizmendiTelebista.es",Oizmendi Telebista (404p) [Not 24/7]
|
||||
https://5940924978228.streamlock.net/8161/8161/master.m3u8
|
||||
#EXTINF:-1 tvg-id="OlotTV.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",Olot TV (1080p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://liveingesta118.cdnmedia.tv/olottvlive/smil:live.smil/playlist.m3u8?DVR=
|
||||
@@ -397,12 +342,8 @@ http://51.254.47.72:1935/piera/smil:piera.smil/master.m3u8
|
||||
https://mdstrm.com/live-stream-playlist/629a63ae8df27c082901f78b.m3u8
|
||||
#EXTINF:-1 tvg-id="POPWorldTV.es",POP World TV (720p)
|
||||
https://janus.xpbroadcasting.com:8443/hls/popworld.m3u8
|
||||
#EXTINF:-1 tvg-id="PopularTVCantabria.es",Popular TV Cantabria (576p) [Not 24/7]
|
||||
https://limited12.todostreaming.es/live/ptvcantabria-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="PopularTVMelilla.es",Popular TV Melilla (1080p) [Not 24/7]
|
||||
http://5940924978228.streamlock.net:1935/8009/8009/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="PopularTVMelilla.es",Popular TV Melilla (1080p) [Not 24/7]
|
||||
https://5940924978228.streamlock.net/8009/8009/master.m3u8
|
||||
#EXTINF:-1 tvg-id="PopularTVMurcia.es" http-referrer="https://player.streamingconnect.com/",Popular TV Murcia (1080p) [Not 24/7]
|
||||
#EXTVLCOPT:http-referrer=https://player.streamingconnect.com/
|
||||
https://cloud.fastchannel.es/mic/manifiest/populartvrm.m3u8
|
||||
@@ -424,10 +365,6 @@ https://bit.controlstreams.com:5443/LiveApp/streams/punt3.m3u8
|
||||
http://185.81.77.4/BocairentTV/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RadioCarnavalTV.es",Radio Carnaval TV (720p) [Not 24/7]
|
||||
https://eu1.servers10.com:8081/8116/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RadioRutasdelPeru.es",Radio Rutas del Perú (360p) [Not 24/7]
|
||||
https://tv.portalexpress.es:3731/stream/play.m3u8
|
||||
#EXTINF:-1 tvg-id="TelevisionMelilla.es",Radio Televisión Melilla (720p) [Not 24/7]
|
||||
https://tvmelilla-hls-rm-lw.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RadioTelevisionMogan.es",Radio Televisión Mogán (1080p)
|
||||
https://cloudvideo.servers10.com:8081/8028/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RakutenViki.es",Rakuten Viki (1080p)
|
||||
@@ -451,8 +388,6 @@ https://vidartv2.todostreaming.es/live/radiovida-emisiontvhd.m3u8
|
||||
#EXTINF:-1 tvg-id="RTVCCardedeu.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",RTVC Cardedeu (1080p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://liveingesta118.cdnmedia.tv/cardedeutvlive/smil:live.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RadioTelevisionCeuta.es",RTVCE (1080p)
|
||||
https://cdnlivevlc.codev8.net/rtvcelive/smil:channel1.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="SalTelevision.es",Sal Televisión (720p)
|
||||
https://cloudvideo.servers10.com:8081/8254/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SevillaFCTV.es",Sevilla FC TV (360p) [Not 24/7]
|
||||
@@ -461,25 +396,20 @@ https://open.http.mp.streamamg.com/p/3001314/sp/300131400/playManifest/entryId/0
|
||||
https://d2glyu450vvghm.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-21u4g5cjglv02/sm.m3u8
|
||||
#EXTINF:-1 tvg-id="SolidariaTV.es",Solidaria TV (720p)
|
||||
https://canadaremar2.todostreaming.es/live/solidariatv-webhd.m3u8
|
||||
#EXTINF:-1 tvg-id="SpektraTV.es",SpektraTV (720p)
|
||||
https://cloudvideo.servers10.com:8081/8136/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SpektraTV.es@SD",SpektraTV (720p)
|
||||
https://cloudvideo.servers10.com:8081/8026/tracks-v1a1/index.m3u8
|
||||
#EXTINF:-1 tvg-id="STZTelebista.es",STZ Telebista (1080p)
|
||||
https://cloudvideo.servers10.com:8081/stztelebista/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SX3.es",SX3 (1080p) [Geo-blocked]
|
||||
https://directes-tv-cat.3catdirectes.cat/live-origin/super3-hls/master.m3u8
|
||||
#EXTINF:-1 tvg-id="SX3.es",SX3 (1080p) [Geo-blocked]
|
||||
https://directes-tv-es.3catdirectes.cat/live-origin/super3-hls/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Tac12.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",Tac12 (720p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://ingest1-video.streaming-pro.com/nimble/tac12/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Taroteame.es",Tarotéame (576p)
|
||||
https://5d2733224ac48.streamlock.net/taroteame/tarot_web/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TarotVision.es",TarotVisión (576p)
|
||||
https://stream.andalhost.com/hls/tarotvision.m3u8
|
||||
#EXTINF:-1 tvg-id="TBNEspana.es",TBN España (576p)
|
||||
https://edge.xn--tbnespaa-j3a.es/LiveApp/streams/tbnlive.m3u8
|
||||
#EXTINF:-1 tvg-id="TEF.es",TEF (540p)
|
||||
https://5940924978228.streamlock.net/EIVISSA_2/EIVISSA_2/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Tele7.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",Tele 7 (720p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://ingest2-video.streaming-pro.com/tele7_ABR/stream/playlist.m3u8
|
||||
@@ -492,12 +422,8 @@ https://video.telesafor.com/hls/video.m3u8
|
||||
https://tbilbo.dyndns.org/hls/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="Teledeporte.es",Teledeporte (1080p)
|
||||
https://d1cctoeg0n48w5.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-mnixw9wn5ugmv/TeledeporteES.m3u8
|
||||
#EXTINF:-1 tvg-id="Teledeporte.es",Teledeporte (1080p) [Geo-blocked]
|
||||
https://rtvelivestream.akamaized.net/rtvesec/tdp/tdp_main.m3u8
|
||||
#EXTINF:-1 tvg-id="Teleganes.es",Teleganés (720p)
|
||||
https://nlb2-live.emitstream.com/hls/5z6oj7ziwxzfnj78vg2m/master.m3u8
|
||||
#EXTINF:-1 tvg-id="TeleGilena.es",TeleGilena (360p) [Not 24/7]
|
||||
https://5940924978228.streamlock.net/Directo1/Directo1/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Telemadrid.es",Telemadrid (720p)
|
||||
https://telemadrid-23-secure2.akamaized.net/master.m3u8
|
||||
#EXTINF:-1 tvg-id="TelemadridINT.es",Telemadrid Internacional (720p)
|
||||
@@ -515,8 +441,6 @@ https://cloud.fastchannel.es/mic/manifiest/hls/televigo/televigo.m3u8
|
||||
https://cloud.streamingconnect.tv/hls/telearanda/telearanda.m3u8
|
||||
#EXTINF:-1 tvg-id="TelevisionConsciente.es",Televisión Consciente (1080p)
|
||||
https://cdn318.fractalmedia.es/318/live/hls/tvc/master.m3u8
|
||||
#EXTINF:-1 tvg-id="Torrevision.es",Torrevisión (270p)
|
||||
https://api.new.livestream.com/accounts/2614936/events/10365077/live.m3u8
|
||||
#EXTINF:-1 tvg-id="Trece.es",Trece TV (576p)
|
||||
https://live-edge-bhs-1.cdn.enetres.net/091DB7AFBD77442B9BA2F141DCC182F5021/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Trece.es",Trece TV (576p)
|
||||
@@ -533,8 +457,6 @@ https://directes-tv-int.3catdirectes.cat/live-origin/tvi-hls/master.m3u8
|
||||
https://directes-tv-cat.3catdirectes.cat/live-origin/tvi-hls/master.m3u8
|
||||
#EXTINF:-1 tvg-id="TV3CAT.es",TV3CAT (1080p) [Geo-blocked]
|
||||
https://directes-tv-es.3catdirectes.cat/live-origin/tvi-hls/master.m3u8
|
||||
#EXTINF:-1 tvg-id="TV4LaVall.es",TV4 La Vall (1080p)
|
||||
https://limited09.todostreaming.es/live/tarson-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="TVAlmassora.es",TV Almassora (720p)
|
||||
https://live.fullsport.es/hls/tvalmassora.m3u8
|
||||
#EXTINF:-1 tvg-id="TVA.es",TV Artequatre (576p)
|
||||
@@ -547,12 +469,8 @@ https://liveingesta318.cdnmedia.tv/berguedatvlive/smil:migracion.smil/playlist.m
|
||||
https://liveingesta318.cdnmedia.tv/costabravatvlive/smil:live.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="FamypancTV.es@HD",Tv Famypanc HD (1080p)
|
||||
https://panel.host-live.com:19360/8042/8042.m3u8
|
||||
#EXTINF:-1 tvg-id="TVFerrol.es",TV Ferrol (576p)
|
||||
https://directo.tvferrol.es/tv.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGirona.es",TV Girona (1080p)
|
||||
http://ventdelnord.tv:8080/girona/directe.m3u8
|
||||
#EXTINF:-1 tvg-id="TVHellin.es",TV Hellín (720p)
|
||||
https://hellin-hls-live.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVLHospitalet.es" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160",TV L'Hospitalet (1080p)
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 CrKey/1.44.191160
|
||||
https://liveingesta318.cdnmedia.tv/tvhospitaletlive/smil:tvhospitalet.smil/playlist.m3u8?DVR=
|
||||
@@ -564,46 +482,16 @@ https://liveingesta318.cdnmedia.tv/tvripolleslive/smil:live.smil/playlist.m3u8?D
|
||||
https://ingest1-video.streaming-pro.com/canaltaronja/sabadell/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TelevisiondeSanVicente.es",TV San Vicente (1080p)
|
||||
https://emision.arpamedia.es:4343/hls/tvsanvicenteweb.m3u8
|
||||
#EXTINF:-1 tvg-id="TVVegaBaja.es",TV Vega Baja (720p)
|
||||
https://streaming.tvt.es:8080/hls/tvb_interno/live.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCentroAndalucia.es",TVCentro Andalucía (720p) [Not 24/7]
|
||||
https://5fa5de1a545ae.streamlock.net/8052/8052/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVEInternacionalAmerica.es@SD",TVE Internacional America (720p)
|
||||
http://190.11.225.124:5000/live/tve_hd/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TelevisiondeGalicia.es",TVG (720p)
|
||||
https://europa-crtvg.flumotion.com/crtvg/europa_high/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVG2.es",TVG2 (720p) [Not 24/7]
|
||||
https://events2-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVG2.es",TVG2 (720p) [Not 24/7]
|
||||
https://events3-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGCativos.es",TVG Cativ@s (720p)
|
||||
https://xabarintv-r2-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGCultural.es",TVG Cultural (720p)
|
||||
https://cultural-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGEvento1.es",TVG Evento 1 (720p) [Not 24/7]
|
||||
https://events1-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGEvento4.es",TVG Evento 4 (720p) [Not 24/7]
|
||||
https://events4-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGEvento5.es",TVG Evento 5 (720p) [Not 24/7]
|
||||
https://amodino-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGInfantil.es",TVG Infantil (720p)
|
||||
https://infantil-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGMocinos.es",TVG Mociñ@s (720p)
|
||||
https://xabarintv-r3-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGMomento.es",TVG Momentos G (720p)
|
||||
https://momentog-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGMusigal.es",TVG Musigal (480p)
|
||||
https://musigal-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVGPequerrechos.es",TVG Pequerrech@s (720p)
|
||||
https://xabarintv-r1-crtvg.flumotion.com/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVMCordoba.es",TVM Córdoba (1080p) [Not 24/7]
|
||||
http://teledifusion.tv/cordoba/cordobalive/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVMCordoba.es",TVM Córdoba (1080p) [Not 24/7]
|
||||
https://5924d3ad0efcf.streamlock.net/cordoba/cordobalive/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVReus.es",TVReus (720p) [Not 24/7]
|
||||
https://eu1.servers10.com:8081/8166/index.m3u8
|
||||
#EXTINF:-1 tvg-id="UDTV.es",UD Las Palmas TV (1080p) [Not 24/7]
|
||||
https://cdn318.fractalmedia.es/live319/hls/cudtv/high/index.m3u8
|
||||
#EXTINF:-1 tvg-id="UneVinalopo.es",Une Vinalopó (576p) [Not 24/7]
|
||||
https://streamingtvi.gestec-video.com/hls/unesd.m3u8
|
||||
#EXTINF:-1 tvg-id="UniversTV.es",Univers TV (720p)
|
||||
@@ -615,12 +503,6 @@ https://5940924978228.streamlock.net/j_Directo2/mp4:j_Directo2/playlist.m3u8
|
||||
https://liveingesta318.cdnmedia.tv/vallesvisiotvlive/smil:live.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="VentdelnordTV.es",Ventdelnord TV (404p)
|
||||
http://ventdelnord.tv:8080/hls/directe.m3u8
|
||||
#EXTINF:-1 tvg-id="VerbenaTV.es",Verbena TV (1080p)
|
||||
https://streamtv2.elitecomunicacion.cloud:3144/live/verbenatvlive.m3u8
|
||||
#EXTINF:-1 tvg-id="VinxTV.es",Vinx TV (1080p)
|
||||
https://tv.radiocast.es:5443/vinxtv/streams/vinxtvlive.m3u8
|
||||
#EXTINF:-1 tvg-id="Vision6TV.es",Visión 6 TV (720p) [Not 24/7]
|
||||
https://secure3.todostreaming.es/live/visionseis-livestream.m3u8
|
||||
#EXTINF:-1 tvg-id="VivaMurciaTV.es",Viva Murcia TV (720p)
|
||||
http://185.36.211.142:8080/tmp_hls/viva/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Vivamovil.es",Vivamóvil (720p)
|
||||
@@ -634,8 +516,15 @@ https://janus.xpbroadcasting.com:8443/hls/xptv1.m3u8
|
||||
https://janus.xpbroadcasting.com:8443/hls/xptv2.m3u8
|
||||
#EXTINF:-1 tvg-id="XPTVUS.es",XPTV US (720p)
|
||||
https://janus.xpbroadcasting.com:8443/hls/xptvUS.m3u8
|
||||
#EXTINF:-1 tvg-id="ZafraTV.es" http-referrer="https://player.streamingconnect.com/",Zafra TV (1080p)
|
||||
#EXTVLCOPT:http-referrer=https://player.streamingconnect.com/
|
||||
https://cloud.fastchannel.es/mic/manifiest/hls/radiotvzafra/radiotvzafra.m3u8
|
||||
#EXTINF:-1 tvg-id="AtreseriesInternacional.es@SD",Atreseries Internacional (480p)
|
||||
http://181.78.208.254:8080/play/a0d5/index.m3u8
|
||||
http://38.180.133.31:8000/play/a0ko/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BCNGospelTV.es",BCN Gospel TV (1080p)
|
||||
https://live1.ovalcast.com:3641/live/bcngospeltvlive.m3u8
|
||||
#EXTINF:-1 tvg-id="Antena3Internacional.es@SD",Antena 3 Internacional (480p)
|
||||
http://38.180.133.31:8000/play/a0ki/index.m3u8
|
||||
#EXTINF:-1 tvg-id="AragonTV.es@SD",Aragon TV (720p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/aragontv/browser-HLS8/aragontv.m3u8
|
||||
#EXTINF:-1 tvg-id="24HorasInternacional.es@SD",24 Horas Internacional
|
||||
https://viamotionhsi.netplus.ch/live/eds/canal24horas/browser-HLS8/canal24horas.m3u8
|
||||
#EXTINF:-1 tvg-id="TVEInternacionalEuropeAsia.es@SD",TVE Internacional Europe-Asia
|
||||
https://viamotionhsi.netplus.ch/live/eds/tveinternacional/browser-HLS8/tveinternacional.m3u8
|
||||
|
||||
@@ -283,3 +283,53 @@ https://viamotionhsi.netplus.ch/live/eds/tmc/browser-HLS8/tmc.m3u8
|
||||
https://viamotionhsi.netplus.ch/live/eds/hd1/browser-HLS8/hd1.m3u8
|
||||
#EXTINF:-1 tvg-id="TFX.fr@SD",TFX (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/nt1/browser-HLS8/nt1.m3u8
|
||||
#EXTINF:-1 tvg-id="RMCStory.fr@SD",RMC Story (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/numero23/browser-HLS8/numero23.m3u8
|
||||
#EXTINF:-1 tvg-id="RMCDecouverte.fr@SD",RMC Decouverte (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/rmcdecouverte/browser-HLS8/rmcdecouverte.m3u8
|
||||
#EXTINF:-1 tvg-id="Animaux.fr@SD",Animaux
|
||||
https://viamotionhsi.netplus.ch/live/eds/animaux/browser-HLS8/animaux.m3u8
|
||||
#EXTINF:-1 tvg-id="AB1.fr@SD",AB1
|
||||
https://viamotionhsi.netplus.ch/live/eds/ab1/browser-HLS8/ab1.m3u8
|
||||
#EXTINF:-1 tvg-id="LCI.fr@HD",LCI HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/lci/browser-HLS8/lci.m3u8
|
||||
#EXTINF:-1 tvg-id="KTO.fr@SD",KTO
|
||||
https://viamotionhsi.netplus.ch/live/eds/kto/browser-HLS8/kto.m3u8
|
||||
#EXTINF:-1 tvg-id="BFMBusiness.fr@SD",BFM Business
|
||||
https://viamotionhsi.netplus.ch/live/eds/bfmbusiness/browser-HLS8/bfmbusiness.m3u8
|
||||
#EXTINF:-1 tvg-id="BFMTV.fr@SD",BFM TV
|
||||
https://viamotionhsi.netplus.ch/live/eds/bfmtv/browser-HLS8/bfmtv.m3u8
|
||||
#EXTINF:-1 tvg-id="TV5MondeFranceBelgiumSwitzerlandMonaco.fr@HD",TV5Monde France Belgium Switzerland Monaco HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/tv5mondefbs/browser-HLS8/tv5mondefbs.m3u8
|
||||
#EXTINF:-1 tvg-id="LCP.fr@SD",LCP
|
||||
https://viamotionhsi.netplus.ch/live/eds/lcp/browser-HLS8/lcp.m3u8
|
||||
#EXTINF:-1 tvg-id="EuronewsFrench.fr@HD",Euronews French HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/euronews/browser-HLS8/euronews.m3u8
|
||||
#EXTINF:-1 tvg-id="France24.fr@French",France 24
|
||||
https://viamotionhsi.netplus.ch/live/eds/france24/browser-HLS8/france24.m3u8
|
||||
#EXTINF:-1 tvg-id="W9.fr@SD",W9
|
||||
https://viamotionhsi.netplus.ch/live/eds/w9/browser-dash/w9.mpd
|
||||
#EXTINF:-1 tvg-id="TFX.fr@SD",TFX
|
||||
https://viamotionhsi.netplus.ch/live/eds/nt1/browser-dash/nt1.mpd
|
||||
#EXTINF:-1 tvg-id="TF1SeriesFilms.fr@SD",TF1 Series Films
|
||||
https://viamotionhsi.netplus.ch/live/eds/hd1/browser-dash/hd1.mpd
|
||||
#EXTINF:-1 tvg-id="RMCDecouverte.fr@SD",RMC Decouverte
|
||||
https://viamotionhsi.netplus.ch/live/eds/rmcdecouverte/browser-dash/rmcdecouverte.mpd
|
||||
#EXTINF:-1 tvg-id="M6.fr@SD",M6 SD
|
||||
https://viamotionhsi.netplus.ch/live/eds/m6hd/browser-dash/m6hd.mpd
|
||||
#EXTINF:-1 tvg-id="LCI.fr@HD",LCI HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/lci/browser-dash/lci.mpd
|
||||
#EXTINF:-1 tvg-id="KTO.fr@SD",KTO
|
||||
https://viamotionhsi.netplus.ch/live/eds/kto/browser-dash/kto.mpd
|
||||
#EXTINF:-1 tvg-id="Gulli.fr@SD",Gulli
|
||||
https://viamotionhsi.netplus.ch/live/eds/gulli/browser-dash/gulli.mpd
|
||||
#EXTINF:-1 tvg-id="CStar.fr@SD",C Star
|
||||
https://viamotionhsi.netplus.ch/live/eds/d17/browser-dash/d17.mpd
|
||||
#EXTINF:-1 tvg-id="Animaux.fr@SD",Animaux
|
||||
https://viamotionhsi.netplus.ch/live/eds/animaux/browser-dash/animaux.mpd
|
||||
#EXTINF:-1 tvg-id="6ter.fr@SD",6ter
|
||||
https://viamotionhsi.netplus.ch/live/eds/6ter/browser-dash/6ter.mpd
|
||||
#EXTINF:-1 tvg-id="AB1.fr@SD",AB1
|
||||
https://viamotionhsi.netplus.ch/live/eds/ab1/browser-dash/ab1.mpd
|
||||
#EXTINF:-1 tvg-id="CanalJ.fr@HD",Canal J HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/canalj/browser-HLS8/canalj.m3u8
|
||||
|
||||
@@ -287,3 +287,7 @@ https://cdn.gunadarma.ac.id/streams/ugtv/ingestugtv.m3u8
|
||||
https://ams.juraganstreaming.com:5443/LiveApp/streams/wesaltv.m3u8
|
||||
#EXTINF:-1 tvg-id="ZeeBioskop.id",Zee Bioskop (360p) [Geo-blocked]
|
||||
http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch161)/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SurabayaTV.id@SD" http-referrer="https://surabayatv35uhf.com/live-streaming/",Surabaya TV (1080p)
|
||||
https://e.siar.us/live/surabayatv.m3u8
|
||||
#EXTINF:-1 tvg-id="BanjarTV.id@SD" http-referrer="https://banjartv.com",Banjar TV (720p) [Not 24/7]
|
||||
https://banjartv.siar.us/banjartv/live/playlist.m3u8
|
||||
|
||||
@@ -166,8 +166,8 @@ https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01448-samsungin-dabanggin-samsung
|
||||
https://live-dangal.akamaized.net/liveabr/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="DarshanaTV.in@SD",Darshana TV (720p)
|
||||
https://cdn-2.pishow.tv/live/1453/master.m3u8
|
||||
#EXTINF:-1 tvg-id="DDArunPrabha.in",DD Arun Prabha
|
||||
https://d2lk5u59tns74c.cloudfront.net/out/v1/308556d9fd1246adb479ef012a39bbfe/index_3.m3u8
|
||||
#EXTINF:-1 tvg-id="DDArunPrabha.in@SD",DD Arun Prabha (360p)
|
||||
https://d2lk5u59tns74c.cloudfront.net/out/v1/308556d9fd1246adb479ef012a39bbfe/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DDAssam.in",DD Assam
|
||||
https://d2lk5u59tns74c.cloudfront.net/out/v1/d380bf5c167b4319a46cdd8204bc26b2/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DDAssam.in",DD Assam
|
||||
@@ -196,14 +196,14 @@ https://cdn-6.pishow.tv/live/9/master.m3u8
|
||||
https://cdn-1.pishow.tv/live/31/master.m3u8
|
||||
#EXTINF:-1 tvg-id="DDMalayalam.in",DD Malayalam
|
||||
https://d3eyhgoylams0m.cloudfront.net/v1/manifest/93ce20f0f52760bf38be911ff4c91ed02aa2fd92/ed7bd2c7-8d10-4051-b397-2f6b90f99acb/562ee8f9-9950-48a0-ba1d-effa00cf0478/2.m3u8
|
||||
#EXTINF:-1 tvg-id="DDManipur.in",DD Manipur
|
||||
https://ddmanipur.org/hls/stream1.m3u8
|
||||
#EXTINF:-1 tvg-id="DDMeghalaya.in",DD Meghalaya
|
||||
https://d3eyhgoylams0m.cloudfront.net/v1/manifest/93ce20f0f52760bf38be911ff4c91ed02aa2fd92/ed7bd2c7-8d10-4051-b397-2f6b90f99acb/dafc23f6-c3d9-44d7-8d31-27aa80efe0b7/2.m3u8
|
||||
#EXTINF:-1 tvg-id="DDManipur.in@SD",DD Manipur (504p)
|
||||
https://d2lk5u59tns74c.cloudfront.net/out/v1/8b75afc6576f450e8f554b6c877681d2/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DDMeghalaya.in@SD",DD Meghalaya (504p)
|
||||
https://d3qs3d2rkhfqrt.cloudfront.net/out/v1/4f81bc8d13dd49b484da35988abb8729/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DDMizoram.in",DD Mizoram
|
||||
https://d3eyhgoylams0m.cloudfront.net/v1/manifest/93ce20f0f52760bf38be911ff4c91ed02aa2fd92/ed7bd2c7-8d10-4051-b397-2f6b90f99acb/5f0e3651-3393-41d2-a137-a4513be8f3d5/2.m3u8
|
||||
#EXTINF:-1 tvg-id="DDNagaland.in",DD Nagaland
|
||||
https://d3eyhgoylams0m.cloudfront.net/v1/manifest/93ce20f0f52760bf38be911ff4c91ed02aa2fd92/ed7bd2c7-8d10-4051-b397-2f6b90f99acb/4437588d-6c41-4a61-91ca-33a6900617a6/2.m3u8
|
||||
#EXTINF:-1 tvg-id="DDNagaland.in@SD",DD Nagaland (504p)
|
||||
https://d2lk5u59tns74c.cloudfront.net/out/v1/29c92e0bef954a6d9b0908d1be29c1f0/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DDNational.in@HD",DD National HD (1080p)
|
||||
https://d3qs3d2rkhfqrt.cloudfront.net/out/v1/40492a64c1db4a1385ba1a397d357d3a/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DDNews.in@SD",DD News (1080p)
|
||||
@@ -308,8 +308,8 @@ http://akalmultimedia.net:1935/gdnslive/gdns-live/chunklist.m3u8
|
||||
https://server.livelegitpro.in/globalpunjab/globalpunjab/index.m3u8
|
||||
#EXTINF:-1 tvg-id="GlobalPunjab.in",Global Punjab (720p) [Not 24/7]
|
||||
https://media.streambrothers.com:1936/8522/8522/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Goa365.in",Goa365 (720p)
|
||||
https://asia.mslivestream.net/mslive/f9fe659e19d111baf97526ad526b55b4.sdp/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Goa365.in@SD",Goa365 (1080p)
|
||||
https://ktismaservers.in:3086/live/goa365live.m3u8
|
||||
#EXTINF:-1 tvg-id="GoodNewsToday.in@SD",Good News Today (720p)
|
||||
https://aajtaklive.vgcdn.net/v1/master/611d79b11b77e2f571934fd80ca1413453772ac7/3196cced-ce29-4219-9809-f07ccdaa02b9/vglive-sk-848805/master.m3u8
|
||||
#EXTINF:-1 tvg-id="GoodShepherdTV.in",Good Shepherd TV (720p)
|
||||
@@ -511,12 +511,12 @@ https://cdn-3.pishow.tv/live/1481/master.m3u8
|
||||
https://5dd3981940faa.streamlock.net/mercytv/mercytv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MetroTV.in",Metro TV (576p)
|
||||
https://2nbyjxw5l53k-hls-live.qezycdn.com/metrotv/live.stream/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Mh1Music.in",MH One Music (1080p)
|
||||
https://mhlive.paramountinfosystem.com/mhonemusictest/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Mh1News.in",MH One News (1080p)
|
||||
https://mhlive.paramountinfosystem.com/mhonetest/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MHOneShraddha.in",MH One Shraddha (1080p)
|
||||
https://mhlive.paramountinfosystem.com/mhoneshraddhatest/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Mh1Music.in@SD",Mh 1 Music (720p)
|
||||
https://mhonemusic.com/hls/1/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="Mh1News.in@SD",Mh 1 News (1080p)
|
||||
https://mhonenews.in/hls/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="MHOneShraddha.in@SD",MH One Shraddha (720p)
|
||||
https://mhoneshaddha.com/hls/1/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="MirrorNow.in",Mirror Now (720p)
|
||||
https://pubads.g.doubleclick.net/ssai/event/DXkHhH2QSnma-HnE3QJqlA/master.m3u8
|
||||
#EXTINF:-1 tvg-id="MKSix.in@SD",MK Six (720p) [Not 24/7]
|
||||
@@ -803,8 +803,8 @@ https://cdn-1.pishow.tv/live/276/master.m3u8
|
||||
https://yuppftalive.akamaized.net/080823/subhartitv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="SubhavaarthaTV.in",Subhavaartha TV (720p)
|
||||
https://2mk9qae4rwyb-hls-live.wmncdn.net/shubhavartha/live.stream/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="SudarshanNews.in",Sudarshan News (720p)
|
||||
https://ott.livelegitpro.in/pusa/sudarshantv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SudarshanNews.in@SD",Sudarshan News (1080p)
|
||||
https://ott.livelegitpro.in/sudarshannews/sudarshannews/tracks-v1/index.fmp4.m3u8
|
||||
#EXTINF:-1 tvg-id="SVBC2.in@SD",SVBC 2 (576p)
|
||||
https://yuppftalive.akamaized.net/080823/svbc2tamil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="SVBC3.in",SVBC 3 (720p)
|
||||
@@ -976,8 +976,8 @@ https://vg-zeefta.akamaized.net/ptnr-yupptv/title-zeepunjabharyanahima/v1/master
|
||||
https://vg-zeefta.akamaized.net/ptnr-yupptv/title-zeerajashthannews/v1/master/611d79b11b77e2f571934fd80ca1413453772ac7/8e864b9a-1681-41a0-99a6-387490bc5b24/main.m3u8
|
||||
#EXTINF:-1 tvg-id="ZeeSalaam.in",Zee Salaam (720p)
|
||||
https://d3i8oqsdv88b3m.cloudfront.net/out/v1/08f6360f9104421f90319460c0e03f11/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ZeeUttarPradeshUttarakhand.in",Zee Uttar Pradesh/Uttarakhand (720p)
|
||||
https://livetv-channels.b-cdn.net/8076/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="ZeeUttarPradeshUttarakhand.in@SD",Zee Uttar Pradesh/Uttarakhand (720p)
|
||||
https://duw35ict5q7th.cloudfront.net/index_3.m3u8
|
||||
#EXTINF:-1 tvg-id="ZillarBartaNews.in",ZillarBarta News (720p)
|
||||
https://live-stream.utkalbongo.com/utkalbongo/stream18/hls/zillarbartalive.m3u8
|
||||
#EXTINF:-1 tvg-id="ZillarBartaNews.in",ZillarBarta News
|
||||
@@ -986,3 +986,29 @@ https://server.zillarbarta.com/zillarbarta/index.m3u8
|
||||
http://183.89.246.119:8881/play/a09a/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Zoom.in@SD",Zoom (720p)
|
||||
https://d35j504z0x2vu2.cloudfront.net/v1/master/0bc8e8376bd8417a1b6761138aa41c26c7309312/zoom-tv/master.m3u8
|
||||
#EXTINF:-1 tvg-id="HebronTV.in@SD",Hebron TV (432p)
|
||||
https://account20.livebox.co.in/charleshls/live.m3u8
|
||||
#EXTINF:-1 tvg-id="ZeeCinema.in@SD",Zee Cinema (1080p) [Geo-blocked]
|
||||
https://amg17931-zee-amg17931c5-samsung-th-5696.playouts.now.amagi.tv/playlist/amg17931-asiatvusaltdfast-zeecinema-samsungth/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="9XJalwa.in@SD",9X Jalwa (1080p)
|
||||
https://d35j504z0x2vu2.cloudfront.net/v1/master/0bc8e8376bd8417a1b6761138aa41c26c7309312/9x-jalwa/master.m3u8
|
||||
#EXTINF:-1 tvg-id="AsianetPlus.in@SD",Asianet Plus (1080p)
|
||||
http://217.20.112.199/asianet/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ChumbakTV.in@SD",Chumbak TV (720p)
|
||||
https://cdn-1.pishow.tv/live/1451/master.m3u8
|
||||
#EXTINF:-1 tvg-id="DDHimachalPradesh.in@SD",DD Himachal Pradesh (504p)
|
||||
https://d3qs3d2rkhfqrt.cloudfront.net/out/v1/afd2e335b0ba40eb9bdf1096118c6ede/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RajPariwar.in@SD",Raj Pariwar (1080p) [Not 24/7]
|
||||
https://livestream.rajtvnet.in/hlslive/Admin/px08241089/live/Raj_Pariwar/master_1.m3u8
|
||||
#EXTINF:-1 tvg-id="RajNewsTelugu.in@SD",Raj News Telugu (1080p) [Not 24/7]
|
||||
https://livestream.rajtvnet.in/hlslive/Admin/px08241089/live/Raj_News_Telugu/master_1.m3u8
|
||||
#EXTINF:-1 tvg-id="DDTamil.in@SD",DD Tamil (1080p)
|
||||
https://d2lk5u59tns74c.cloudfront.net/out/v1/abf46b14847e45499f4a47f3a9afe93d/index.m3u8
|
||||
#EXTINF:-1 tvg-id="KolkataTV.in@SD",Kolkata TV (1080p)
|
||||
https://d35j504z0x2vu2.cloudfront.net/v1/master/0bc8e8376bd8417a1b6761138aa41c26c7309312/kolkata-tv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="HNN24x7.in@SD",HNN 24x7 (576p)
|
||||
https://ott.livelegitpro.in:9899/hnnnews/hnnnews/tracks-v1/index.fmp4.m3u8
|
||||
#EXTINF:-1 tvg-id="BharatExpress.in@SD",Bharat Express (480p)
|
||||
https://stream1.livebox.co.in/VCAREhls/live.m3u8
|
||||
#EXTINF:-1 tvg-id="MunsifTV.in@SD",Munsif TV (720p)
|
||||
https://d35j504z0x2vu2.cloudfront.net/v1/manifest/0bc8e8376bd8417a1b6761138aa41c26c7309312/munsif-tv/e5ae862b-c65c-4b17-b9a8-038853525c64/0.m3u8
|
||||
|
||||
@@ -21,8 +21,6 @@ https://familyhls.avatv.live/hls/stream.m3u8
|
||||
https://live20.bozztv.com/dvrfl05/gin-ayeneh/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CaltexTV.ir",Caltex Music (720p)
|
||||
https://video.caltexmusic.com/hls/caltextv.m3u8
|
||||
#EXTINF:-1 tvg-id="",Digi Movie [Not 24/7]
|
||||
https://fastdehost.com/live/digimovie.m3u8
|
||||
#EXTINF:-1 tvg-id="HispanTV.ir",Hispan TV
|
||||
https://cdnlive.presstv.ir/live/smil:live.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="HodHodFarsiTV.ir@SD",HodHod Farsi TV
|
||||
@@ -59,8 +57,6 @@ https://ca-rt.onetv.app:8443/ITN/index-0.m3u8
|
||||
https://ca1.buximedia.com/itv/life/tracks-v1a1/mono.m3u8
|
||||
#EXTINF:-1 tvg-id="ITVPersianMusic.ir",ITV Persian Music (1080p)
|
||||
https://ca1.buximedia.com/itv/persian/tracks-v1a1/mono.m3u8
|
||||
#EXTINF:-1 tvg-id="",King Movie [Not 24/7]
|
||||
https://fastdehost.com/live/kingmovie.m3u8
|
||||
#EXTINF:-1 tvg-id="MihanTV.ir",Mihan TV (720p)
|
||||
https://iptv.mihantv.com/mihantv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MohabatTV.ir",Mohabat TV (540p)
|
||||
@@ -96,16 +92,6 @@ https://live20.bozztv.com/gin-36bay3/gin-saharafgh/tracks-v1a1/mono.m3u8
|
||||
https://live20.bozztv.com/dvrfl05/gin-saharurdu/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SalamatTV.ir@SD",Salamat TV
|
||||
https://live20.bozztv.com/dvrfl05/gin-iribsalamat/index.m3u8
|
||||
#EXTINF:-1 tvg-id="",Serial Baran1 [Not 24/7]
|
||||
https://fastdehost.com/live/serialbaran1.m3u8
|
||||
#EXTINF:-1 tvg-id="",Serial Baran2 [Not 24/7]
|
||||
https://server3.fastdehost.com/live/serialbaran2.m3u8
|
||||
#EXTINF:-1 tvg-id="",Serial Baran3 [Not 24/7]
|
||||
https://server3.fastdehost.com/live/serialbaran3.m3u8
|
||||
#EXTINF:-1 tvg-id="",Serial Baran4 [Not 24/7]
|
||||
https://server3.fastdehost.com/live/serialbaran4.m3u8
|
||||
#EXTINF:-1 tvg-id="",Serial Baran5 [Not 24/7]
|
||||
https://server4.fastdehost.com/live/serialbaran5.m3u8
|
||||
#EXTINF:-1 tvg-id="SNNTV.ir",SNN TV (720p) [Not 24/7]
|
||||
https://live2.snn.ir/hls/snn2_hd720/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TBNNejatTV.ir",TBN Nejat TV (720p)
|
||||
|
||||
@@ -43,10 +43,6 @@ https://59d7d6f47d7fc.streamlock.net/auroraarte/auroraarte/playlist.m3u8
|
||||
https://ed05.top-ix.org/avtvlive/azzurra/streaming/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="BikeChannel.it",Bike (720p)
|
||||
http://backup.superstreaming.inaria.me/BikeSmartMobilityDTT/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Boing.it",Boing (720p)
|
||||
https://liveturner.akamaized.net/75a4d1a90e744fa5b9901a1853d2c47f/eu-central-1/6284318116001/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Boing.it",Boing Italy [Geo-blocked]
|
||||
https://live2.msf.cdn.mediaset.net/content/hls_h0_clr_vos/live/channel(kb)/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BomChannel.it",Bom Channel
|
||||
https://5f22d76e220e1.streamlock.net/BOMCHANNEL/BOMCHANNEL/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CafeTV24.it",CafeTV24 (720p)
|
||||
@@ -751,5 +747,11 @@ https://stream.cp.ets-sistemi.it:1936/profservtv/profservtv/playlist.m3u8
|
||||
https://5f22d76e220e1.streamlock.net/canale5/canale5/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="ZerounoTVNews.it",Zerouno TV News (720p)
|
||||
https://5db313b643fd8.streamlock.net/ZerounoTVEventi/ZerounoTVEventi/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="JuniorTV.it@SD",Junior TV (1080p)
|
||||
#EXTINF:-1 tvg-id="IuniorTV.it@SD",Iunior TV (1080p)
|
||||
https://5f22d76e220e1.streamlock.net/iuniortv/iuniortv/chunklist_w774879328.m3u8
|
||||
#EXTINF:-1 tvg-id="BergamoTV.it@SD",Bergamo TV (1080p)
|
||||
https://db142859fd5541b09de25d6507f1f2d3.msvdn.net/live/S17501676/oIxAsgEEA46M/playlist_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="AntennaSudExtra.it@SD",Antenna Sud Extra (720p)
|
||||
https://live.antennasudwebtv.it:9443/hls/vod92.m3u8
|
||||
#EXTINF:-1 tvg-id="AntennaSud.it@SD",Antenna Sud (720p)
|
||||
https://live.antennasudwebtv.it:9443/hls/vod.m3u8
|
||||
|
||||
@@ -54,3 +54,7 @@ http://171.244.62.178/jptv2/get.php?id=4SlJSS46Vw5igmOdvfKMww==
|
||||
http://171.244.62.178/jptv2/get.php?id=hnsnBqHDt2EXQupW2soBjw==
|
||||
#EXTINF:-1 tvg-id="JOAKDTV.jp",JOAK-DTV
|
||||
http://171.244.62.178/jptv2/get.php?id=mCOs5Hrdk31FTwR6IJj_hA==
|
||||
#EXTINF:-1 tvg-id="JOIXDTV.jp@HD",JOIX-DTV (720p)
|
||||
https://mt01.utako.moe/ytv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="NHKWorldJapan.jp@HD",NHK World-Japan HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/nhk/browser-HLS8/nhk.m3u8
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="ZIZTV.kn",ZIZ TV (720p)
|
||||
https://media.slactech.com:1936/ZIZDirect/ZIZDirect/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TelevisionCaribbean.kn@SD",Television Caribbean (1080p)
|
||||
https://live.kingdom-tv.com:3545/stream/play.m3u8
|
||||
|
||||
@@ -67,3 +67,5 @@ https://cdn.catiacast.video/abr/ed8f807e2548db4507d2a6f4ba0c4a06/playlist.m3u8
|
||||
https://cdn.catiacast.video/abr/9436b5ab3c1171ab04a59af11951292f/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="VoiceofLebanon.lb",Voice of Lebanon (1080p)
|
||||
https://svs.itworkscdn.net/vdltvlive/vdltv.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="LBCInternational.lb@SD",LBC International
|
||||
https://samaflix.com:12103/channel2/tracks-v1a1/mono.m3u8
|
||||
|
||||
@@ -29,3 +29,7 @@ https://live-edge.rtl.lu/channel1/smil:channel1/playlist.m3u8
|
||||
https://stream.rtl.lu/data/live/tele/rtltodayradio/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RTLZwee.lu",RTL Zwee (1080p)
|
||||
https://live-edge.rtl.lu/channel2/smil:channel2/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RTL9.lu@SD",RTL9
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtl9/browser-HLS8/rtl9.m3u8
|
||||
#EXTINF:-1 tvg-id="RTL9.lu@SD",RTL9
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtl9/browser-dash/rtl9.mpd
|
||||
|
||||
@@ -73,3 +73,9 @@ https://136044159.r.cdnsun.net/storychannel.m3u8
|
||||
https://cdn.live.easybroadcast.io/ts_corp/73_tamazight_tccybxt/playlist_dvr.m3u8
|
||||
#EXTINF:-1 tvg-id="TamazightTV.ma@SD",Tamazight TV
|
||||
https://fl1002.bozztv.com/ga-tamazight8/index.m3u8
|
||||
#EXTINF:-1 tvg-id="AlMaghribia.ma@SD",Al Maghribia
|
||||
https://viamotionhsi.netplus.ch/live/eds/almaghribia/browser-HLS8/almaghribia.m3u8
|
||||
#EXTINF:-1 tvg-id="AlMaghribia.ma@SD",Al Maghribia
|
||||
https://viamotionhsi.netplus.ch/live/eds/almaghribia/browser-dash/almaghribia.mpd
|
||||
#EXTINF:-1 tvg-id="2M.ma@SD",2M
|
||||
https://viamotionhsi.netplus.ch/live/eds/2mmaroc/browser-dash/2mmaroc.mpd
|
||||
|
||||
@@ -69,3 +69,5 @@ https://tvr-tvrmoldova.cdn.zitec.com/live/tvrmoldova/main.m3u8
|
||||
https://storage.voceabasarabiei.md/vocea/vocea.m3u8
|
||||
#EXTINF:-1 tvg-id="ZonaM.md",Zona M (576p)
|
||||
http://62.233.57.226:8001/play/a00e
|
||||
#EXTINF:-1 tvg-id="PROTVChisinau.md",PRO TV Chisinau (360p)
|
||||
http://stream.protv.md/live/sursa-2/index.m3u8
|
||||
|
||||
@@ -15,7 +15,9 @@ http://cdn3.bcdn.rs:1935/cg2/smil:cg2.smil/playlist.m3u8
|
||||
https://parlament.rtcg.me:1936/pr/smil:parlament.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCGMNE.me",TVCG MNE (720p) [Not 24/7]
|
||||
http://cdn3.bcdn.rs:1935/cgsat/smil:cgsat.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCGMNE.me",TVCG MNE (720p) [Not 24/7]
|
||||
http://rtcg2.videostreaming.rs:1935/rtcg/rtcg.1.stream/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCGMNE.me@SD",TVCG MNE (720p) [Not 24/7]
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtcg/browser-HLS8/rtcg.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCGMNE.me",TVCG MNE (720p) [Not 24/7]
|
||||
http://rtcg2.videostreaming.rs:1935/rtcg/rtcg.2.stream/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCGMNE.me@SD",TVCG MNE
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtcg/browser-dash/rtcg.mpd
|
||||
|
||||
104
streams/mn.m3u
104
streams/mn.m3u
@@ -1,113 +1,117 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="AsianBox.mn",AsianBox (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/AsianBOX/HLS-FTA/AsianBOX.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/AsianBOX/HLSv3-FTA/AsianBOX.m3u8
|
||||
#EXTINF:-1 tvg-id="",Auto TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/AutoTV/HLS-FTA/AutoTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/AutoTV/HLSv3-FTA/AutoTV.m3u8
|
||||
#EXTINF:-1 tvg-id="BloombergTVMongolia.mn",Bloomberg TV Mongolia HD (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/BloombergMon/HLSv3-FTA/BloombergMon.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/BloombergMon/HLSv3-FTA/BloombergMon.m3u8
|
||||
#EXTINF:-1 tvg-id="C1.mn",C1 (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/C1/HLSv3-FTA/C1.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/C1/HLSv3-FTA/C1.m3u8
|
||||
#EXTINF:-1 tvg-id="CentralTV.mn",Central TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Ekh_Oron/HLSv3-FTA/Ekh_Oron.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Ekh_Oron/HLSv3-FTA/Ekh_Oron.m3u8
|
||||
#EXTINF:-1 tvg-id="Channel11.mn",Channel 11 (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Channel11/HLS-FTA/Channel11.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Channel11/HLSv3-FTA/Channel11.m3u8
|
||||
#EXTINF:-1 tvg-id="",CNBC MGL (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/CNBC/HLS-FTA/CNBC.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/CNBC/HLSv3-FTA/CNBC.m3u8
|
||||
#EXTINF:-1 tvg-id="DreamTV.mn",Dream TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Dreambox/HLSv3-FTA/Dreambox.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Dreambox/HLSv3-FTA/Dreambox.m3u8
|
||||
#EXTINF:-1 tvg-id="EagleNews.mn",Eagle News HD (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/Eagle/HLSv3-FTA/Eagle.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Eagle/HLSv3-FTA/Eagle.m3u8
|
||||
#EXTINF:-1 tvg-id="EdutainmentTV.mn",Education (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/Education/DASH-FTA/Education.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/Education/DASH-FTA/Education.mpd
|
||||
#EXTINF:-1 tvg-id="EdutainmentTV.mn",Education (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/Education/HLS-FTA/Education.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Education/HLSv3-FTA/Education.m3u8
|
||||
#EXTINF:-1 tvg-id="ETV.mn",ETV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/ETV/HLSv3-FTA/ETV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/ETV/HLSv3-FTA/ETV.m3u8
|
||||
#EXTINF:-1 tvg-id="GTV.mn",Gandan TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/GTV/HLS-FTA/GTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/GTV/HLSv3-FTA/GTV.m3u8
|
||||
#EXTINF:-1 tvg-id="MalchinTV.mn",Malchin TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Malchin/HLS-FTA/Malchin.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Malchin/HLSv3-FTA/Malchin.m3u8
|
||||
#EXTINF:-1 tvg-id="TV25.mn",MN25 (1080p)
|
||||
https://cdn2.skygo.mn/live/disk1/MN25/DASH-FTA/MN25.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/MN25/DASH-FTA/MN25.mpd
|
||||
#EXTINF:-1 tvg-id="TV25.mn",MN25 (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/MN25/HLS-FTA/MN25.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/MN25/HLSv3-FTA/MN25.m3u8
|
||||
#EXTINF:-1 tvg-id="MNB.mn",MNB (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNB/DASH-FTA/MNB.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/MNB/DASH-FTA/MNB.mpd
|
||||
#EXTINF:-1 tvg-id="MNB.mn",MNB (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNB/HLS-FTA/MNB.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/MNB/HLSv3-FTA/MNB.m3u8
|
||||
#EXTINF:-1 tvg-id="MNB.mn",MNB (576p)
|
||||
https://live.mnb.mn/hls/mnb.stream.m3u8
|
||||
#EXTINF:-1 tvg-id="MNBSport.mn",MNB Sport (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNBSport/DASH-FTA/MNBSport.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/MNBSport/DASH-FTA/MNBSport.mpd
|
||||
#EXTINF:-1 tvg-id="MNBSport.mn",MNB Sport (1080p)
|
||||
https://live.mnb.mn/hls/mnb_sport.stream.m3u8
|
||||
#EXTINF:-1 tvg-id="MNBWorld.mn",MNB World (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNB_World/HLS-FTA/MNB_World.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/MNB_World/HLSv3-FTA/MNB_World.m3u8
|
||||
#EXTINF:-1 tvg-id="MNBWorld.mn",MNB World (576p)
|
||||
https://live.mnb.mn/hls/mnb_world.stream.m3u8
|
||||
#EXTINF:-1 tvg-id="",MNB Гэр бүл (1080p) [Not 24/7]
|
||||
https://cdn3.skygo.mn/live/disk1/MNB_Family/HLS-FTA/MNB_Family.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/MNB_Family/HLSv3-FTA/MNB_Family.m3u8
|
||||
#EXTINF:-1 tvg-id="",MNB Гэр бүл (576p)
|
||||
https://live.mnb.mn/hls/mnb_family.stream.m3u8
|
||||
#EXTINF:-1 tvg-id="MNBMongoliinMedee.mn",MNB Монголын Мэдээ (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNB2/DASH-FTA/MNB2.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/MNB2/DASH-FTA/MNB2.mpd
|
||||
#EXTINF:-1 tvg-id="MNBMongoliinMedee.mn",MNB Монголын Мэдээ (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNB2/HLS-FTA/MNB2.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/MNB2/HLSv3-FTA/MNB2.m3u8
|
||||
#EXTINF:-1 tvg-id="MNBMongoliinMedee.mn",MNB Монголын Мэдээ (576p)
|
||||
https://live.mnb.mn/hls/mn2.stream.m3u8
|
||||
#EXTINF:-1 tvg-id="MongolianNewsChannel.mn",MNC (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/MNCTV/HLS-FTA/MNCTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/MNCTV/HLSv3-FTA/MNCTV.m3u8
|
||||
#EXTINF:-1 tvg-id="MovieBox.mn",MovieBox (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Moviebox/HLS-FTA/Moviebox.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Moviebox/HLSv3-FTA/Moviebox.m3u8
|
||||
#EXTINF:-1 tvg-id="NTV.mn",NTV (1080p)
|
||||
https://cdn2.skygo.mn/live/disk1/NTVHD/DASH-FTA/NTVHD.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/NTVHD/DASH-FTA/NTVHD.mpd
|
||||
#EXTINF:-1 tvg-id="NTV.mn",NTV (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/NTVHD/HLS-FTA/NTVHD.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/NTVHD/HLSv3-FTA/NTVHD.m3u8
|
||||
#EXTINF:-1 tvg-id="ONTV.mn",ONTV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/ONTV/HLSv3-FTA/ONTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/ONTV/HLSv3-FTA/ONTV.m3u8
|
||||
#EXTINF:-1 tvg-id="ParliamentTV.mn",Parliament TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Parlament/HLS-FTA/Parlament.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Parlament/HLSv3-FTA/Parlament.m3u8
|
||||
#EXTINF:-1 tvg-id="",Popcorn (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Popcorn/HLS-FTA/Popcorn.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Popcorn/HLSv3-FTA/Popcorn.m3u8
|
||||
#EXTINF:-1 tvg-id="",Premier Sports 1 (720p) [Geo-blocked]
|
||||
https://cdn3.skygo.mn/live/disk1/SPSPrime/HLS-FTA/SPSPrime.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SPSPrime/HLSv3-FTA/SPSPrime.m3u8
|
||||
#EXTINF:-1 tvg-id="",Premier Sports 2 (720p) [Geo-blocked]
|
||||
https://cdn3.skygo.mn/live/disk1/SPSPlay/HLS-FTA/SPSPlay.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SPSPlay/HLSv3-FTA/SPSPlay.m3u8
|
||||
#EXTINF:-1 tvg-id="",Premier Sports 3 (720p) [Geo-blocked]
|
||||
https://cdn3.skygo.mn/live/disk1/SPSNational/HLS-FTA/SPSNational.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SPSNational/HLSv3-FTA/SPSNational.m3u8
|
||||
#EXTINF:-1 tvg-id="",Premier Sports 4 (720p) [Geo-blocked]
|
||||
https://cdn3.skygo.mn/live/disk1/SPSFight/HLS-FTA/SPSFight.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SPSFight/HLSv3-FTA/SPSFight.m3u8
|
||||
#EXTINF:-1 tvg-id="",Premier Sports 5 (720p) [Geo-blocked]
|
||||
https://cdn3.skygo.mn/live/disk1/SPSPlus/HLS-FTA/SPSPlus.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SPSPlus/HLSv3-FTA/SPSPlus.m3u8
|
||||
#EXTINF:-1 tvg-id="SBN.mn",SBN (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/SBN/HLSv3-FTA/SBN.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SBN/HLSv3-FTA/SBN.m3u8
|
||||
#EXTINF:-1 tvg-id="StarTV.mn",Star TV (1080p)
|
||||
https://cdn2.skygo.mn/live/disk1/Star/DASH-FTA/Star.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/Star/DASH-FTA/Star.mpd
|
||||
#EXTINF:-1 tvg-id="StarTV.mn",Star TV (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/Star/HLS-FTA/Star.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Star/HLSv3-FTA/Star.m3u8
|
||||
#EXTINF:-1 tvg-id="SuldTV.mn",Suld TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/SuldTV/HLS-FTA/SuldTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SuldTV/HLSv3-FTA/SuldTV.m3u8
|
||||
#EXTINF:-1 tvg-id="TenGerTV.mn",TenGer TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/VTV/HLS-FTA/VTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/VTV/HLSv3-FTA/VTV.m3u8
|
||||
#EXTINF:-1 tvg-id="TMTV.mn",TM TV (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/TM/HLS-FTA/TM.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/TM/HLSv3-FTA/TM.m3u8
|
||||
#EXTINF:-1 tvg-id="TV5.mn",TV5 (1080p)
|
||||
https://10st.vcast.im/MYASIATV/TV5/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TV5.mn",TV5 (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/TV5HD/HLS-FTA/TV5HD.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/TV5HD/HLSv3-FTA/TV5HD.m3u8
|
||||
#EXTINF:-1 tvg-id="",TV7 (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/TV7/HLS-FTA/TV7.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/TV7/HLSv3-FTA/TV7.m3u8
|
||||
#EXTINF:-1 tvg-id="TV8.mn",TV8 (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/TV8HD/HLSv3-FTA/TV8HD.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/TV8HD/HLSv3-FTA/TV8HD.m3u8
|
||||
#EXTINF:-1 tvg-id="TV9.mn",TV9 (720p)
|
||||
https://cdn2.skygo.mn/live/disk1/TV9HD/HLS-FTA/TV9HD.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/TV9HD/HLSv3-FTA/TV9HD.m3u8
|
||||
#EXTINF:-1 tvg-id="UBS.mn",UBS (1080p)
|
||||
https://cdn3.skygo.mn/live/disk1/UBSHD/DASH-FTA/UBSHD.mpd
|
||||
https://cdn4.skygo.mn/live/disk1/UBSHD/DASH-FTA/UBSHD.mpd
|
||||
#EXTINF:-1 tvg-id="UBS.mn",UBS (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/UBSHD/HLS-FTA/UBSHD.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/UBSHD/HLSv3-FTA/UBSHD.m3u8
|
||||
#EXTINF:-1 tvg-id="UlziiTV.mn",Өлзий ТВ (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/UlziiTV/HLS-FTA/UlziiTV.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/UlziiTV/HLSv3-FTA/UlziiTV.m3u8
|
||||
#EXTINF:-1 tvg-id="SoyonGegeeruulegchTV.mn",Соён Гэгээрүүлэгч (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/SoyonGegeeruulegch/HLS-FTA/SoyonGegeeruulegch.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/SoyonGegeeruulegch/HLSv3-FTA/SoyonGegeeruulegch.m3u8
|
||||
#EXTINF:-1 tvg-id="",Хөгжим (720p)
|
||||
https://cdn3.skygo.mn/live/disk1/Khugjim/HLS-FTA/Khugjim.m3u8
|
||||
https://cdn4.skygo.mn/live/disk1/Khugjim/HLSv3-FTA/Khugjim.m3u8
|
||||
#EXTINF:-1 tvg-id="SevenChannel.mn@SD",Seven Channel (480p)
|
||||
https://cdn4.skygo.mn/live/disk1/TV7/HLS-FTA/TV7.m3u8
|
||||
#EXTINF:-1 tvg-id="Cinema.mn@SD",Cinema
|
||||
https://cdn4.skygo.mn/live/disk1/CinemaTV/HLSv3-FTA/CinemaTV.m3u8
|
||||
|
||||
@@ -402,3 +402,7 @@ https://stream.oursnetworktv.com/latin/encoder73/playlist.m3u8
|
||||
https://stream8.mexiserver.com:1936/xtinetwork/xtinetwork/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="ZAZ.mx",ZAZ
|
||||
https://cloud.fastchannel.es/mic/manifiest/hls/zaztv/zaztv.m3u8
|
||||
#EXTINF:-1 tvg-id="FoxSportsPremium.mx",Fox Sports Premium (1080p)
|
||||
https://live20.bozztv.com/akamaissh101/ssh101/foxsports/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Canal5.mx",Canal 5 (720p)
|
||||
http://104.238.205.28:8989/278329_.m3u8
|
||||
|
||||
@@ -3,16 +3,6 @@
|
||||
https://cdn6.163189.xyz/live/8tv/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="8TV.my",8TV
|
||||
https://tonton-live-switch-ssar.akamaized.net/stream-8tv/master.m3u8?bpkio_serviceid=6c0958d82a830a02ca0936d9cfab8311
|
||||
#EXTINF:-1 tvg-id="AstroAwani.my",Astro Awani (720p)
|
||||
https://d2idp3hzkhjpih.cloudfront.net/out/v1/4b85d9c2bf97413eb0c9fd875599b837/index.m3u8
|
||||
#EXTINF:-1 tvg-id="AstroBoxOfficeThangathirai.my",Astro Box Office Thangathirai (720p)
|
||||
https://live20.bozztv.com/akamaissh101/ssh101/sungo546/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AstroVaanavil.my@SD",Astro Vaanavil
|
||||
https://live20.bozztv.com/akamaissh101/ssh101/sungo543/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AstroVaanavil.my@SD",Astro Vaanavil
|
||||
https://live20.bozztv.com/akamaissh101/ssh101/sungo545/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AstroVinmeen.my@SD",Astro Vinmeen
|
||||
https://live20.bozztv.com/akamaissh101/ssh101/sungo544/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AwesomeTV.my",Awesome TV [Geo-blocked]
|
||||
https://488b9e074624.ap-south-1.playback.live-video.net/api/video/v1/ap-south-1.533267421985.channel.B7bB1wHJRCnw.m3u8
|
||||
#EXTINF:-1 tvg-id="BeritaRTM.my" http-referrer="https://rtm-player.glueapi.io/",Berita RTM [Geo-blocked]
|
||||
|
||||
@@ -117,8 +117,8 @@ https://video1.getstreamhosting.com:1936/8398/8398/playlist.m3u8
|
||||
https://viewmedia7219.bozztv.com/wmedia/viewmedia100/web_038/Stream/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVC.ng",TVC (1080p)
|
||||
https://tvce.gridpapaservers.com/TVCSEPT/ngrp:myStream_all/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCNews.ng",TVC News (576p)
|
||||
http://92.114.85.72:8000/play/a0al
|
||||
#EXTINF:-1 tvg-id="TVCNews.ng@SD",TVC News (576p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvcnews/browser-HLS8/tvcnews.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCNews.ng",TVC News
|
||||
http://69.64.57.208/tvcnews/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="WaffiTV.ng",Waffi TV (240p)
|
||||
@@ -133,3 +133,5 @@ https://wazobia.live:8333/channel/wmax.m3u8
|
||||
https://wazobia.live:8333/channel/wmaxph.m3u8
|
||||
#EXTINF:-1 tvg-id="WholeWordTV.ng",Whole Word TV (720p)
|
||||
https://mn-nl.mncdn.com/wholewordtv/wholewordtv/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TVCNews.ng@SD",TVC News
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvcnews/browser-dash/tvcnews.mpd
|
||||
|
||||
@@ -338,3 +338,5 @@ https://zfmzoetermeer.nl/live/master.m3u8
|
||||
https://video.uitzending.tv:19360/zo34/zo34.m3u8
|
||||
#EXTINF:-1 tvg-id="TVRain.nl",Дождь (1080p) [Geo-blocked]
|
||||
https://wl.tvrain.tv/transcode/ngrp:ses_all/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="BVN.nl@SD",BVN
|
||||
https://viamotionhsi.netplus.ch/live/eds/bvn/browser-dash/bvn.mpd
|
||||
|
||||
@@ -19,20 +19,6 @@ https://primetv-prod.akamaized.net/v1/prime-freeview-aes128.m3u8
|
||||
https://tv.wyatts-server.com/stream/channelid/1977627680?auth=Lo47lPuhjUwYZIPv+NymH3qAyhMe1svINVM4Kac2fvA=&profile=pass
|
||||
#EXTINF:-1 tvg-id="SkyOpen.nz@Plus1",Sky open +1 (576p) [Geo-blocked]
|
||||
https://linear-p.media.skyone.co.nz/primeplus1.clear.m3u8
|
||||
#EXTINF:-1 tvg-id="SkySport1.nz",Sky Sport 1 (1080p)
|
||||
http://primestreams.tv:826/live/SF11/vulwBvtfo9/118585.ts
|
||||
#EXTINF:-1 tvg-id="SkySport2.nz",Sky Sport 2 (1080p)
|
||||
http://primestreams.tv:826/live/SF11/vulwBvtfo9/118586.ts
|
||||
#EXTINF:-1 tvg-id="SkySport3.nz",Sky Sport 3 (1080p)
|
||||
https://hls.sheepland.xyz/play/0/15?proxy=0
|
||||
#EXTINF:-1 tvg-id="SkySport4.nz",Sky Sport 4 (1080p)
|
||||
https://hls.sheepland.xyz/play/0/36?proxy=0
|
||||
#EXTINF:-1 tvg-id="SkySport5.nz",Sky Sport 5 (1080p)
|
||||
http://primestreams.tv:826/live/SF11/vulwBvtfo9/118589.ts
|
||||
#EXTINF:-1 tvg-id="SkySport6.nz",Sky Sport 6 (1080p)
|
||||
https://hls.sheepland.xyz/play/0/70?proxy=0
|
||||
#EXTINF:-1 tvg-id="SkySport7.nz",Sky Sport 7 (1080p)
|
||||
https://hls.sheepland.xyz/play/0/66?proxy=0
|
||||
#EXTINF:-1 tvg-id="TeReo.nz",Te Reo
|
||||
https://i.mjh.nz/.r/te-reo.m3u8
|
||||
#EXTINF:-1 tvg-id="TVNZ1.nz@SD",TVNZ 1
|
||||
|
||||
@@ -188,3 +188,7 @@ https://d39g1vxj2ef6in.cloudfront.net/v1/manifest/3fec3e5cac39a52b2132f9c66c83da
|
||||
https://d39g1vxj2ef6in.cloudfront.net/v1/master/3fec3e5cac39a52b2132f9c66c83dae043dc17d4/prod-rakuten-stitched/master.m3u8?ads.xumo_channelId=88883098
|
||||
#EXTINF:-1 tvg-id="ZeeOne.pl",Zee One (720p)
|
||||
https://89ec2d15e090480bb419d940b8793b9c.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-eu_ZeeWorld-1/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="TVPPolonia.pl@SD",TVP Polonia
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvpolonia/browser-HLS8/tvpolonia.m3u8
|
||||
#EXTINF:-1 tvg-id="TVPPolonia.pl@SD",TVP Polonia
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvpolonia/browser-dash/tvpolonia.mpd
|
||||
|
||||
@@ -17,8 +17,6 @@ http://platform.topuphost.com:8577/live/alfajr2.stream/playlist.m3u8
|
||||
https://rp.tactivemedia.com/palestiniantv_source/live/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="HalaRamallah.ps",Hala Ramallah (720p)
|
||||
https://halaramallahtv.com:2053/HRamallah-Tv/HalaRamallah/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="HebronTV.ps",Hebron TV (432p)
|
||||
https://account20.livebox.co.in/charleshls/live.m3u8
|
||||
#EXTINF:-1 tvg-id="HolyQuranRadioNablus.ps",Holy Quran Radio Nablus (720p)
|
||||
http://streaming.zaytonatube.com:8080/holyquran/holyquran/video.m3u8
|
||||
#EXTINF:-1 tvg-id="KolalnasTV.ps@SD",Kolalnas TV
|
||||
|
||||
@@ -37,3 +37,5 @@ https://rds3gen.desdeparaguay.net/trecetv/trecetv_alta/playlist.m3u8
|
||||
https://tigocloud.desdeparaguay.net/800tv/800tv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="VenusMedia.py",Venus Media (720p)
|
||||
https://rds3gen.desdeparaguay.net/venusmedia/venusmedia/.m3u8
|
||||
#EXTINF:-1 tvg-id="SucesoTV.py",Suceso TV [Not 24/7]
|
||||
https://live.enhdtv.com:8081/8060/index.m3u8
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="AlArabyTV.qa",Al Araby TV (1080p)
|
||||
https://alarabyta.cdn.octivid.com/alaraby/smil:alaraby.stream.smil/chunklist.m3u8
|
||||
#EXTINF:-1 tvg-id="AlArabyTV.qa@SD",Al Araby TV (1080p)
|
||||
https://live.kwikmotion.com/alaraby1live/alaraby_abr/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AlArabyTV.qa",Al Araby TV (1080p)
|
||||
https://stream.ads.ottera.tv/playlist.m3u8?network_id=5616
|
||||
#EXTINF:-1 tvg-id="AlArabyTV2.qa",Al Araby TV 2 (1080p)
|
||||
https://alarabyta.cdn.octivid.com/alaraby2n/smil:alaraby2n.stream.smil/chunklist.m3u8
|
||||
#EXTINF:-1 tvg-id="AlArabyTV2.qa@SD",Al Araby TV 2 (1080p)
|
||||
https://live.kwikmotion.com/alaraby2live/alaraby2.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AlArabyTV2.qa",Al Araby TV 2 (1080p)
|
||||
https://stream.ads.ottera.tv/playlist.m3u8?network_id=5617
|
||||
#EXTINF:-1 tvg-id="AlJazeera.qa",Al Jazeera (1080p)
|
||||
@@ -109,3 +109,7 @@ https://live.kwikmotion.com/qtv2live/qtv2.smil/playlist.m3u8
|
||||
https://qatartv.akamaized.net/hls/live/2026574/qtv2/master.m3u8
|
||||
#EXTINF:-1 tvg-id="QatarTelevision2.qa",Qatar Television 2 (720p)
|
||||
https://streamer1.qna.org.qa/148133344_live/148133344_63.sdp/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="AlJazeera.qa@English",Al Jazeera English
|
||||
https://viamotionhsi.netplus.ch/live/eds/aljazeera/browser-HLS8/aljazeera.m3u8
|
||||
#EXTINF:-1 tvg-id="AlJazeeraDocumentary.qa@HD",Al Jazeera Documentary (1080p)
|
||||
http://213.57.91.138:8000/play/a06h
|
||||
|
||||
@@ -195,3 +195,9 @@ https://mn-nl.mncdn.com/tvrtgmures_new/smil:tvrtgmures_new.smil/index.m3u8
|
||||
https://tvr-tvrtimisoara.cdn.zitec.com/live/tvrtimisoara/main.m3u8
|
||||
#EXTINF:-1 tvg-id="TVSat.ro",TVSat (576p) [Not 24/7]
|
||||
http://89.38.8.130:39443
|
||||
#EXTINF:-1 tvg-id="TVRInternational.ro@SD",TVR International
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvrinternational/browser-HLS8/tvrinternational.m3u8
|
||||
#EXTINF:-1 tvg-id="TVRInternational.ro@SD",TVR International
|
||||
https://viamotionhsi.netplus.ch/live/eds/tvrinternational/browser-dash/tvrinternational.mpd
|
||||
#EXTINF:-1 tvg-id="JimJam.ro" http-user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0",JimJam
|
||||
https://saruman1.tharen.cfd/jimy/usergenq3n0lz7kr.m3u8
|
||||
|
||||
@@ -75,3 +75,5 @@ https://stream.pikanal.rs/pikanal/pgm.m3u8
|
||||
https://5bc45691ca49f.streamlock.net/tvpirot/uzivo/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="DMSat.rs@SD",DM Sat
|
||||
https://viamotionhsi.netplus.ch/live/eds/dmsat/browser-HLS8/dmsat.m3u8
|
||||
#EXTINF:-1 tvg-id="DMSat.rs@SD",DM Sat
|
||||
https://viamotionhsi.netplus.ch/live/eds/dmsat/browser-dash/dmsat.mpd
|
||||
|
||||
@@ -307,3 +307,5 @@ http://hls.shansontv.cdnvideo.ru/shansontv/shansontv.sdp/playlist.m3u8
|
||||
http://stream0.tv41.ru/live.m3u8
|
||||
#EXTINF:-1 tvg-id="Yuvelirochka.ru",Ювелирочка ТВ (576p)
|
||||
https://live-uvelirochka.cdnvideo.ru/uvelirochka/uvelirochka_720p3/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Home4K.ru",Home 4K (2160p)
|
||||
http://178.217.72.66:8080/HOME_4K/index.m3u8
|
||||
|
||||
@@ -32,12 +32,46 @@ https://kino-1.catcast.tv/content/37742/index.m3u8
|
||||
#EXTINF:-1 tvg-id="MuzykaKino.ru@International",Музыка Кино International [Not 24/7]
|
||||
https://kino-1.catcast.tv/content/37739/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoKlassika.ru",Сити Эдем КиноКлассика [Not 24/7]
|
||||
https://v2.catcast.tv/content/34185/index.m3u8
|
||||
https://cityeden.catcast.tv/content/34185/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoMistika.ru",Сити Эдем КиноМистика [Not 24/7]
|
||||
https://v2.catcast.tv/content/40783/index.m3u8
|
||||
https://cityeden.catcast.tv/content/40783/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoAction.ru",Сити Эдем КиноЭкшен [Not 24/7]
|
||||
https://v2.catcast.tv/content/41333/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenTV.ru",Сити Эдем ТВ [Not 24/7]
|
||||
https://v2.catcast.tv/content/34246/index.m3u8
|
||||
https://cityeden.catcast.tv/content/41333/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenTV.ru",Сити Эдем ТВ Христианский [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/34246/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenTeleNovella.ru",Сити Эдем ТелеНовелла [Not 24/7]
|
||||
https://v2.catcast.tv/content/46209/index.m3u8
|
||||
https://cityeden.catcast.tv/content/46209/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenMedZdrav.ru",Сити Эдем МедЗдрав [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/47519/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenReceptyGurmana.ru",Сити Эдем Рецепты Гурмана [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/47516/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenAutoGid.ru",Сити Эдем АвтоГид [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/47515/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenMeditationMusic.ru",Сити Эдем Meditation Music [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/47410/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenClassicMusic.ru",Сити Эдем Классическая Музыка [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/47400/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenSirtakiTV.ru",Сити Эдем Сиртаки ТВ [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/46421/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoDrama.ru",Сити Эдем КиноДрама [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/45269/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoFantastika.ru",Сити Эдем КиноФантастика [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/45268/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoKomediya.ru",Сити Эдем КиноКомедия [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/41331/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoDetektiv.ru",Сити Эдем КиноДетектив [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/41327/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoArt.ru",Сити Эдем КиноАрт [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/38398/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoDok.ru",Сити Эдем КиноДок [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/38354/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoSemya.ru",Сити Эдем КиноСемья [Not 24/7]
|
||||
https://v2.catcast.tv/content/38128/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenKinoAsia.ru",Сити Эдем КиноАзия [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/34393/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenBirmaPlay.ru",Сити Эдем Бирма Play [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/34364/index.m3u8
|
||||
#EXTINF:-1 tvg-id="CityEdenPlay.ru",Сити Эдем Play Христианский Музыкальный [Not 24/7]
|
||||
https://cityeden.catcast.tv/content/34100/index.m3u8
|
||||
#EXTINF:-1 tvg-id="VHSTV.ru",VHS TV [Not 24/7]
|
||||
https://v2.catcast.tv/content/47609/index.m3u8
|
||||
|
||||
@@ -5,13 +5,5 @@ https://livetv.mylifeisgood.net.ru/channels/strwc.m3u8
|
||||
https://livetv.mylifeisgood.net.ru/channels/strvf.m3u8
|
||||
#EXTINF:-1 tvg-id="TERRA.ru",TERRA
|
||||
https://livetv.mylifeisgood.net.ru/channels/terra.m3u8
|
||||
#EXTINF:-1 tvg-id="MuzTV.ru",Муз-ТВ
|
||||
https://livetv.mylifeisgood.net.ru/channels/muztvhd.m3u8
|
||||
#EXTINF:-1 tvg-id="Friday.ru",Пятница!
|
||||
https://livetv.mylifeisgood.net.ru/channels/fridayhd.m3u8
|
||||
#EXTINF:-1 tvg-id="TV3.ru",ТВ-3
|
||||
https://livetv.mylifeisgood.net.ru/channels/tv3hd.m3u8
|
||||
#EXTINF:-1 tvg-id="TNT.ru",ТНТ
|
||||
https://livetv.mylifeisgood.net.ru/channels/tnthd.m3u8
|
||||
#EXTINF:-1 tvg-id="U.ru",Ю
|
||||
https://livetv.mylifeisgood.net.ru/channels/u_ott_tv_hq.m3u8
|
||||
|
||||
@@ -9,3 +9,5 @@ https://cdn.live.easybroadcast.io/abr_corp/63_mosaique-fm_rn56tgl/playlist_dvr.m
|
||||
https://fl1002.bozztv.com/ga-nessmatv/tracks-v1a1/mono.m3u8
|
||||
#EXTINF:-1 tvg-id="ElWatania1.tn@SD",El Watania 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/tunisienationale/browser-HLS8/tunisienationale.m3u8
|
||||
#EXTINF:-1 tvg-id="ElWatania1.tn@SD",El Watania 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/tunisienationale/browser-dash/tunisienationale.mpd
|
||||
|
||||
@@ -208,8 +208,8 @@ https://live.artidijitalmedya.com/artidijital_estv/estv/playlist.m3u8
|
||||
https://live.artidijitalmedya.com/artidijital_etv/etv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="ETVManisa.tr",ETV Manisa (1080p) [Not 24/7]
|
||||
https://edge1.socialsmart.tv/manisaetv/bant1/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="EuroD.tr",Euro D (1080p)
|
||||
http://185.234.111.229:8000/play/a01w
|
||||
#EXTINF:-1 tvg-id="EuroD.tr@SD",Euro D (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/eurod/browser-HLS8/eurod.m3u8
|
||||
#EXTINF:-1 tvg-id="EuroD.tr",Euro D (720p)
|
||||
https://live.duhnet.tv/S2/HLS_LIVE/eurodnp/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="EuroStar.tr",EuroStar (576p)
|
||||
@@ -552,8 +552,6 @@ https://canlitvulusal.xyz/live/showmax/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ShowMax.tr",Show Max
|
||||
https://raw.githubusercontent.com/UzunMuhalefet/yayinlar/main/streams/best/showmax.m3u8
|
||||
#EXTINF:-1 tvg-id="ShowTurk.tr",Show Turk
|
||||
https://canlitvulusal.xyz/live/showturk/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ShowTurk.tr",Show Turk
|
||||
https://showturk.blutv.com/blutv_showturk2/live.m3u8
|
||||
#EXTINF:-1 tvg-id="ShowTurk.tr",Show Türk (720p) [Not 24/7]
|
||||
https://mn-nl.mncdn.com/blutv_showturk2/live.m3u8
|
||||
@@ -675,8 +673,8 @@ https://tv-trtspor1.medya.trt.com.tr/master.m3u8
|
||||
https://tv-trtspor2.medya.trt.com.tr/master.m3u8
|
||||
#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Turk (1080p)
|
||||
http://185.234.111.229:8000/play/a00h
|
||||
#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Turk
|
||||
https://trtturk.blutv.com/blutv_trtturk2/live.m3u8
|
||||
#EXTINF:-1 tvg-id="TRTTurk.tr@SD",TRT Turk
|
||||
https://viamotionhsi.netplus.ch/live/eds/trtturk/browser-HLS8/trtturk.m3u8
|
||||
#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Türk (720p)
|
||||
https://tv-trtturk.medya.trt.com.tr/master.m3u8
|
||||
#EXTINF:-1 tvg-id="TRTWorld.tr",TRT World (1080p)
|
||||
@@ -786,3 +784,7 @@ https://cdn-yildiz.yayin.com.tr/yildiz/yildiz/playlist.m3u8
|
||||
https://stream.yol.tv:9443/medialive/yol.m3u8
|
||||
#EXTINF:-1 tvg-id="ZarokTV.tr",Zarok TV (720p)
|
||||
https://zindikurmanci.zaroktv.com.tr/hls/stream.m3u8
|
||||
#EXTINF:-1 tvg-id="EuroD.tr@SD",Euro D
|
||||
https://viamotionhsi.netplus.ch/live/eds/eurod/browser-dash/eurod.mpd
|
||||
#EXTINF:-1 tvg-id="TRTTurk.tr@SD",TRT Turk
|
||||
https://viamotionhsi.netplus.ch/live/eds/trtturk/browser-dash/trtturk.mpd
|
||||
|
||||
@@ -138,10 +138,10 @@ https://live.islamchannel.tv/live11/islamtv_english/bitrate1.isml/live.m3u8
|
||||
https://live-islamtv-urdu.simplestreamcdn.com/live13/islamtv_urdu/bitrate1.isml/live.m3u8
|
||||
#EXTINF:-1 tvg-id="ITV2.uk@SD",ITV2
|
||||
https://viamotionhsi.netplus.ch/live/eds/itv2/browser-HLS8/itv2.m3u8
|
||||
#EXTINF:-1 tvg-id="ITV3.uk",ITV3
|
||||
https://x.canlitvapp.com/u-itv3/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ITV4.uk",ITV4 (576p)
|
||||
https://x.canlitvapp.com/u-itv4/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ITV3.uk@SD",ITV3 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/itv3/browser-HLS8/itv3.m3u8
|
||||
#EXTINF:-1 tvg-id="ITV4.uk@SD",ITV4 (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/itv4/browser-HLS8/itv4.m3u8
|
||||
#EXTINF:-1 tvg-id="JewelleryMaker.uk",Jewelery Maker (1080p)
|
||||
https://lo2-1.gemporia.com/abrjewellerymaker/smil:livestream.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="KalemehTV.uk@SD",Kalemeh TV
|
||||
@@ -294,3 +294,43 @@ https://cdn4.skygo.mn/live/disk1/BBC_News/HLSv3-FTA/BBC_News.m3u8
|
||||
https://viamotionhsi.netplus.ch/live/eds/film4/browser-HLS8/film4.m3u8
|
||||
#EXTINF:-1 tvg-id="Channel5.uk@HD",Channel 5 HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/channel5/browser-HLS8/channel5.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCFourCBeebies.uk@HD",BBC Four/CBeebies (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbc4cbeebies/browser-HLS8/bbc4cbeebies.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCThreeCBBC.uk@HD",BBC Three/CBBC (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbc3cbbc/browser-HLS8/bbc3cbbc.m3u8
|
||||
#EXTINF:-1 tvg-id="More4.uk@HD",More4 HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/more4/browser-HLS8/more4.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCTwo.uk@HD",BBC Two HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbc2/browser-HLS8/bbc2.m3u8
|
||||
#EXTINF:-1 tvg-id="Channel4.uk@UKHD",Channel 4 UK HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/channel4/browser-HLS8/channel4.m3u8
|
||||
#EXTINF:-1 tvg-id="CNBCEurope.uk@HD",CNBC Europe HD (1080p)
|
||||
https://viamotionhsi.netplus.ch/live/eds/cnbc/browser-HLS8/cnbc.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCEarth.uk@Vietnam",BBC Earth Vietnam (1080p)
|
||||
https://tv.ddns.vn/tv/bbcearth/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCLifestyle.uk@Asia",BBC Lifestyle Asia (1080p)
|
||||
https://tv.ddns.vn/tv/bbclifestyle/index.m3u8
|
||||
#EXTINF:-1 tvg-id="Manoto.uk",Manoto TV
|
||||
https://m3u.iranvids.com/manoto/output.m3u8
|
||||
#EXTINF:-1 tvg-id="More4.uk@HD",More4 HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/more4/browser-dash/more4.mpd
|
||||
#EXTINF:-1 tvg-id="Film4.uk@HD",Film4 HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/film4/browser-dash/film4.mpd
|
||||
#EXTINF:-1 tvg-id="BBCFourCBeebies.uk@HD",BBC Four/CBeebies
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbc4cbeebies/browser-dash/bbc4cbeebies.mpd
|
||||
#EXTINF:-1 tvg-id="BBCThreeCBBC.uk@HD",BBC Three/CBBC
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbc3cbbc/browser-dash/bbc3cbbc.mpd
|
||||
#EXTINF:-1 tvg-id="BBCTwo.uk@HD",BBC Two HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbc2/browser-dash/bbc2.mpd
|
||||
#EXTINF:-1 tvg-id="ITV4.uk@SD",ITV4
|
||||
https://viamotionhsi.netplus.ch/live/eds/itv4/browser-dash/itv4.mpd
|
||||
#EXTINF:-1 tvg-id="ITV3.uk@SD",ITV3
|
||||
https://viamotionhsi.netplus.ch/live/eds/itv3/browser-dash/itv3.mpd
|
||||
#EXTINF:-1 tvg-id="ITV2.uk@SD",ITV2
|
||||
https://viamotionhsi.netplus.ch/live/eds/itv2/browser-dash/itv2.mpd
|
||||
#EXTINF:-1 tvg-id="Channel4.uk@UKHD",Channel 4 UK HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/channel4/browser-dash/channel4.mpd
|
||||
#EXTINF:-1 tvg-id="Channel5.uk@HD",Channel 5 HD
|
||||
https://viamotionhsi.netplus.ch/live/eds/channel5/browser-dash/channel5.mpd
|
||||
#EXTINF:-1 tvg-id="BBCNews.uk@Europe",BBC News Europe
|
||||
https://viamotionhsi.netplus.ch/live/eds/bbcworld/browser-HLS8/bbcworld.m3u8
|
||||
|
||||
@@ -11,5 +11,3 @@ https://pac12-sportstribal.amagi.tv/playlist.m3u8
|
||||
https://d2xeo83q8fcni6.cloudfront.net/v1/master/9d062541f2ff39b5c0f48b743c6411d25f62fc25/SkiTV-SportsTribal/193.m3u8
|
||||
#EXTINF:-1 tvg-id="SportsGrid.us",SportsGrid (1080p)
|
||||
https://sportsgrid-tribal.amagi.tv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="WorldPokerTour.us",World Poker Tour (1080p) [Not 24/7]
|
||||
https://d3w4n3hhseniak.cloudfront.net/v1/master/9d062541f2ff39b5c0f48b743c6411d25f62fc25/WPT-SportsTribal/120.m3u8
|
||||
|
||||
@@ -125,8 +125,8 @@ https://2nbyjjx7y53k-hls-live.5centscdn.com/cls040318/b0d2763968fd0bdd2dc0d44ba2
|
||||
https://streams2.sofast.tv/v1/master/611d79b11b77e2f571934fd80ca1413453772ac7/be6f9eac-280e-4748-b866-2eb2463c1844/manifest.m3u8
|
||||
#EXTINF:-1 tvg-id="BanningCityTV.us",Banning CityTV (Banning CA) (1080p)
|
||||
https://vbfast-c.viebit.com/072e341f-100d-4da1-9c18-65370ebf35c6/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCAmerica.us",BBC America
|
||||
https://dvrfl04.tulix.tv/teleup-bbca/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCAmerica.us@East",BBC America
|
||||
https://bcovlive-a.akamaihd.net/7f5ec16d102f4b5d92e8e27bc95ff424/us-east-1/6240731308001/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="BeachTVCSULB.us",Beach TV CSULB (160p) [Not 24/7]
|
||||
http://stream04.amp.csulb.edu:1935/Beach_TV/smil:BeachTV.smil/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="BeachTVFloridaAlabama.us",Beach TV Florida & Alabama (720p)
|
||||
@@ -1036,3 +1036,13 @@ https://fl1002.bozztv.com/gf-zarintv/index.m3u8
|
||||
https://live.zoomnews.info/live/Zoom_playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="GuyBaiTV.us@SD",GuyBai TV (1080p)
|
||||
https://livechannel.mdc.akamaized.net/stitch/livechannel/1342/master1400000.m3u8;session=live_stream_1342
|
||||
#EXTINF:-1 tvg-id="GMTV.us@SD",GMTV (1080p)
|
||||
https://livechannel.mdc.akamaized.net/stitch/livechannel/1341/master1400000.m3u8;session=live_stream_1341
|
||||
#EXTINF:-1 tvg-id="RetroCrush.us@SD",RetroCrush (1080p)
|
||||
https://cineverse.g-mana.live/media/ac7cff3c-5bc3-4745-ac4d-56aadb586d00/profile/1/profileManifest.m3u8
|
||||
#EXTINF:-1 tvg-id="BloombergTV.us@Europe",Bloomberg TV Europe
|
||||
https://viamotionhsi.netplus.ch/live/eds/bloomberg/browser-HLS8/bloomberg.m3u8
|
||||
#EXTINF:-1 tvg-id="P3TV.us",P3TV [Not 24/7]
|
||||
https://5790d294af2dc.streamlock.net/8042/8042/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="FilmRiseClassicTV.us@SD",FilmRise Classic TV (720p)
|
||||
https://d2tv4k5moji5m7.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-lu4pzh9l4b57p/master.m3u8
|
||||
|
||||
@@ -45,8 +45,6 @@ https://amg00514-noseybaxterllc-nosey-cineverse-hvu5a.amagi.tv/playlist/amg00514
|
||||
https://amg00447-qwesttv-qwestjazz-cineverse-ve12d.amagi.tv/playlist/amg00447-qwesttv-qwestjazz-cineverse/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RealMadridTV.es",RealMadrid TV
|
||||
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-realmadrid-cineverse/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="RetroCrush.us",Retro Crush
|
||||
https://amg01201-cinedigmenterta-retrocrush-cineverse-nrfll.amagi.tv/playlist/amg01201-cinedigmenterta-retrocrush-cineverse/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="SoReal.us",So...Real
|
||||
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-soreal-cineverse/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Tastemade.us",Tastemade [Geo-blocked]
|
||||
|
||||
@@ -21,6 +21,8 @@ https://fl3.moveonjoy.com/BET_HER/index.m3u8
|
||||
https://fl3.moveonjoy.com/BET_Jams/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BETSoul.us",BET Soul
|
||||
https://fl3.moveonjoy.com/BET_SOUL/index.m3u8
|
||||
#EXTINF:-1 tvg-id="beINSportsUSA.us",beIN Sports USA
|
||||
http://fl3.moveonjoy.com/BEIN_SPORTS/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BigTenNetwork.us",Big Ten Network
|
||||
https://fl3.moveonjoy.com/BIG_TEN_NETWORK/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BloombergTV.us",Bloomberg TV
|
||||
|
||||
@@ -79,8 +79,6 @@ https://tvpass.org/live/HallmarkMoviesMysteriesEast/sd
|
||||
https://tvpass.org/live/IFCEast/hd
|
||||
#EXTINF:-1 tvg-id="IFC.us@East",IFC East (360p)
|
||||
https://tvpass.org/live/IFCEast/sd
|
||||
#EXTINF:-1 tvg-id="KABCDT1.us",KABC-DT1 (720p)
|
||||
https://tvpass.org/live/abc-kabc-los-angeles-ca/hd
|
||||
#EXTINF:-1 tvg-id="KABCDT1.us",KABC-DT1 (360p)
|
||||
https://tvpass.org/live/abc-kabc-los-angeles-ca/sd
|
||||
#EXTINF:-1 tvg-id="KCBSDT1.us",KCBS-DT1 (1080p)
|
||||
|
||||
@@ -21,6 +21,8 @@ https://vcp10.myplaytv.com/canali/canali/playlist.m3u8
|
||||
https://vcp.myplaytv.com/nubehtv/nubehtv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CantinaTV.ve",Cantina TV (1080p)
|
||||
https://vcp.myplaytv.com/cantinatv/cantinatv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CaminosMedia.ve",Caminos Media TV (1080p)
|
||||
https://streamtv.intervenhosting.net:3029/hybrid/play.m3u8
|
||||
#EXTINF:-1 tvg-id="CatatumboTV.ve",Catatumbo TV (406p)
|
||||
https://cloud.fastchannel.es/manifiest/hls/prog9/catatumbotv.m3u8
|
||||
#EXTINF:-1 tvg-id="ChivacoaTVInternacional.ve",Chivacoa TV Internacional (1080p)
|
||||
@@ -135,11 +137,9 @@ https://vod2live.univtec.com/manifest/4c41c0d8-e2e4-43cc-bd43-79afe715e1b3.m3u8
|
||||
https://cloud.fastchannel.es/manifiest/hls/prog9/vepacotv.m3u8
|
||||
#EXTINF:-1 tvg-id="VPItv.ve",VPItv (1080p)
|
||||
https://ott3.streann.com/loadbalancer/services/public/channels/5d23d5882cdce61dae029fd8/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="CaminosMedia.ve",Caminos Media TV (1080p)
|
||||
https://streamtv.intervenhosting.net:3029/hybrid/play.m3u8
|
||||
#EXTINF:-1 tvg-id="FortunaTV.ve",Fortuna TV (1080p)
|
||||
https://streamtv.intervenhosting.net:3355/live/fortunatvlive.m3u8
|
||||
#EXTINF:-1 tvg-id="LaraenRedes.ve",Lara en Redes TV (1080p)
|
||||
https://streamtv.intervenhosting.net:3763/hybrid/play.m3u8
|
||||
#EXTINF:-1 tvg-id="LGDTelevision.ve",LGD TV (1080p)
|
||||
#EXTINF:-1 tvg-id="LGDTelevision.ve@SD",LGD Television (720p)
|
||||
https://streamtv.intervenhosting.net:3403/hybrid/play.m3u8
|
||||
|
||||
@@ -143,3 +143,5 @@ https://hls.mskycdn.online/tv/vtv9fhd/index.m3u8
|
||||
https://hls.mskycdn.online/tv/vtvctfhd/index.m3u8
|
||||
#EXTINF:-1 tvg-id="SCTV1.vn",SCTV1 (720p)
|
||||
https://liveh12.seenow.vn/hls/SCTV1/03.m3u8
|
||||
#EXTINF:-1 tvg-id="SCTV7.vn@SD",SCTV7 (576i)
|
||||
https://liveh12.seenow.vn/hls/SCTV7/03.m3u8
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/lj9-pxm-o53-rp0/tracks-v4a1/mono.m3u8
|
||||
#EXTINF:-1 tvg-id="PeaceTVAlbanian.xk",Peace TV Albanian (360p) [Not 24/7]
|
||||
http://82.114.67.178:8081/hls/PeaceTV.m3u8
|
||||
#EXTINF:-1 tvg-id="RTK1.xk",RTK 1
|
||||
https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/98r-d35-487-v6m/tracks-v4a1/mono.m3u8
|
||||
#EXTINF:-1 tvg-id="RTK1.xk@SD",RTK 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtk1/browser-HLS8/rtk1.m3u8
|
||||
#EXTINF:-1 tvg-id="RTK2.xk",RTK 2
|
||||
https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/rtk2/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RTK3.xk",RTK 3
|
||||
@@ -33,3 +33,5 @@ http://ip.opoja.tv:1935/tvopoja/tvopoja/playlist.m3u8
|
||||
https://gjirafa-video-live.gjirafa.net/gjvideo-live/5m0-cok-g5z-1xi/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TVSyri.xk",TV Syri (720p)
|
||||
https://gjirafa-video-live.gjirafa.net/gjvideo-live/xej-xnb-ba0-kup/index.m3u8
|
||||
#EXTINF:-1 tvg-id="RTK1.xk@SD",RTK 1
|
||||
https://viamotionhsi.netplus.ch/live/eds/rtk1/browser-dash/rtk1.mpd
|
||||
|
||||
@@ -43,8 +43,6 @@ https://sabctretalh.cdn.mangomolo.com/lehae/smil:lehae.stream.smil/master.m3u8
|
||||
https://sabconetanw.cdn.mangomolo.com/news/smil:news.stream.smil/master.m3u8
|
||||
#EXTINF:-1 tvg-id="SeraphimTV.za",Seraphim TV [Not 24/7]
|
||||
https://restream.churchtv247.co.za/Apostle/Hggc@24/1.m3u8
|
||||
#EXTINF:-1 tvg-id="SuperSportRugby.za@SD",SuperSport Rugby
|
||||
https://live20.bozztv.com/trn03/gin-ssrugby/index.m3u8
|
||||
#EXTINF:-1 tvg-id="TBNAfrica.za",TBN Africa (1080p)
|
||||
https://tbn-jw.cdn.vustreams.com/live/tbn-africa/live.isml/master.m3u8
|
||||
#EXTINF:-1 tvg-id="ZeeBollymovies.za@SD",Zee Bollymovies (1080p)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="5AABTV.ca" tvg-logo="" group-title="Undefined",5AAB TV
|
||||
http://158.69.124.9:1935/5aabtv/5aabtv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
|
||||
http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
|
||||
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
|
||||
http://146.59.85.40:89/dunaworld/index.m3u8
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
@@ -1,26 +1,16 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Andorra",ATV
|
||||
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
|
||||
#EXTINF:-1 tvg-id="5AABTV.ca" tvg-logo="" group-title="Canada",5AAB TV
|
||||
http://158.69.124.9:1935/5aabtv/5aabtv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Canada",Meteomedia
|
||||
http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Kazakhstan",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Kyrgyzstan",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Russia",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Tajikistan",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Turkmenistan",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Uzbekistan",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="International",BBC News HD
|
||||
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="International",Duna World (576i)
|
||||
http://146.59.85.40:89/dunaworld/index.m3u8
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="International",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="International",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
|
||||
#EXTVLCOPT:http-referrer=http://imn.iq
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="5AABTV.ca" tvg-logo="" group-title="Americas",5AAB TV
|
||||
http://158.69.124.9:1935/5aabtv/5aabtv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Americas",Meteomedia
|
||||
http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Asia",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Asia",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Central Asia",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Commonwealth of Independent States",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Commonwealth of Independent States",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Europe",ATV
|
||||
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Europe",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Europe, the Middle East and Africa",ATV
|
||||
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
|
||||
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe, the Middle East and Africa",ЛДПР ТВ (1080p)
|
||||
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
|
||||
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Europe, the Middle East and Africa",ЭлТР (480p) [Not 24/7]
|
||||
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
|
||||
#EXTINF:-1 tvg-id="5AABTV.ca" tvg-logo="" group-title="North America",5AAB TV
|
||||
http://158.69.124.9:1935/5aabtv/5aabtv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="North America",Meteomedia
|
||||
http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="5AABTV.ca" tvg-logo="" group-title="Northern America",5AAB TV
|
||||
http://158.69.124.9:1935/5aabtv/5aabtv/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Northern America",Meteomedia
|
||||
http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="International",BBC News HD
|
||||
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="International",Duna World (576i)
|
||||
http://146.59.85.40:89/dunaworld/index.m3u8
|
||||
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
|
||||
#EXTVLCOPT:http-referrer=http://imn.iq
|
||||
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
|
||||
#KODIPROP:inputstream=inputstream.adaptive
|
||||
#KODIPROP:inputstream.adaptive.manifest_type=mpd
|
||||
#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
|
||||
#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
|
||||
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
|
||||
#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
|
||||
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
|
||||
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
|
||||
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
|
||||
#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="https://i.imgur.com/ciTJrnl.png" group-title="Undefined",Zoo (720p)
|
||||
https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
|
||||
@@ -1 +1,5 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
|
||||
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
|
||||
#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
|
||||
http://146.59.85.40:89/dunaworld/index.m3u8
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user