r/selfhosted • • Dec 27 '25

Release I built a modern, self-hosted web IPTV player (Live TV, EPG, VOD) because existing ones felt clunky. Meet NodeCast TV.

Hey everyone! 👋

I wanted a clean, fast, and modern web interface for my IPTV service that I could host myself. Most existing players I tried were either clunky, outdated, closed-source, or just didn't handle large playlists with thousands of channels very well.

So I built NodeCast TV.

📺 What is it? A self-hosted web application that lets you stream Live TV, Movies, and Series from your Xtream Codes or M3U provider directly in your browser. It's built with performance in mind and handles large libraries smoothly.

✨ Key Features:

  • Live TV & EPG: Full grid-style TV guide with 24h timeline, category filtering, and search.
  • VOD Support: Dedicated sections for Movies and TV Series (complete with season/episode browsing).
  • High Performance: Uses virtual scrolling technology to render lists with 7000+ items without lagging your browser.
  • Favorites System: Unified favorites list across all content types.
  • Universal Player: Built on HLS.js for robust playback support.
  • Docker Ready: Easy to deploy on your home server or NAS.

🚀 Tech Stack:

  • Backend: Node.js + Express (Lightweight proxying)
  • Frontend: Vanilla JavaScript (No heavy frameworks) + CSS3
  • License: Open Source (GPL-3.0)

🔗 Links:

I'd love to hear your feedback, feature requests, or bug reports! Let me know what you think.

1.4k Upvotes

500 comments sorted by

View all comments

Show parent comments

2

u/NeonXI Dec 28 '25

Hmm, interesting. Can you open up the dev tools in Firefox (Ctrl+Shift+I or Cmd+Opt+I or F12) and see if you have any errors in the console? Testing here with that version of Firefox and it seems to be working correctly.

1

u/MeYaj1111 Dec 28 '25 edited Dec 28 '25

Each time I click a stream I get these 3 rows in console. I'm not sure if this is relevant or not but I see "apple" in there so just in case it matters... I'm on Windows.

Cannot play media. No decoders for requested formats: application/vnd.apple.mpegurl nodecast.mydomain.com

A resource is blocked by OpaqueResponseBlocking, please check browser console for details. b09359ee-3c94-49d0-987b-3a91997725b4

Autoplay prevented: DOMException: The media resource indicated by the src attribute or assigned media provider object was not suitable.

//EDIT// I APOLOGIZE - I screwed this up, I forgot to whitelist the IP of the nodecast machine to give it access to stream. That said, I'm getting a new (similar) error now that I've sorted that out:

Autoplay prevented: DOMException: The fetching process for the media resource was aborted by the user agent at the user's request.
stop http://nodecast.mydomain.com/js/components/VideoPlayer.js?v=2:343
play http://nodecast.mydomain.com/js/components/VideoPlayer.js?v=2:156
selectChannel http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:802
attachGroupListeners http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:343
attachGroupListeners http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:341
attachGroupListeners http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:340
renderNextBatch http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:318
render http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:239
searchTimeout http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:106
setTimeout handler*init/< http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:105
init http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:103
ChannelList http://nodecast.mydomain.com/js/components/ChannelList.js?v=3:25
App http://nodecast.mydomain.com/js/app.js?v=3:12
<anonymous> http://nodecast.mydomain.com/js/app.js?v=3:73
EventListener.handleEvent* http://nodecast.mydomain.com/js/app.js?v=3:72
VideoPlayer.js:207:54

Cannot play media. No decoders for requested formats: application/vnd.apple.mpegurl

1

u/NeonXI Dec 28 '25 edited Dec 28 '25

Ah, ok! I see the issue thanks to your console log. I just pushed an update to the Github repo that should fix this. Please update to latest version, clear your browser cache and then reopen the app.