Goal: let any device on your LAN (computer, phone, TV) watch IPTV live directly, with no set-top box
Result: deploy once and every device in the house can watch; you control channel-switch speed and how many concurrent streams you run
Difficulty: Moderate — you must first put your ONT into bridge mode, then run one Docker container on your NAS
Time required: about 30 minutes
1. Why you need multicast-to-unicast
What multicast is
Carrier IPTV uses multicast: one data stream is sent once from the source, and
every device on the network that has "subscribed" to that channel receives it at the same time.
The benefit is bandwidth savings — if 100 people watch the same channel, the carrier sends the data only once.
The problem: ordinary devices can't play multicast
Multicast relies on the IGMP protocol, and that protocol only works inside a LAN.
The trouble is:
- Phones, tablets, and smart TVs** mostly do not support IGMP**
- Even if they do, they do not support the carrier's VLAN-tagged multicast
- Across subnets (Wi-Fi devices, for instance) it simply cannot play
The result: your set-top box can watch, but your phone, computer, and Apple TV cannot.
What multicast-to-unicast solves
Run a forwarding service inside the LAN, and it:
- Subscribes to the multicast stream over IGMP
- Converts the multicast stream into an ordinary HTTP unicast stream
- Any device that can open an HTTP address in a player can watch
ISP multicast stream -> [forwarding service on the NAS] -> HTTP unicast -> any device
rtp://239.x.x.x:4120 http://NAS_IP:5893/rtp/239.x.x.x:4120
For the prerequisite ONT bridge-mode steps, see the ONT bridge mode guide.
2. Prerequisites (both must be done first)
1. Put the ONT into bridge mode
This step is mandatory. If the ONT is still in router mode, the IPTV VLAN traffic never reaches your NAS.
For the full steps see the ONT bridge mode guide; here are just the key points:
- Obtain the ONT superadmin password
- Back up the original configuration
- Change the internet VLAN to bridge mode and let your own router handle dial-up
- Critical: leave the IPTV VLAN untouched — do not bridge it along with the rest
2. Enable IGMP proxy on your router / software router
In your router's IPTV settings, turn on IGMP Proxy (sometimes called IGMP Snooping or multicast proxy).
Where to find it by system:
3. Obtain the carrier's multicast addresses
Multicast addresses vary by region and carrier; there is no universal value. How to get them:
- Packet capture: while the set-top box plays normally, capture packets on the router and look for IGMP Join messages
- Search online: search for "[your city] [carrier] iptv multicast address"
- Ask the installer: sometimes they can tell you directly
You need two things:
- VLAN ID (for example 85 or 3961; it differs by carrier)
- Multicast IP and port (for example
239.125.2.66:4120)
While you are at it, check your current network environment:NAT type testing tool
3. Choosing among the three options (the core section)
The conclusion first:All three tools do the same job; the difference is maintenance status and performance.
Option 1: udpxy — the oldest, with the most documentation
This has been the go-to in the Chinese IPTV community for over a decade.
ifmm/udpxy with 19,691 pulls), the most tutorials, and a complete record of pitfallsA fact you must know: udpxy's own README says so:
udpxy has not been extended or supported for 4+ years,
having been replaced by Gigapxy - a superior enterprise-oriented product.
that does not mean it is unusable — it ran stably for over a decade, it is simply no longer updated.
But if you want better performance or newer features, look at the next two.
Option 2: msd_lite — the modern replacement for udpxy
The name comes from Multi Stream daemon, and the community widely accepts it as the udpxy replacement.
If you search "udpxy alternative" on forums like Enshan, this is the first thing recommended.
Option 3: rtp2httpd — the most feature-complete
This project positions itself as "the modernized version of udpxy", and the author announced it on V2EX.
Comparison summary
My recommendation:
- First time trying this: use udpxy — plenty of material, easy to search when something breaks
- Running stably and want to optimize: switch to msd_lite
- Multiple devices and you care about channel-switch speed: go with rtp2httpd
The demo below uses udpxy because it is the easiest to get started with, and migrating to the other two follows exactly the same logic.
4. Hands-on: deploying udpxy with Docker on a NAS
Why use a NAS instead of a router
A router can run it too, but a NAS has several advantages:
- Usually a stronger CPU, so multiple concurrent streams are more stable
- Runs 24 hours a day, so you don't load down your router
- Easy Docker management, with simple upgrades and rollbacks
- It can run other things too (a media library, for instance)
docker-compose.yml
Create a new udpxy folder under your NAS's Docker directory and put this file in it:
version: "2"
services:
udpxy:
image: ifmm/udpxy
container_name: udpxy
network_mode: host
restart: always
Then start it:
docker-compose up -d
Need to generate a more complex compose configuration? Use the docker-compose generator.
Three things you must get right
1. network_mode: host is mandatory
This is the easiest trap to fall into. udpxy needs to listen to multicast traffic directly, and
if you use Docker's default bridge network, it will not receive multicast packets at all.
So network_mode: host cannot be omitted.
2. Port 5893
udpxy always uses port 5893 and provides two functions at once:
http://NAS_IP:5893/status/http://NAS_IP:5893/restart/http://NAS_IP:5893/rtp/multicast-IP:port3. NAS network configuration
You must ensure the NAS and the IPTV VLAN are on the same Layer 2 network.
Two common approaches:
- Dual-NIC NAS: one port on the regular network, one on the IPTV VLAN
- Switch trunk: pass the IPTV VLAN through the switch to the NAS
If you use a bypass router setup, see the OpenWrt bypass router deployment guide.
Verifying success
Step one: open the status page in a browser
http://NAS_IP:5893/status/
If you can see statistics, the service is running.
Step two: test one channel
# assume the multicast address is 239.125.2.66:4120
curl -I 'http://NAS_IP:5893/rtp/239.125.2.66:4120'
A return of HTTP/1.0 200 OK means forwarding works.
5. Using it in a player
Address format
Just remember this conversion rule:
rtp://239.125.2.66:4120http://NAS_IP:5893/rtp/239.125.2.66:4120On a computer
mpv http://NAS_IP:5893/rtp/...TV / set-top box
- Kodi: install the PVR IPTV Simple Client add-on and import an m3u playlist
- Smart TV: use the built-in player or install VLC for Android TV
- Apple TV: use VLC or Infuse
Recommended practice: collect every channel address into a single .m3u file,
so the player only needs one import to see all channels instead of typing addresses each time.
#EXTM3U
#EXTINF:-1, CCTV-1 General
http://NAS_IP:5893/rtp/239.125.2.66:4120
#EXTINF:-1, CCTV-2 Finance
http://NAS_IP:5893/rtp/239.125.2.67:4120
6. Which NAS units can handle it
Good news: multicast-to-unicast is an I/O-bound task, so it does not demand much CPU.
Bad news: with multiple concurrent 4K streams, both CPU and network matter.
Rough guidance (not measured; verify against your own setup)
A few easily overlooked points:
- The network port matters more than the CPU — a gigabit port gets tight at three 4K streams
- Other services on the NAS compete for resources — if Plex transcoding runs at the same time, leave headroom
- ARM NAS units can run it too — the
ifmm/udpxyimage supports arm64 and armv7
Want benchmark numbers for a specific model? See the CoreMark data in the NAS CPU performance ranking.
7. FAQ
Q1: It won't play and just keeps spinning?
Troubleshoot in this order:
- Test the status page first (
/status/) — if it won't open, the container isn't running - Confirm
network_mode: host— this is the most common cause - Confirm the multicast address is correct — verify by packet capture, don't rely on memory
- Confirm IGMP proxy is enabled on the router
- Confirm the NAS is on the IPTV VLAN
Q2: It plays but stutters badly — how do I troubleshoot?
First determine whether it is "the source" or "the network":
- Try another channel — if only one channel stutters, it is a source problem
- Try a wired connection — if Wi-Fi stutters but wired does not, it is a wireless bandwidth problem
- Check the traffic statistics on the status page — confirm forwarding itself is not dropping packets
Q3: Channel switching takes 3-5 seconds. Is that normal?
Yes, it is normal. The channel-switch delay in multicast-to-unicast mainly comes from:
- The player reissuing the HTTP request
- The service re-joining via IGMP
- Waiting for a keyframe (I-frame)
To go faster: use rtp2httpd, which supports the FCC fast channel-change protocol.
Q4: Why can I only watch some channels?
Common causes:
- Incomplete channel list — the multicast addresses you captured were only what the set-top box was subscribed to at that moment
- Some channels are encrypted — they need set-top box authorization and cannot be forwarded
- Wrong VLAN — some carriers put live TV and catch-up VOD on different VLANs
Q5: Can I watch on my phone over Wi-Fi?
Yes, as long as the phone and the NAS are on the same LAN.
But if the NAS is on the IPTV VLAN and the phone is on the regular network, your router needs to do cross-VLAN routing.
Q6: Does it use a lot of bandwidth?
A key concept: within the LAN, multicast occupies only one stream's worth of bandwidth no matter how many people watch.
But once converted to unicast, each viewer takes one stream's worth.
A gigabit LAN is more than enough, but on Wi-Fi you need to watch signal quality.
Q7: Will the carrier notice I'm forwarding inside my LAN?
Technically: the forwarding happens inside your own LAN, so what the carrier sees is the same IGMP subscription as your set-top box.
In practice: some carriers limit the number of simultaneous subscriptions (allowing only 2 streams, for example), and reject anything beyond that.
Recommendation: don't run excessive concurrent streams — it hurts the experience and may trigger those limits.
Q8 addendum: Does multi-dial affect IPTV?
Yes. If you also use single-line multi-dial, the multiple WAN outlets it creates can interfere with the IPTV VLAN,
causing the set-top box to fail IGMP multicast.
Recommendation: exclude the IPTV interface from mwan3 load balancing; for specifics see
the OpenWrt single-line multi-dial guide: aggregating bandwidth with mwan3.
Q8: Do Synology / QNAP / Zspace all work?
All of them do, as long as they can run Docker.
The only difference is how networking is configured — single-NIC and dual-NIC setups differ.
8. Summary
The three options in one line each
The three most common pitfalls
- Forgetting
network_mode: host— no multicast received, which shows up as "spinning forever" - The ONT is still in router mode — the VLAN never reaches the NAS, so bridge it first
- IGMP proxy not enabled on the router — multicast packets never enter your LAN
The core value
The essence of this setup is freeing the carrier's IPTV from "a single set-top box" and
turning it into "one HTTP stream on your LAN" — after which any device can watch,
and you can choose your player and organize your channel list however you like.
The deployment cost is essentially zero (your NAS is already running), and the improvement in experience is very noticeable.
