Configuration Examples
Exposed endpoints
{public_url}/{client_secret}/playlist.m3u8
{public_url}/{client_secret}/epg.xml
{public_url}/{client_secret}/epg.xml.gz
Simple Configuration
A minimal setup with a basic server, one playlist, and one EPG.
server:
listen_addr: ":8080"
public_url: "http://localhost:8080"
proxy:
enabled: true # Proxy everything throw the gateway
playlists:
- name: basic-tv
sources: "https://provider.com/basic.m3u8"
epgs:
- name: tv-guide
sources: "https://provider.com/guide.xml"
clients:
- name: "tv"
secret: "tv-secret"
Advanced Configuration
A full-featured setup including proxying, rules, and multiple sources.
logs:
level: debug
format: json
server:
listen_addr: ":8080"
metrics_addr: ":9090"
public_url: "https://iptv.example.com"
url_generator:
secret: "super-secret"
stream_ttl: "24h"
file_ttl: "0s"
cache:
path: "/var/cache/iptv"
ttl: "12h"
retention: "7d"
compression: true
proxy:
enabled: true
concurrency: 10 # Set global concurrency
error: # Override stream error templates
upstream_error:
template_variables:
- name: message
value: |
Canal temporalmente no disponible
No hay respuesta del servidor ascendente
Por favor, inténtelo más tarde
rate_limit_exceeded:
template_variables:
- name: message
value: |
Se ha excedido el número de transmisiones simultáneas
Por favor, inténtelo más tarde
link_expired:
template_variables:
- name: message
value: |
El enlace del canal ha expirado
Por favor, actualice la lista de reproducción en su televisor
playlists:
- name: movies
sources:
- "https://provider.com/movies1.m3u8"
- "https://provider.com/movies2.m3u8"
- name: tv
sources:
- "https://provider.com/tv1.m3u8"
- "https://provider.com/tv2.m3u8"
- name: sports
sources:
- "https://provider.com/sports1.m3u8"
- "https://provider.com/sports2.m3u8"
epgs:
- name: movies
sources:
- "https://movies.com/guide.xml"
- "https://movies2.com/guide.xml.gz"
- name: tv
sources:
- "https://tv.com/guide.xml"
- "https://tv2.com/guide.xml.gz"
- name: sports
sources:
- "https://sports.com/guide.xml"
- "https://sports2.com/guide.xml.gz"
channel_rules:
# Set sports group for sports channels
- set_field:
selector: attr/group-title
template: "Sports"
condition:
or:
- playlists: ["sports"]
- patterns: [".*ESPN.*", ".*Fox Sports.*", ".*Sky Sports.*"]
playlist_rules:
# Remove duplicate channels, prefer highest quality for HD clients
- remove_duplicates:
patterns: ["4K", "FHD", "HD", "SD"]
condition:
clients: ["living-room", "bedroom"]
# Remove duplicate channels, prefer SD quality for mobile/kitchen
- remove_duplicates:
patterns: ["SD", "HD", "FHD", "4K"]
condition:
clients: ["mobile", "kitchen"]
clients:
- name: "living-room"
secret: "lr-secret"
playlists: ["tv", "movies"]
- name: "bedroom"
secret: "br-secret"
playlists: ["sports", "tv"]
- name: "mobile"
secret: "mb-secret"
playlists: ["tv", "movies"]
- name: "kitchen"
secret: "kt-secret"
playlists: ["tv", "movies"]