A Samsung Smart TV app built with Tizen Studio that streams live IPTV channels from M3U/M3U8 playlists, navigable entirely with a TV remote.
- Multiple playlists, multiple active at once — add any number of M3U/M3U8 playlist URLs in Settings, and toggle each one active/inactive independently with a checkbox. Categories from different active playlists are kept visually separate (grouped under a header per playlist) rather than merged together.
- Built-in default playlist — ships with the IPTV-ORG country-indexed catalog bundled locally (
playlists/index.country.m3u), so channels are available even when the device has no route to an external host. A one-tap "+ Add IPTV-ORG Open Channels" button in Settings adds the live version of the same catalog fetched fromiptv-org.github.io. - Categories & channel browsing — channels are grouped by
group-titleinto an alphabetical, two-column category list, then into a channel grid per category. - Favorites — star any channel while watching it. Favorites persist independently of which playlists are active, but are only shown while their source playlist is active (deactivating a playlist hides its favorites without deleting them; deleting the playlist removes them for good).
- Remote-control navigation — a custom focus-zone system drives all navigation via D-pad (arrow keys + Enter/OK) and the remote's Back key; no mouse/pointer required. Includes Channel Up/Down zapping and Play/Pause from the remote.
- HLS playback via hls.js, with automatic recovery from non-fatal network/media errors.
- Support / Donate screen — a QR code and link to a Stripe payment link for optional tips. The amount is donor-adjustable (starts at $1, no maximum).
- Tizen Studio (or just the Tizen CLI tools under
tools/ide/binandtools/) with thetv-samsungplatform installed. - A Samsung TV or the Tizen TV emulator/simulator running Tizen 2.3+.
- A signing security profile registered with the Tizen CLI (
tizen security-profiles list/tizen security-profiles add) to package and install the app.
config.xml Tizen widget manifest (app id, privileges, profile)
index.html App shell — all screens as <section> elements
css/style.css All styling (focus states, layout, screens)
js/main.js App logic: Focus/navigation, playlists, playback, favorites
playlists/ Bundled default M3U playlist (offline fallback)
images/ App art: donate banner, donate QR code, icons
icon.png App icon
noun-live-tv-3548799.png Widget icon referenced by config.xml
TVapp.wgt Pre-built, signed package ready to sideload
From the project root:
# 1. Compile the web content into .buildResult/
tizen build-web -- .
# 2. Package .buildResult/ into a signed .wgt
tizen package -t wgt -s <your-security-profile> -- .buildResultThis produces .buildResult/TVapp.wgt.
# Connect to the TV/emulator (skip if already connected)
sdb connect <tv-ip-address>
# Install
tizen install -n TVapp.wgt -t <device-id> -- .buildResultAlternatively, sideload the pre-built TVapp.wgt in this repo directly without building anything yourself.
Only the app shell and the bundled default playlist are guaranteed to work fully offline. Any playlist fetched from an external URL (including the IPTV-ORG "open channels" quick-add) requires network access from the TV/emulator; loads that hang are aborted after 15 seconds with an error toast rather than blocking the UI indefinitely.
The app includes an in-app Donate screen (Stripe-hosted, adjustable amount) for anyone who'd like to support development.