Skip to main content

Overview

Dispatcharr integrates with Emby and Jellyfin using HDHomeRun emulation, allowing these media servers to discover Dispatcharr as a live TV tuner device. This enables:
  • Live TV viewing in Emby/Jellyfin
  • DVR recording capabilities
  • IPTV stream access through native interfaces
  • Electronic program guide (EPG) integration
Both Emby and Jellyfin support HDHomeRun devices natively, making integration with Dispatcharr seamless.

How It Works

Dispatcharr emulates an HDHomeRun network tuner by providing compatible API endpoints:
  • Device Discovery: Returns device information and capabilities
  • Channel Lineup: Lists available channels with stream URLs
  • EPG Data: Provides XMLTV-formatted program guide
  • Stream URLs: Proxies IPTV streams through Dispatcharr
Emby and Jellyfin communicate with these endpoints to provide live TV functionality.

Setup Instructions for Jellyfin

1

Access Live TV Settings

In Jellyfin:
  1. Navigate to DashboardLive TV
  2. Click Add to add a new tuner device
2

Select Tuner Type

  1. Choose Other or HDHomeRun as the tuner type
  2. Enter the device URL:
    http://YOUR_SERVER_IP:9191/hdhr
    
  3. Click Save
Replace YOUR_SERVER_IP with your Dispatcharr server IP. For Docker setups, use container names if on the same network.
3

Configure Channel Lineup

Jellyfin will fetch channels from Dispatcharr:
  1. Review the detected channels
  2. Select channels to enable
  3. Click Save
4

Add EPG Source

Configure the electronic program guide:
  1. Go to DashboardLive TVGuide Data Providers
  2. Click Add
  3. Select XMLTV as the guide provider
  4. Enter the EPG URL:
    http://YOUR_SERVER_IP:9191/epg
    
  5. Click Save
5

Map Channels to EPG

  1. Go to Live TVChannels
  2. Click on each channel to map it to EPG data
  3. Save your mappings
6

Verify Setup

  1. Navigate to Live TV in Jellyfin’s main interface
  2. You should see your channels from Dispatcharr
  3. Click a channel to test streaming
  4. Open the guide to verify EPG data is displaying

Setup Instructions for Emby

1

Access Live TV Settings

In Emby:
  1. Go to SettingsLive TV
  2. Click Add under TV Sources
2

Select HDHomeRun Device

  1. Choose HDHomeRun as the tuner type
  2. Enter the tuner URL:
    http://YOUR_SERVER_IP:9191/hdhr
    
  3. Click Save
3

Import Channels

  1. Emby will discover channels from Dispatcharr
  2. Review and enable desired channels
  3. Configure channel numbers if needed
  4. Click Save
4

Configure Guide Provider

  1. Go to SettingsLive TVGuide
  2. Select XMLTV as the guide provider
  3. Enter the EPG path:
    http://YOUR_SERVER_IP:9191/epg
    
  4. Set refresh interval (recommended: 4-6 hours)
  5. Click Save
5

Map Channels to Guide Data

  1. Go to Live TVChannels
  2. Map each channel to its corresponding guide data
  3. Save your configuration
6

Test Live TV

  1. Navigate to Live TV in Emby
  2. Verify channels are visible
  3. Test stream playback
  4. Check the TV guide for program information

Using Channel Profiles

Create different HDHomeRun devices for different channel lineups using Dispatcharr’s Channel Profiles:
Device URL: http://YOUR_SERVER_IP:9191/hdhr
Lineup URL: http://YOUR_SERVER_IP:9191/hdhr/lineup.json
EPG URL: http://YOUR_SERVER_IP:9191/epg
This allows you to:
  • Create separate tuners for different content categories
  • Manage multiple Emby/Jellyfin servers with different channel lineups
  • Provide different content to different users

HDHomeRun API Endpoints

Dispatcharr provides these HDHomeRun-compatible endpoints:

Discovery Endpoint

URL: /hdhr/discover.json or /hdhr/{profile}/discover.json Response Example:
{
  "FriendlyName": "Dispatcharr HDHomeRun",
  "ModelNumber": "HDTC-2US",
  "FirmwareName": "hdhomerun3_atsc",
  "FirmwareVersion": "20200101",
  "DeviceID": "12345678",
  "DeviceAuth": "test_auth_token",
  "BaseURL": "http://YOUR_SERVER_IP:9191/hdhr",
  "LineupURL": "http://YOUR_SERVER_IP:9191/hdhr/lineup.json",
  "TunerCount": 10
}

Lineup Endpoint

URL: /hdhr/lineup.json or /hdhr/{profile}/lineup.json Response Example:
[
  {
    "GuideNumber": "1",
    "GuideName": "NBC HD",
    "URL": "http://YOUR_SERVER_IP:9191/proxy/ts/stream/nbc-uuid-here",
    "Guide_ID": "1",
    "Station": "1"
  },
  {
    "GuideNumber": "2.1",
    "GuideName": "FOX HD",
    "URL": "http://YOUR_SERVER_IP:9191/proxy/ts/stream/fox-uuid-here",
    "Guide_ID": "2.1",
    "Station": "2.1"
  }
]

Lineup Status Endpoint

URL: /hdhr/lineup_status.json Response Example:
{
  "ScanInProgress": 0,
  "ScanPossible": 0,
  "Source": "Cable",
  "SourceList": ["Cable"]
}

Device XML Endpoint

URL: /hdhr/device.xml Response Example:
<?xml version="1.0" encoding="utf-8"?>
<root>
    <DeviceID>12345678</DeviceID>
    <FriendlyName>Dispatcharr HDHomeRun</FriendlyName>
    <ModelNumber>HDTC-2US</ModelNumber>
    <FirmwareName>hdhomerun3_atsc</FirmwareName>
    <FirmwareVersion>20200101</FirmwareVersion>
    <DeviceAuth>test_auth_token</DeviceAuth>
    <BaseURL>http://YOUR_SERVER_IP:9191/hdhr</BaseURL>
    <LineupURL>http://YOUR_SERVER_IP:9191/hdhr/lineup.json</LineupURL>
</root>

Stream Endpoint

URL: /proxy/ts/stream/{channel_uuid} This endpoint proxies the actual IPTV stream. The channel_uuid is provided in the lineup response.

Docker Network Configuration

services:
  dispatcharr:
    image: ghcr.io/dispatcharr/dispatcharr:latest
    container_name: dispatcharr
    networks:
      - media
    ports:
      - "9191:9191"

  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    networks:
      - media
    ports:
      - "8096:8096"

networks:
  media:
    driver: bridge
Use container names in URLs:
  • Device URL: http://dispatcharr:9191/hdhr
  • EPG URL: http://dispatcharr:9191/epg

Host Network Mode

services:
  dispatcharr:
    image: ghcr.io/dispatcharr/dispatcharr:latest
    network_mode: host
Use localhost or host IP:
  • Device URL: http://localhost:9191/hdhr
  • EPG URL: http://localhost:9191/epg

Bridge Network with Port Mapping

services:
  dispatcharr:
    image: ghcr.io/dispatcharr/dispatcharr:latest
    ports:
      - "9191:9191"
Use host machine IP:
  • Device URL: http://HOST_IP:9191/hdhr
  • EPG URL: http://HOST_IP:9191/epg

DVR Recording

Both Emby and Jellyfin support DVR recording from HDHomeRun devices:

Jellyfin DVR Setup

  1. Go to DashboardLive TVDVR
  2. Enable DVR functionality
  3. Configure recording path
  4. Set post-processing options
  5. Navigate to Live TV guide
  6. Click on a program and select Record

Emby DVR Setup

  1. Go to SettingsLive TVDVR
  2. Enable DVR
  3. Configure storage location
  4. Set quality and post-processing options
  5. Use the TV guide to schedule recordings
DVR recording quality depends on source stream stability. Configure failover streams in Dispatcharr for better reliability.

Troubleshooting

Emby/Jellyfin Can’t Detect Device

1

Verify Network Connectivity

Test the discovery endpoint:
curl http://YOUR_SERVER_IP:9191/hdhr/discover.json
Should return JSON with device information.
2

Check Firewall Rules

Ensure port 9191 is accessible:
# UFW (Ubuntu/Debian)
sudo ufw allow 9191/tcp

# firewalld (RHEL/CentOS)
sudo firewall-cmd --add-port=9191/tcp --permanent
sudo firewall-cmd --reload
3

Verify Docker Network

If using Docker, ensure containers can communicate:
docker exec jellyfin ping dispatcharr
docker exec jellyfin curl http://dispatcharr:9191/hdhr/discover.json

Channels Missing or Not Loading

  • Verify channels are enabled in Dispatcharr
  • Check that channel numbers are assigned
  • Refresh channel lineup in Emby/Jellyfin
  • Check Dispatcharr logs for errors

Streams Won’t Play

  1. Test stream directly in VLC:
    http://YOUR_SERVER_IP:9191/proxy/ts/stream/CHANNEL_UUID
    
  2. Check Dispatcharr stream logs: Look for connection errors or source failures
  3. Verify stream profile configuration: Ensure output format is compatible with Emby/Jellyfin
  4. Test original source: Verify the upstream IPTV source is working

EPG Data Not Showing

  • Verify EPG sources are configured in Dispatcharr
  • Test EPG URL in browser:
    http://YOUR_SERVER_IP:9191/epg
    
  • Check EPG mapping for channels
  • Manually refresh guide data in Emby/Jellyfin
  • Verify EPG refresh interval settings

Recordings Fail

  • Check available disk space
  • Verify recording path permissions
  • Ensure stream is stable (use failover in Dispatcharr)
  • Check Emby/Jellyfin logs for recording errors
  • Test stream playback before recording

Performance Optimization

Transcoding Settings

For optimal performance, configure stream profiles in Dispatcharr to:
  • Use H.264 video codec (widely compatible)
  • Use AAC or MP3 audio codec
  • Set appropriate bitrate for your network
  • Enable hardware acceleration if available

Jellyfin Playback Settings

  1. DashboardPlaybackTranscoding
  2. Enable hardware acceleration (if supported)
  3. Set transcoding thread count
  4. Configure H.264 presets

Emby Playback Settings

  1. SettingsTranscoding
  2. Enable hardware acceleration
  3. Set maximum transcoding streams
  4. Configure codec preferences

Advanced Configuration

Multiple Tuner Instances

Create multiple virtual tuners with different profiles:
# Sports Tuner
http://YOUR_IP:9191/hdhr/sports/discover.json

# News Tuner
http://YOUR_IP:9191/hdhr/news/discover.json

# Entertainment Tuner
http://YOUR_IP:9191/hdhr/entertainment/discover.json
Add each as a separate tuner device in Emby/Jellyfin.

Custom Tuner Count

Dispatcharr reports tuner count based on your configuration. This represents how many concurrent streams can be active. Adjust this in Dispatcharr settings to match your stream limits.

User-Specific Channel Lineups

Combine Dispatcharr’s user authentication with channel profiles to provide different content to different users. Configure separate tuners per user profile.

Feature Comparison

FeatureJellyfinEmby
HDHomeRun Support✅ Native✅ Native
XMLTV EPG✅ Yes✅ Yes
DVR Recording✅ Free✅ Premium*
Hardware Transcoding✅ Free✅ Premium*
Live TV Guide✅ Yes✅ Yes
Multi-Tuner Support✅ Yes✅ Yes
Stream Transcoding✅ Yes✅ Yes
*Emby Premiere subscription required for some features.