Troubleshooting
Something's not right? Start here.
Find the thing that sounds like your problem. Every fix is written as a list of checks in plain language — start at the top and work down. Most people are sorted within two or three.
Try these first
Restart it
Stop the container and start it again. It genuinely clears a lot of temporary problems, and it never loses your settings.
Give it ten minutes
A brand-new install has a lot to do on its first run. An empty lineup right after starting is normal, not broken.
Check both addresses
Apps need the channel list and the guide separately. Missing the second one is the single most common mistake.
15 of 15 answers shown
Getting it running
The dashboard won't open
Most likely: Nine times out of ten you're typing the wrong address, or the container isn't actually running yet.
Work through these in order:
- Check the address. It's your server's name or IP address followed by :8080 — for example http://192.168.1.50:8080. It is not rebeliptv.com, and it won't work as https.
- Use the machine's address, not 'localhost', unless you're sitting at that machine. From your laptop, localhost means your laptop.
- Check the container is running. On a NAS, look at Container Manager or the Docker tab and confirm it says running rather than stopped or exited.
- If it keeps stopping, open its logs — the reason is almost always written there in plain text on the last few lines.
- If you changed the port in the setup guide, use that number instead of 8080.
If you're comfortable with Docker
Run `docker compose ps` to confirm the container is up and `docker compose logs -f iptv` to follow the boot. A container that exits immediately is usually a port clash — `Bind for 0.0.0.0:8080 failed: port is already allocated` — or a permissions problem on the data volume.
It says the port is already in use
Most likely: Something else on that machine already answers on port 8080.
Work through these in order:
- Go back to the setup guide and change the host port to something free — 8090 or 8181 are usually safe.
- Copy the updated file over your old one and start it again.
- Remember the dashboard address changes to match the new number.
If you're comfortable with Docker
Only the left-hand side of the `ports:` mapping needs to change (`8090:8080`). The container keeps listening on 8080 internally, so nothing else in the config needs touching.
Watching channels
I don't see any channels
Most likely: On a fresh install it's usually still building your lineup — that takes a few minutes the first time.
Work through these in order:
- Give it five or ten minutes after first starting, then refresh the dashboard. The first build has the most work to do.
- Check that channels are actually switched on. In the dashboard, look at your channel list and make sure things aren't all disabled.
- If you added your own playlist, check it loaded — a playlist that failed to download shows an error rather than channels.
- If your sources aren't reachable where you live, open Settings → Sources and switch on 'Use Rebel IPTV playlist'. That pulls the feeds through our relay instead.
Channels are listed but nothing plays
Most likely: Either the source behind that channel has gone down, or the app you're watching in can't handle the stream.
Work through these in order:
- Try the same channel in the dashboard's built-in player first. That tells you whether the problem is the channel or the app you were using.
- If it plays in the browser but not in your TV app, the app is the problem — try VLC to confirm, then check the app's own settings.
- If it doesn't play in the browser either, try a different channel. One dead channel is normal; every channel dead points at your network.
- Check your server can reach the internet. If lookups are failing, nothing will play.
If you're comfortable with Docker
The agent validates feeds before publishing them and hides ones that are offline, so a listed-but-dead channel usually means it died between the last validation pass and your click. Most channels have more than one upstream source and will fail over on the next attempt.
It says "stream limit reached"
Most likely: You're already playing as many channels at once as your server allows — it's four unless you've changed it.
Work through these in order:
- Open Settings → Connect → Simultaneous streams and raise the number. Anything from 1 to 32 is allowed.
- Remember what counts: watching the same channel on three TVs is one stream, because they share a single feed. Three different channels is three.
- Don't set it higher than the connection behind your channels can actually carry — if you do, the source starts refusing instead, which is a much more confusing error.
- You don't need to re-pick the channel. It starts on its own as soon as another one stops.
If you're comfortable with Docker
Before 1.4.0 this number was only advertised to Plex, Emby and Channels DVR and nothing enforced it, so an existing setup that regularly played more than four at once will start meeting the card after upgrading. It now applies to every route in — the tuner, the playlist and the dashboard's own player.
The picture freezes for a second every so often
Most likely: A brief hiccup at the source. There's a setting built for exactly this.
Work through these in order:
- Turn on Settings → Playback → Buffer live feeds and pick a few seconds. Your server then holds that much of the feed in hand, so a short stall drains the cushion instead of stopping the picture.
- The trade-off: channels take about that many seconds to start, and you watch that far behind live. Start small — a few seconds usually does it.
- If your server is on Wi-Fi, plug it into the network with a cable. This fixes more stuttering than any setting.
- If it's one channel rather than all of them, that source is just weak — most channels have backups and will swap on the next reconnect.
If you're comfortable with Docker
Buffering is off by default to stay at the live edge, and it applies in both local and hosted-feed modes and to every player. It's a server-side jitter buffer, so Jellyfin, Plex, Emby and the built-in web player all get the same smoothing.
The TV guide
The guide is empty, or says 'No information'
Most likely: The app got your channels but never got the guide — and if you connected it as a tuner, that's expected, because the tuner can't carry one.
Work through these in order:
- If you added your server as a tuner (Plex, Emby, Channels DVR, or Jellyfin's HDHomeRun option), that's the cause. A tuner hands over channels and nothing about what's on them, so you have to add the guide yourself as an XMLTV source pointing at your /epg address.
- If you used the playlist instead, check the app is actually reading the guide address from it — Jellyfin does this automatically, but many players ask for the /epg address separately.
- Tell the app to refresh its guide. Many only fetch it once a day, so it won't appear the moment you add it.
- On a brand-new install, wait for the first full build to finish before expecting a complete guide.
- If you've set an API key, the guide address needs it too: /epg?key=YOUR_KEY.
If you're comfortable with Docker
The M3U header carries `url-tvg` and `x-tvg-url` pointing at /epg, which is how Jellyfin's M3U tuner finds it with no second URL. The HDHomeRun protocol has no equivalent — `lineup.json` carries only GuideNumber, GuideName, URL and HD — so guide data always arrives out-of-band on that route. The EPG is standard XMLTV; /epg.gz serves a compressed copy.
The guide times are wrong
Most likely: Your server thinks it's in a different timezone to you.
Work through these in order:
- Check the timezone in your configuration file. The setup guide fills this in from your browser, but if you set the server up from a different country it may have guessed wrong.
- Set it to your own timezone — for example Europe/London or America/New_York — then restart the container.
- If the times are out by exactly a whole number of hours, this is always the cause.
- If only some programmes are wrong, that's the source's own listings being off, not your setup.
If you're comfortable with Docker
It's the `TZ` environment variable in your compose file or Quadlet unit. It takes an IANA timezone name; `Etc/UTC` is the fallback if nothing is set.
Connecting apps
Jellyfin plays for a moment then freezes
Most likely: Almost always one Jellyfin setting: "Auto-loop live streams".
Work through these in order:
- In Jellyfin, open your tuner's settings and turn Auto-loop live streams OFF.
- With it on, Jellyfin re-encodes every channel instead of playing it as-is. The re-encode can't keep up with a live feed, so it falls behind and the picture stops.
- While you're there: turn off 'Allow fMP4 transcoding container', and turn on 'Allow stream sharing' and 'Read input at native frame rate'.
- One trade-off with auto-loop off: after your server restarts or updates itself, pick the channel again to resume.
Plex, Emby or Channels DVR can't find my server
Most likely: It isn't meant to find it by itself — your server doesn't announce itself on the network, so you type its address in.
Work through these in order:
- Check the tuner is switched on: Settings → Connect → Act as an HDHomeRun tuner. It's on by default.
- There's no address to copy — you type in your server's own address and port, the same one you open the dashboard with, in the form 192.168.1.50:8080.
- In Plex, open Live TV & DVR and click 'Don't see your HDHomeRun?', then enter that. Emby and Channels DVR have the same 'add manually' option.
- When it asks about guide data, point it at your EPG address. The tuner only supplies channels, so without this you'll get a lineup with no listings.
- If your server and the app are on different Docker networks, use an address the app can actually reach — the same Settings page has a toggle for using the container hostname.
If you're comfortable with Docker
The agent answers the HDHomeRun discovery and lineup endpoints over HTTP but does not broadcast on the network, so autodiscovery will never see it — manual entry by address is the supported path and is exactly as reliable. Note the tuner endpoints are not protected by your API key; the protocol has no field to carry one, so use it on a trusted network.
My player asks for a username and password
Most likely: You've set an API key, so the addresses need it on the end.
Work through these in order:
- Find your key in the dashboard under Settings → Access.
- Add ?key=YOUR_KEY to the end of both addresses — so the playlist becomes …/playlist?key=YOUR_KEY and the guide becomes …/epg?key=YOUR_KEY.
- If you didn't mean to set a key, you can clear it in Settings → Access and use the plain addresses.
I don't know which address to give my app
Most likely: Almost every app wants the same two, and they're both listed in your dashboard.
Work through these in order:
- Open Settings → Connect in your dashboard. Everything you need is on that page.
- For TiviMate, IPTV Smarters, VLC or OTT Navigator: give it the playlist address, and the guide address if it asks for one separately. Kodi needs its PVR IPTV Simple Client add-on first.
- For Jellyfin, Plex, Emby and Channels DVR: either route works. The playlist is simplest on Jellyfin and Emby, which have an M3U tuner built in.
- On Plex the tuner is the easier route, because its playlist path needs a Plex Pass. Add the server by its address and port, then point the guide at your EPG address.
Keeping it going
It worked yesterday and now it doesn't
Most likely: Usually a source changed at the other end, which is out of your hands but rarely permanent.
Work through these in order:
- Restart the container. This clears a surprising number of temporary problems.
- Check whether it's everything or just some channels. A few channels dropping is normal churn.
- Update to the newest version — source changes are often already fixed there.
- If a whole source has stopped working where you live, try relay mode in Settings → Sources.
I updated and lost my settings
Most likely: Your data wasn't being kept outside the container, so it went when the container was replaced.
Work through these in order:
- Check your configuration file has a storage line keeping the data folder. The file our setup guide generates always includes it.
- If it's missing, add it, then set your channels up once more — it'll survive from then on.
- Updating through the dashboard button or through the setup guide's file always keeps your data.
If you're comfortable with Docker
This is the `iptv-data:/app/data` volume. Without it the container is ephemeral and every `up -d` starts from scratch. Deleting the container is safe as long as the named volume survives.
Still stuck
Ask us — and get an answer first time
Open an issue on GitHub. Including these four things usually turns a week of back-and-forth into a single reply.
- What you expected, and what happened instead. One sentence each is plenty.
- Where you're running it — Synology, unRAID, a Windows PC, a Pi, and so on.
- Your version number, from the bottom of the dashboard.
- The last twenty or so lines of the log, if it won't start. Paste them as text rather than a photo.
Don't paste your API key, your public address or any source URLs into a public issue.