Project: antenna live TV in Jellyfin using Tvheadend, M3U and XMLTV (no plugin)

Discuss IPTV, Including how to watch, and how to broadcast
Post Reply
User avatar
ZerOne
Site Admin
Posts: 216
Joined: Sun Dec 13, 2020 8:21 am

Goal

Get free-to-air TV from an antenna and USB DVB-T tuner into Jellyfin, with a guide, using Tvheadend as the backend. This follows the "Integrating TVHeadend without a plugin" section of the Jellyfin Live TV setup guide. That guide says this method needs more CPU and that the Jellyfin Tvheadend plugin is recommended; the no-plugin route is meant as a backup if the plugin doesn't work. I have not built this exact setup, so go step by step. Background concepts are in the M3U/XMLTV basics thread I posted in this forum.

You need: a Linux box or similar with a supported DVB-T tuner and antenna, Tvheadend installed, and Jellyfin running on your LAN.

Step 1: Get channels into Tvheadend
  1. Install Tvheadend and open its web interface (check the Tvheadend docs for the port on your install).
  2. Add your tuner under Configuration > DVB Inputs and set up a network of the right type for your tuner (DVB-T for Australian free-to-air).
  3. Choose a pre-defined mux list for your area. Tvheadend's scan files come from the dtv-scan-tables repository; see also the scan file docs. Confirm the Australian files cover your region.
  4. Let it scan, then map services to channels. Check a channel plays using the built-in web player or VLC.
Step 2: Create a limited user for streaming

Create a dedicated Tvheadend user for Jellyfin with only streaming permission, not an admin account. The Tvheadend URL docs describe the playlist and stream endpoints and the authentication choices: HTTP auth (the default), a temporary ticket valid for 5 minutes, or a permanent auth code enabled in the password table. Because Jellyfin needs a stable URL, the practical choice is HTTP auth or a permanent code for this limited user. Keep it on your LAN only.

Step 3: Add the tuner in Jellyfin
  1. In Jellyfin go to the Admin dashboard > Live TV > Tuner Devices and add an M3U Tuner.
  2. Use this URL form (from the Jellyfin guide), replacing your server and port:

    Code: Select all

    http://your.tvheadend.server:port/playlist/channels.m3u
  3. Save. If your Tvheadend requires authentication, you will need to supply credentials in a form that Tvheadend accepts. Check its docs and test the URL in a browser or with curl first.
Step 4: Add the guide
  1. Admin dashboard > Live TV > TV Guide Data Providers > add XMLTV.
  2. Use the URL form from the Jellyfin guide:

    Code: Select all

    http://your.tvheadend.server:port/xmltv/channels
  3. Save and wait for the guide to refresh. If channels lack a guide, use the Map Channels screen in Jellyfin to link them manually.
Jellyfin lets you use either Schedules Direct or XMLTV, not both, so choose XMLTV here. Tvheadend can build its guide from over-the-air data, which is what feeds the XMLTV endpoint.

Step 5: Tune it
  • If the CPU is struggling on playback, that is expected with this route (the Jellyfin docs warn about it). Try the Tvheadend plugin.
  • Set a simultaneous stream limit on the M3U tuner if your hardware is modest.
  • Test on the Live TV page, then the guide, then a recording.
Troubleshooting
  • Playlist loads, no channels play: test the stream URL directly in VLC and check the user's permissions.
  • No guide: let Tvheadend run for a while to collect the over-the-air guide, then refresh in Jellyfin.
  • Wrong times: check the server time zone on both machines.
Keep it safe
  • Use a limited Tvheadend user, not admin.
  • Don't expose Tvheadend or Jellyfin directly to the internet.
  • Playlist URLs with passwords in them are secrets, so don't paste them into posts.
  • Only use content you are entitled to watch and record.
Discussion: Are you running the Tvheadend plugin or the no-plugin route, and how does your server cope with transcoding?
Post Reply

Return to “IPTV Discussion”