Iptv-Proxy is a project to proxyfie an m3u file and to proxyfie an Xtream iptv service (client API).
M3U service convert an iptv m3u file into a web proxy server.
It's transform all the original tracks to an new url pointing on the proxy.
proxy on Xtream code (client API)
support live, vod, series and full epg ๐
Original iptv m3u file
#EXTM3U
#EXTINF:-1 tvg-ID="examplechanel1.com" tvg-name="chanel1" tvg-logo="http://ch.xyz/logo1.png" group-title="USA HD",CHANEL1-HD
http://iptvexample.net:1234/12/test/1
#EXTINF:-1 tvg-ID="examplechanel2.com" tvg-name="chanel2" tvg-logo="http://ch.xyz/logo2.png" group-title="USA HD",CHANEL2-HD
http://iptvexample.net:1234/13/test/2
#EXTINF:-1 tvg-ID="examplechanel3.com" tvg-name="chanel3" tvg-logo="http://ch.xyz/logo3.png" group-title="USA HD",CHANEL3-HD
http://iptvexample.net:1234/14/test/3
#EXTINF:-1 tvg-ID="examplechanel4.com" tvg-name="chanel4" tvg-logo="http://ch.xyz/logo4.png" group-title="USA HD",CHANEL4-HD
http://iptvexample.net:1234/15/test/4
What M3U proxy IPTV do
- convert chanels url to new endpoints
- convert original m3u file with new routes pointing to the proxy
Start proxy server example
iptv-proxy --m3u-url http://example.com/get.php?username=user&password=pass&type=m3u_plus&output=m3u8 \
--port 8080 \
--hostname proxyexample.com \
--user test \
--password passwordtest
That's give you an m3u file on a specific endpoint iptv.m3u
in our example
http://proxyserver.com:8080/iptv.m3u?username=test&password=passwordtest
All the new routes pointing on your proxy server
#EXTM3U
#EXTINF:-1 tvg-ID="examplechanel1.com" tvg-name="chanel1" tvg-logo="http://ch.xyz/logo1.png" group-title="USA HD",CHANEL1-HD
http://proxyserver.com:8080/12/test/1?username=test&password=passwordtest
#EXTINF:-1 tvg-ID="examplechanel2.com" tvg-name="chanel2" tvg-logo="http://ch.xyz/logo2.png" group-title="USA HD",CHANEL2-HD
http://proxyserver.com:8080/13/test/2?username=test&password=passwordtest
#EXTINF:-1 tvg-ID="examplechanel3.com" tvg-name="chanel3" tvg-logo="http://ch.xyz/logo3.png" group-title="USA HD",CHANEL3-HD
http://proxyserver.com:8080/14/test/3?username=test&password=passwordtest
#EXTINF:-1 tvg-ID="examplechanel4.com" tvg-name="chanel4" tvg-logo="http://ch.xyz/logo4.png" group-title="USA HD",CHANEL4-HD
http://proxyserver.com:8080/15/test/4?username=test&password=passwordtest
The m3u8 feature is like m3u. The playlist should be in the m3u format and should contain all m3u8 tracks.
Sample of the original m3u file containing m3u8 track:
#EXTM3U
#EXTINF:-1 tvg-ID="examplechanel1.com" tvg-name="chanel1" tvg-logo="http://ch.xyz/logo1.png" group-title="USA HD",CHANEL1-HD
http://iptvexample.net:1234/12/test/1.m3u8
#EXTINF:-1 tvg-ID="examplechanel2.com" tvg-name="chanel2" tvg-logo="http://ch.xyz/logo2.png" group-title="USA HD",CHANEL2-HD
http://iptvexample.net:1234/13/test/2.m3u8
% iptv-proxy --m3u-url http://example.com:1234/get.php?username=user&password=pass&type=m3u_plus&output=m3u8 \
--port 8080 \
--hostname proxyexample.com \
## put xtream flags if you want to add xtream proxy
--xtream-user xtream_user \
--xtream-password xtream_password \
--xtream-base-url http://example.com:1234 \
--user test \
--password passwordtest
What Xtream proxy do
- convert xtream
xtream-user
andxtream-password
into newuser
andpassword
- convert
xtream-base-url
withhostname
andport
Original xtream credentials
user: xtream_user
password: xtream_password
base-url: http://example.com:1234
New xtream credentials
user: test
password: passwordtest
base-url: http://proxyexample.com:8080
All xtream live, streams, vod, series... are proxyfied!
You can get the m3u file with the original Xtream api request:
http://proxyexample.com:8080/get.php?username=test&password=passwordtest&type=m3u_plus&output=ts
Download lasted release
Or
% go install
in root repository
- Add an m3u URL in
docker-compose.yml
or add local file iniptv
folder HOSTNAME
andPORT
to expose- Expose same container port as the
PORT
ENV variable
ports:
# have to be the same as ENV variable PORT
- 8080:8080
environment:
# if you are using m3u remote file
# M3U_URL: http://example.com:1234/get.php?username=user&password=pass&type=m3u_plus&output=m3u8
M3U_URL: /root/iptv/iptv.m3u
# Port to expose the IPTVs endpoints
PORT: 8080
# Hostname or IP to expose the IPTVs endpoints (for machine not for docker)
HOSTNAME: localhost
GIN_MODE: release
## Xtream-code proxy configuration
## (put these env variables if you want to add xtream proxy)
XTREAM_USER: xtream_user
XTREAM_PASSWORD: xtream_password
XTREAM_BASE_URL: "http://example.com:1234"
USER: test
PASSWORD: testpassword
BITRATE_VIDEO: 600k
BITRATE_AUDIO: 128k
SCALE: -1:480
CRF: 36
PRESET: ultrafast
HLS_TIME: 10
HLS_LIST_SIZE: 5
% docker-compose up -d
Put files and folders of ./traekik
folder in root repo:
$ cp -r ./traekik/* .
$ mkdir config \
&& mkdir -p Traefik/etc/traefik \
&& mkdir -p Traefik/log
docker-compose
sample with traefik:
version: "3"
services:
iptv-proxy:
build:
context: .
dockerfile: Dockerfile
volumes:
# If your are using local m3u file instead of m3u remote file
# put your m3u file in this folder
- ./iptv:/root/iptv
container_name: "iptv-proxy"
restart: on-failure
labels:
- "traefik.enable=true"
- "traefik.http.routers.iptv-proxy.rule=Host(`iptv.proxyexample.xyz`)"
- "traefik.http.routers.iptv-proxy.entrypoints=websecure"
- "traefik.http.routers.iptv-proxy.tls.certresolver=mydnschallenge"
- "traefik.http.services.iptv-proxy.loadbalancer.server.port=8080"
environment:
# if you are using m3u remote file
# M3U_URL: https://example.com/iptvfile.m3u
M3U_URL: /root/iptv/iptv.m3u
# Iptv-Proxy listening port
PORT: 8080
# Port to expose for Xtream or m3u file tracks endpoint
ADVERTISED_PORT: 443
# Hostname or IP to expose the IPTVs endpoints (for machine not for docker)
HOSTNAME: iptv.proxyexample.xyz
GIN_MODE: release
# Inportant to activate https protocol on proxy links
HTTPS: 1
## Xtream-code proxy configuration
XTREAM_USER: xtream_user
XTREAM_PASSWORD: xtream_password
XTREAM_BASE_URL: "http://example.tv:1234"
#will be used for m3u and xtream auth proxy
USER: test
PASSWORD: testpassword
traefik:
restart: always
image: traefik:v2.4
read_only: true
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./Traefik/traefik.yaml:/traefik.yaml:ro
- ./Traefik/etc/traefik:/etc/traefik/
- ./Traefik/log:/var/log/traefik/
Replace iptv.proxyexample.xyz
in docker-compose.yml
with your desired domain.
$ docker-compose up -d
there is basic auth just for testing. change with a real auth with database and user management and auth with token...
ENJOY!
Grab me a beer ๐ป