Files
iptv-proxy/README.md
Pierre-Emmanuel Jacquier a381ee5bb2 README: typo poxy -> proxy
2020-03-10 11:10:16 +00:00

243 lines
6.9 KiB
Markdown

# Iptv Proxy
[![Build Status](https://travis-ci.com/pierre-emmanuelJ/iptv-proxy.svg?branch=master)](https://travis-ci.com/pierre-emmanuelJ/iptv-proxy)
## Description
Iptv-Proxy is a project to proxyfie an m3u file
and to proxyfie an Xtream iptv service (client API).
### M3U
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.
### Xtream code client api
proxy on Xtream code (client API)
support live, vod, series and full epg :rocket:
### M3u Example
Original iptv m3u file
```m3u
#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
```Bash
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
```m3u
#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
```
### Xtream code client API example
```Bash
% 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 ` and `xtream-password` into new `user` and `password`
- convert `xtream-base-url` with `hostname` and `port`
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
```
## Installation
Download lasted [release](https://github.com/pierre-emmanuelJ/iptv-proxy/releases)
Or
`% go install` in root repository
## With Docker
### Prerequisite
- Add an m3u URL in `docker-compose.yml` or add local file in `iptv` folder
- `HOSTNAME` and `PORT` to expose
- Expose same container port as the `PORT` ENV variable
```Yaml
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
```
### Start
```
% docker-compose up -d
```
## TLS - https with traefik
Put files of `./traekik` folder in root repo
`docker-compose` sample with traefik:
```Yaml
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
expose:
# have to be the same as ENV variable PORT
- 443
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:iptv.proxyexample.xyz"
environment:
# if you are using m3u remote file
# M3U_URL: https://example.com/iptvfile.m3u
M3U_URL: /root/iptv/iptv.m3u
# Port to expose the IPTVs endpoints
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:8080"
#will be used for m3u and xtream auth proxy
USER: test
PASSWORD: testpassword
traefik:
restart: unless-stopped
image: traefik:v1.7.16
read_only: true
command: --web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./acme.json:/acme.json
- ./traefik.toml:/traefik.toml
```
Replace `iptv.proxyexample.xyz` in `docker-compose.yml` and `traefik.toml` with your desired domain.
```Shell
$ touch acme.json && chmod 600 acme.json
```
```Shell
$ docker-compose up -d
```
## TODO
there is basic auth just for testing.
change with a real auth with database and user management
and auth with token...
**ENJOY!**
## Powered by
- [cobra](https://github.com/spf13/cobra)
- [go.xtream-codes](https://github.com/tellytv/go.xtream-codes)
- [gin](https://github.com/gin-gonic/gin)