upvote
Show HN: I pipe free sports streams into Jellyfin – no ads, just HLS

(github.com)

I self-host Jellyfin on my homelab and got frustrated opening a laptop every time there was a football match just to deal with popup-infested streaming sites. The actual video underneath is just a standard HLS stream, but getting it into Jellyfin turned out to be harder than expected.

Three problems: (1) the m3u8 URL is buried behind iframes and obfuscated JS, (2) tokens expire every few hours, and (3) the upstream server checks User-Agent and Referer headers on both the playlist and .ts segments — Jellyfin doesn't send these, so you get 403.

I ended up writing three scripts:

- detect-headers.sh: give it a page URL, it follows the iframe chain, extracts the m3u8, then brute-forces header combinations on both .m3u8 and .ts requests. Tells you exactly what the stream needs.

- hls-proxy.py: single-file Python reverse proxy (stdlib only, zero pip dependencies). Injects the required headers and rewrites the m3u8 so segment requests also go through the proxy.

- refresh-m3u.sh: extracts fresh URLs before tokens expire, outputs a Jellyfin-ready M3U with logos and channel groups. Runs on a systemd timer.

~200 lines of Python, ~100 lines of bash. The proxy is the interesting part technically — it has to handle relative and absolute segment URLs, rewrite URI= in EXT tags (for encryption keys), and add CORS headers since Jellyfin's web client makes cross-origin requests.

Happy to answer questions about the approach or implementation.

reply
Cool implementation. Never occurred to me Jellyfin could serve as a streaming platform on its own! I’ll probably find the answer after sending this reply (may be helpful to others), but does it come with this functionality out of the box, or is any plug-in needed?

How probable is it that this kind of method can be patched or obfuscated further? I assume that since the HLS stream is always at the core, it’s a matter of just finding alternative ways to dig through it.

Any quirks this implementation has wrt. things like quality or additional delay? Thanks! I’d like to try out if your methods could be used to make some sort of snippet that could be sent to VLC that’s running on a TV or streaming device.

reply
Adjacent, but back when Plex supported plugins all your plugin had to do was eventually give it a link to a video / stream and bam, you could watch the content on any device. I built a fairly popular plugin around the idea of deduplicating tv / movie listings and letting people watch now or direct download.
reply
I'm curious if there is a particular technical reason you chose to make this as a separate script rather than some kind of Jellyfin plugin? I actually appreciate that you did it in this fashion (more useful for me personally), just curious if there were limitations within the Jellyfin/dotNet system.

Either way, gonna make my World Cup viewing experience this year a lot easier haha

reply
I love it. I’m willing to pay for streaming sports services, to a point, but all of them are freaking insane. For example, my wife and I like watching baseball. So let’s do the right thing and pay for it, right? LOL, as if that were possible. For $120[0] we can watch the Giants games, or for $220, all games… but subject to blackout. For $120, we can’t actually watch home games. We’d have to pay for a separate streaming service for those.

It’s similar for NFL, and I assume NHL and NBA, too. I’d pay to watch the stuff I watch if it were possible, but it’s not!

[0] https://www.mlb.com/live-stream-games/subscribe/giants

reply
Sport streaming is the one where I don't feel bad about using unofficial services, they are reasonably priced, I can watch the broadcast of the country that I prefer (Sky UK over the German coverage for example) and I can use an app like https://www.uhfapp.com which is more polished and works better than all the official streaming apps combined.
reply
deleted
reply
NHL is similarly frustrating. I pay for ESPN but some games are on TNT, NHL Network, or a broadcast channel. I'm not paying for two different $60 a month services so now they just don't get any of my money.
reply
I believe for $120 you can watch sold out home games. Or like you said "we can’t actually watch home games"
reply
for NFL it hugely depends on whether you want to follow the local team. So far, if you're in the local market the NFL generally shows the games on broadcast for free, and that you can get to with an antenna and a TV card depending on where you are.

MLB, I haven't tried for a few years but I could watch any out of market game on mlb.tv, but not any that involved the local team, so it was the opposite. For that there was a special regional sports channel that I'd have to subscribe to. No way to do it directly with the network, I'd have to get satellite or something.

reply
> for NFL it hugely depends on whether you want to follow the local team.

That's the situation for probably 95% of viewers, though. Others might want to watch games from where they grew up, but most people typically follow the local teams. We don't even have a great way to get an antenna feed into our TV, and that also means we have one way to watch everything except local games, and another, worse way to watch them (for example, by not having a way to pause them).

I get why the streaming apps don't show local games from their business POV, but as a potential subscriber, that's a them-problem, not a me-problem. There's no way I'm paying that much money without being able to watch the home games.

reply
Not sure which streaming apps you're referring to. If you only care about the local team, getting a TV streaming option like Youtube TV, sling or hulu tv should work. Probably some I'm not thinking of. As long as they get the main networks, that should cover it. Even when they do a Prime exclusive or MNF(espn) game, they'll show it on the local affiliate for local markets. At least that's the way it has always worked, NFL may change it in the future. The real pain is if you want to follow an out of market team. Just for starters you need NFL Sunday ticket which is not cheap these days.

If you're cool waiting a day to watch the games, nfl plus has everything with commercials cut.

reply
NFL is egregiously bad here. They split exclusives among multiple streaming services, so you need to subscribe to (IIRC) at least Netflix and Amazon Prime in addition to your TV service if you want to see everything.
reply
I think a few games are only on NFL Network (not always included in the base cable subscription) also. And you'll need Peacock if you don't have cable/antenna.
reply
This works with Jellyfin because it supports m3u:

https://jellyfin.org/docs/general/server/live-tv/setup-guide...

Channels DVR also supports m3u:

https://getchannels.com/docs/channels-dvr-server/how-to/cust...

The README mentions Plex and Emby, but those don't support m3u, so you need to use a proxy which makes an m3u source appear like a local tuner such as:

https://github.com/Threadfin/Threadfin

https://github.com/xteve-project/xTeVe

https://github.com/vorghahn/iptv4plex

reply
There is also threadfin, which I found a bit more friendly than XTeVe.

Above system works pretty well but had trouble with encode/decode speed somewhere. Tried with N100 cpu and still had the same result...probably user error somewhere but none of the options seemed to work. No issues with UHF so kept using that.

reply
Thanks, just added it.
reply
Very cool. I’ve used a paid service for years now that gets me all sorts of sports and channels very reliably, I would assume they’re doing something similar to make this work. Might try this though with my home server setup.

Think it could be ran from within a docker container so I could add it to an existing docker compose media server setup?

reply
any chance you'd be willing to share what the service is? I use streameast all the time but it's not reliable enough
reply
Not OP, but I have used iptvore[dot]net previously
reply
Sports should be free to watch, the product itself is covered in ads already
reply
Since this works on the raw data streams from the official distributor, this is legal, correct?
reply
I totally needed something like this. Looks very good.
reply
deleted
reply
[dead]
reply
It's a cool hack...but also a bit unethical as the reason they are free is that there's ads. I almost feel it's more ethical to sign up for a paid pirated IPTV service and then use that, with the benefit of that being more stable and probably with higher quality.
reply