Skip to content

Connect the First Client

This walks through connecting Jellyfin Live TV, the most commonly used first client integration. Other clients follow the same two basic patterns (M3U/XMLTV or HDHomeRun-style) — see Clients for a fuller list.

Live TV only

These steps add live channels and guide data. They do not add IPTV movies or series to Jellyfin's native Movies or Shows libraries. M3Undle does not currently export the .strm files and directory layout that native Jellyfin VOD/series integration would require. See Jellyfin: Movies and series.

Option A: M3U + XMLTV (works with most clients)

  1. In Jellyfin: Dashboard → Live TV → Add M3U Tuner and enter:
    http://<host>:8080/m3u/m3undle.m3u
    
  2. Add the guide data: Dashboard → Live TV → Add XMLTV and enter:
    http://<host>:8080/xmltv/m3undle.xml
    
  3. Save, then let Jellyfin refresh its guide.

This same pattern (M3U + XMLTV URL) works for NextPVR, IPTVnator, IPTV Smarters, and most other players — see Clients for client-specific notes.

Option B: HDHomeRun-style tuner

M3Undle emulates a network HDHomeRun tuner so DVR applications can consume your lineup as if it were a hardware tuner.

  1. In Jellyfin: Dashboard → Live TV → Add Tuner Device → HD Homerun and enter:
    http://<host>:5004
    
    (the default HDHomeRun port — see Install with Docker)
  2. Jellyfin fetches /discover.json and follows its advertised lineup URL automatically.

M3Undle serves the same HDHomeRun endpoints on every port it's actually listening on, so if your deployment only publishes port 8080 (some reverse-proxy or custom-compose setups do), the same URLs work there too. Confirm the exact Discover JSON URL on M3Undle's own HDHomeRun page rather than assuming a port either way.

Manual entry like this is the recommended path — some clients' auto-discovery doesn't reliably find M3Undle in Docker bridge/NAT networking. See Clients > HDHomeRun-Compatible Clients if you want auto-discovery working too.

If nothing shows up

Confirm you've actually published a lineup first — see Create the First Lineup/Profile. An empty M3U endpoint means no channels have been included yet, not a connection problem. See Troubleshooting > Client Cannot Connect if the endpoint itself isn't reachable.

Next step

You now have a working end-to-end setup. From here:

  • Core Concepts explains the ideas behind providers, profiles, EPG, and stream proxying in more depth
  • Guides covers shaping the lineup further — custom groups, event tracking, EPG mapping