MyIPTV is a utility program that converts IPTV program streams from UDP multicast to HTTP, and you can regard it as an enhanced (with admin UI) udpxy.
To use MyIPTV
, the TV needs to support third-party apps.
A soft routing device is required, a 30$ - 40$ one such as R2S
or H28K
is enough (I myself is using a R2S Plus, but seems H28K is a little cooler),
it's also okay to use a computer. The device should have at least two
network interfaces, and one of them must be a cable interface.
My network structure is as below. The soft router device and the iTV
port of
the ONT must be connected with a cable. For other connections, both cable and
WIFI are fine, but cable is recommended.
A static IP address should be bind to the LAN port of the soft routing device,
As an example, the static IP address which I am using is 192.168.1.2
.
It is recommended to install a general operating system such as Ubuntu on the soft router, not a dedicated soft routing system such as openwrt, I tried FriendlyWrt at the beginning and failed.
Download a MyIPTV binary corresponding to the CPU architecture of the soft
router device from here, and
then start MyIPTV
by executing the commands like below:
$ mv myiptv-v0.1.0-linux.arm64 myiptv
$ chmod +x myiptv
$ ./myiptv
If your LAN IP address starts with 192.168.
, MyIPTV
generally can correctly
detect the network-related configurations; If not, you need to manually prepare
a myiptv.json
configuration file and restart MyIPTV. The configuration file
needs to contain at least the following settings:
{
"config": {
"serverAddr": "192.168.1.2:7709",
"mastIface": "eth0"
}
}
Where serverAddr
is the service address of MyIPTV
, mcastIface
is the name
of the network interface connected to the iTV
port of the ONT.
After MyIPTV
starts successfully, we can access its service via a browser.
Navigate to "http://{serverAddr}" (e.g. http://192.168.1.2:7709
) then we can
see the admin UI. If you haven't configure serverAddr
manually, its default
value is "{LAN IP of the soft router}:7709", e.g. 192.168.1.2:7709
.
Note: The
MyIPTV
process will be killed at the close of the SSH session close, to keep it running, you may neednohup
or makeMyIPTV
a daemon.
We can import/export the channel list from the "Channel Management" page of the
admin UI. The imported/exported file is in CSV format, lines start with #
are
comments, below is an example file:
#Group,Name,DisplayName,Hide,Logo,Source
CCTV,CCTV1,CCTV-1 综合,F,http://epg.51zmt.top:8000/tb1/CCTV/CCTV1.png,225.1.0.103:1025
CCTV,CCTV1,CCTV-1 综合,F,http://epg.51zmt.top:8000/tb1/CCTV/CCTV1.png,225.1.8.103:8002
CCTV,CCTV2,CCTV-2 财经,F,http://epg.51zmt.top:8000/tb1/CCTV/CCTV2.png,225.1.0.104:1025
CCTV,CCTV2,CCTV-2 财经,F,http://epg.51zmt.top:8000/tb1/CCTV/CCTV2.png,225.1.8.2:8084
Beijing,北京卫视,,F,http://epg.51zmt.top:8000/tb1/ws/beijing.png,225.1.0.111:1025
Beijing,北京卫视,,F,http://epg.51zmt.top:8000/tb1/ws/beijing.png,225.1.8.21:8002
MyIPTV
can provide channel list in two format, TEXT
and M3U8
.
If the IPTV app on the TV side requires TEXT
format (such as DIYP), the URL of the channel
list is http://{serverAddr}/iptv/channels
, e.g. http://192.168.1.2:7709/iptv/channels
.
If the IPTV app on the TV side requires M3U8
format (such as Kodi), the URL of the channel
list is http://{serverAddr}/iptv/channels?fmt=m3u8
, e.g. http://192.168.1.2:7709/iptv/channels?fmt=m3u8
.
Currently, the EPG is provide only in JSON format of DIYP, its URL is
http://{serverAddr}/iptv/epg
, e.g. http://192.168.1.2:7709/iptv/epg
.
If you have a public IP, a domain name resolved by Cloudflare, then you can
publish your MyIPTV
service to the Internet. Please take below configuration
as a reference on how to do this:
{
"ddns": {
// The target domain record.
"recordName": "myiptv.example.com",
// Cloudflare zone ID
"zoneID": "xxxxxxxxxxxxxxxxxxxxxxxx",
// Cloudflare API key
"apiKey": "yyyyyyyyyyyyyyyyyyyyyyyy",
// URLs to fetch the public IP, if they return an IPv4 address, the A
// record is updated, and AAAA record is updated if they return an IPv6
// address.
"wanIPProviders": ["http://ipv4.icanhazip.com", "https://whatismyip.akamai.com"],
// DNS server addresses to speed up the DNS resolve process, this
// configuration is optional, if provided, the address must include the
// port number (typically 53). At most of the time, these should point
// to the Cloudflare DNS servers of your domain.
"dnsServers": ["beth.ns.cloudflare.com:53", "rudy.ns.cloudflare.com:53"]
}
}
The frontend of MyIPTV
is developed with Vue
and Ant Design Vue
, I'm not
good at frontend, that's only basic features have been implemented.
The backend is developed with Go
, without any third party dependencies, and
will not add one in the future.
The UDP packet parsing feature is copied from udpxy
, thanks Pavel Cherenkov,
the author of udpxy
.
Maybe I will implement the following features later, but there's not any guarantee.
- Channel list support more formats.
- EPG support more formats.
- Install MyIPTV as a daemon.
- Scan for IPTV sources.
- Admin UI support other languages.
And, welcome PRs.