Shortly after updating tvhProxy, an effort on the tvheadend side was made to include HDHomeRun emulation in TVHeadend itself. I was hoping this would eventually obsolete the need for tvhProxy.

Unfortunately that pull request had a few major issues and was never merged. One of it’s biggest issue was that it implemented its own authentication bypass to get around the issue that HDHomerun clients like Plex don’t have any type of authentication when connecting to the tuner.

Tvheadend already has it’s own way of managing access controls without any explicit authentication (relying on the IP of clients), but unfortunately the PR was never adjusted accordingly.1

As I dusted off my IPTV setup recently (dockerizing Tvheadend as well as the tv7 EPG Parser), I thought it was a good time to retire tvhProxy for good.

So undertook an attempt to cleanup the previously rejected pull request an fix the major issues:

hdhomerun: Add HDHomeRun server emulation support for LiveTV only

Changes compared to the previous pull request included the two points that prevented it from being merged:

  • I removed all code related to the authentication bypass
  • harmonized the comment format.

My original fork of tvhProxy included a few additional fixes:

  • Adding SSDP discovery to avoid the tuner from being dropped in Plex
  • Filling in dummy EPG data for channels without EPG.

I retested this and it turns out that Plex doesn’t need either anymore - I guess they fixed it on their side in the past few years. So the simple integration is enough.

TvHeadend Permissions Setup

To setup the correct access, I have added a user with the following configuration - check out the Tvheadend wiki for more details on how to configure access controls.

IP Based Access Controls in tvheadend

Dockerized Setup

If you use dockerized tvheadend and want to test this, I forked the linuxserver.io container to redirect to my branch. Currently I’m using the following docker-compose.yml to test this for a few days:

version: "2.1"
services:
  tvheadend:
    # image: lscr.io/linuxserver/tvheadend:latest
    build:
      context: https://github.com/chkuendig/docker-tvheadend.git
      args:
        - TVHEADEND_COMMIT=81981d6b95c5103a959d7b03719b04ecf3876162
    container_name: tvheadend
    environment:
      - PUID=1000
      - PGID=1000
      - RUN_OPTS= #optional
    volumes:
      - <...>hts/.hts/tvheadend:/config
      - <...>hts/recordings:/recordings
    network_mode: host
    restart: unless-stopped

You can use this with docker-compose build tvheadend instead of docker-compose pull tvheadend and it should work just as well as the regular container.


  1. You can read the whole discussion at . ↩︎