Build a web-based IPTV online playback platform using IPTVnator
本文最后更新于 278 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。
Article Abstract
To meet the requirement of accessing IPTV content via a browser, I tried to use IPTVnator to build a web-based playback platform. Its deployment scheme includes frontend and backend Docker container configurations, supporting M3U/M3U8 formats and EPG functions. In actual testing, it was found that although the system provides player options such as HTML5 and Video.js, it is incompatible with HTTP live stream source addresses converted via UDPXy proxy, resulting in the failure of Chengdu Telecom IPTV's m3u files to play normally. Although the latest version adds MPV/VLS player options, they require local installation of dependencies, failing to achieve the expected client-free access goal. The current solution has playback compatibility limitations in specific network environments.
Qwen3-14B · 2026-06-18

Preface

Regarding the fact that I can only watch IPTV using various clients (although I barely watch it), I feel a bit annoyed. What if one day I suddenly want to watch IPTV while outside, but didn't bring my phone, iPad, or MacBook? Well, that possibility is too small; I mainly want to set up a web version IPTV playback solution, so that anyone can watch my home Telecom IPTV directly through a web page (which probably carries some legal risks). So after searching for a while, I found IPTVnator, a cross-platform IPTV player. Since it has a web version deployed via Docker, I wanted to try and see if this player's web version could meet my small requirement.

IPTVnator features introduction:

  • M3u and M3u8 playlist support
  • Upload playlists from file system
  • Add remote playlists via URL
  • Playlist auto-update feature
  • Open playlist from file system
  • Search for channels
  • EPG support (TV Guide) and detailed information
  • TV archive/catch-up/timeshift
  • Group-based channel list
  • Save channels as favorites
  • Global favorites aggregated from all playlists
  • Support HTML video player or Video.js-based player
  • Internationalization, currently supporting 7 languages (en, ru, de, ko, es, zh, fr)
  • Set custom “User-Agent” header for playlists
  • Re-fetch/auto-update playlists
  • Light and dark themes

“Both ”M3u and M3u8 playlist support” and ”EPG support (TV Guide) and detailed information" are what I need, so I started the following scientific research attempt journey.

Deployment

IPTVnator consists of two parts: frontend (external web client) and backend.
Backend deployment:
The backend docker run command is as follows:

docker run --name iptvnator-backend -d --restart=always \
-p 7333:3000 \
-e CLIENT_URL=http://localhost:4333 \
4gray/iptvnator-backend:latest

-p 7333:3000 \
-e CLIENT_URL=http://localhost:4333 \
4gray/iptvnator-backend:latest
Explanation of key parameters:
-p 7333:3000
Map port 7333 of the host machine to port 3000 of the container

-e CLIENT_URL=http://localhost:4333
Specify the address and port of the frontend

docker run --name iptvnator-web -d --restart=always --network=public-net \
-p 4333:80 \
-e BACKEND_URL=http://localhost:7333 \
4gray/iptvnator:latest

-p 7333:3000 \
Frontend deployment:
The frontend docker run command is as follows:
docker run --name iptvnator-web -d --restart=always --network=public-net \
-p 4333:80 \
-e BACKEND_URL=http://localhost:7333 \https://github.com/4gray/iptvnator/blob/electron/docker/docker-compose.yml
4gray/iptvnator:latest

version: '3'

services:
  backend:
    image: 4gray/iptvnator-backend:latest
    ports:
      - "7333:3000"
    environment:
      - CLIENT_URL=http://localhost:4333 #this one should match with the address and port in frontend CLIENT_URL env

  frontend: 
    image: 4gray/iptvnator:latest
    ports:
      - "4333:80"
    environment:
      - BACKEND_URL=http://localhost:7333 # this one should match with the address of the backend service

Initial configuration and usage

Change language to Chinese

Map port 4333 of the host machine to port 80 of the container

image.png

-e BACKEND_URL=http://localhost:7333
image.png

image.png

Add playlist

Specify the address and port of the backend. If both the backend and frontend are on the same host, you can just use localhost when specifying addresses for each other.

image.png

The docker-compose.yml address on GitHub is as follows:
image.png

Conclusion

If you cannot open GitHub, the specific content of docker-compose.yml is as follows:iKuai Soft Router Series: Achieving Telecom IPTV All-Media Playbackversion: '3'

image.png

services:

So I have to admit that this attempt did not achieve the effect I really wanted, and I can only wait for the front end to be upgraded in the future to try again.

IPTVnator provides an address for the experience, so everyone can go and try it first:
IPTV Experience Site Address

📌 Content Structure Prompt:
This content belongs to the "Blog Knowledge Map" part, you can view the complete content path from here: Blog Knowledge Map 。
View Related Categories · 3 Matches
📎 Related Articles
Share this article
The blog content is original, please indicate the source when reposting! The RSS address of the blog is:https://blog.tangwudi.com/feed, welcome to subscribe; if needed, you can join theTelegram Groupto discuss questions together.

Comments

  1. Whining
    Windows Edge 135.0.0.0
    1 year ago
    2025-5-06 13:24:47

    Have you found a web player that can play m3u8 perfectly now? I am also looking for something similar but haven't found it.

    • Owner
      Whining
      Macintosh Chrome 135.0.0.0
      1 year ago
      2025-5-06 16:24:22

      I didn't find one, I've already given up.

  2. chris
    Windows Edge 131.0.0.0
    2 years ago
    2025-1-16 13:18:44

    when i go to web gui front end i add list and it sasy something about the backend not reachable now i have the backend url in front end and front end in back end oh im in docker unraid im not getting it sorry to bug

    • Owner
      chris
      Macintosh Chrome 131.0.0.0
      2 years ago
      2025-1-17 15:30:52

      Is it related to the backend address specified in the frontend configuration during deployment? When I deployed the frontend, the backend address I pointed to was the physical IP address of the host machine, as per the official instructions. However, I just checked the official docker-compose.yml, and it has now been unified to localhost:


      Show Image
      image.png

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗ
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Kaomoji
Emoji
Little Dinosaur
Flower!
Previous
Next
       

👋 Welcome to “Wudi's Personal Blog”

Here, long-term exploration is mainly carried out around the following directions:

🧱 Personal Digital Infrastructure and Blog System Construction
☁️ Cloudflare and Network Architecture Practice
🧠 AI and Knowledge System Exploration
🛡️ Network Security and Access Optimization
🎵 Music and Sound Cognition
👁️ Cognitive Perspectives and Worldviews