SageTV Community  

Go Back   SageTV Community > General Discussion > General Discussion


General Discussion General discussion about SageTV and related companies, products, and technologies.

Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
Old 03-14-2021, 05:10 PM
jpwegas jpwegas is offline
Sage Expert
Join Date: May 2007
Posts: 500
PlutoTV with OpenDCT and fHDHR

I was playing around with PlutoTV this weekend and was able to get it working in Sage using OpenDCT and fHDHR.

PlutoTV is a free IPTV service owned by ViacomCBS. It is ad supported so there is currently no subscription fee. Mostly they run old shows so if you want a 24/7 MacGyver channel or a classic 80s movie channel this is a nice service.

fHDHR is a project to make various video sources appear as an HDHR or other "devices". In most cases, this means it's pulling from an m3u IPTV stream, but it depends on the exact origin/source.

fHDHR has a "core" and plugins. Plugins can be sources (called "origins") like PlutoTV or "interfaces" like HDHR, which "look" like an HDHR device to other services like Sage or Plex or Emby.

What I did (brief summary):
I set up the fHDHR "core" ( and the PlutoTV plugin ( There are basic instructions on github which basically involve doing a git clone and then installing some Python dependencies. (Python3 is required.)

My final fHDHR config file is pretty basic:


address =
port = 5004

username = REDACTED
password = REDACTED
The "main" section will be automatically created the first time you run it and a random value is created for the uuid. I added the other sections later. There is a web page that it presents at port 5004 and you can see how things are set up.

On the web page you might notice that by default it creates 4 tuners for PlutoTV, although you can override this in the configs. I did not test how many streams PlutoTV allows simultaneously.

Then in OpenDCT, I followed the normal instructions for creating a Generic HTTP Capture device which is basically:
1. Stop OpenDCT
2. Add the new device to the 'generic.http.device_names_csv' list in the '' file. (I named mine "DCT-fHDHR PlutoTV-0").
3. Start OpenDCT so it creates a device entry.
4. Wait 20 seconds then stop OpenDCT
5. Edit '' and add the device to the '' list if you filter devices.
6. Add streaming_url for the new device: "http\://IP_ADDRESS\:5004/api/tuners?method\=stream&tuner\=0&channel\=%c%&origin\=plutotv&stream_method\=direct"
7. Start OpenDCT
8. Stop/Start SageTV (so it will pick up the new device)

You should now have a new source in SageTV. If you use Schedules Direct, there is a "Pluto TV" lineup you can use.

Issues I've noticed so far:

1. The SD "Pluto TV" lineup channel numbers don't always line up with the ones presented from fHDHR and the Pluto TV web page. I remapped (both physical and logical) the channels that I wanted so all the numbers match.
2. When OpenDCT stops using a stream, it takes 5-10 seconds for fHDHR to stop steaming. When switching from one PlutoTV channel to another, OpenDCT will try to connect again more quickly than that, and fHDHR will reject the request because the tuner is still "in use". I tried using the "stopping_executable" option to force a delay but that didn't seem to help. I have "fast_network_encoder_switch" set to false.

Some other notes:

1. There is a Locast "origin" so you should be able to use this same method for Locast. I have not tested this.
2. Because of the plugin architecture, it looks relatively easy to add new origins. This might be a way to get TV Everywhere into SageTV, but I did not have time to work on this but may in a few weeks.
3. For some origins (sources), fHDHR grabs and/or builds XMLTV data, but SageTV has no way by default to grab this from fHDHR, so in order to have EPG data you have to use a lineup that exists in Schedules Direct (PlutoTV has this), or possibly use the XMLTV plugin. I have not tried this either.
4. Originally I tried fHDHR set up with PlutoTV as a "source" and the HDHR "interface" plugin so OpenDCT would just magically see it as a new HDHR, but fHDHR's HDHR implementation isn't quite what OpenDCT and Sage expects (different APIs I believe) so they don't see these automatically like they do with real HDHR devices. fHDHR has streaming URLs that can be used even without the HDHR interface plugin, so that is what I used above. I removed the HDHR interface plugin as it wasn't needed.
5. If you want more than one PlutoTV tuner, just repeat the instructions above to add more to OpenDCT. Be sure to change the "tuner=0" to "tuner=1" or similar in the URL for each device.
6. fHDHR can have multiple origins/sources defined (like PlutoTV and Locast). If you add another origin plugin, you can add another device in OpenDCT, just change the 'origin' in the URL to match the "short" origin name.

So far it's working pretty well, although I have not done any long recordings. Hopefully ENE or someone else will have some thoughts on options for OpenDCT to wait longer between tunings of the same device.

Reply With Quote

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
OpenDCT for ARM is it possible? emveepee Hardware Support 7 11-26-2019 04:54 PM
OpenDCT and Tuning_Delay atchoo SageTV for unRAID/Docker 3 05-12-2018 10:50 AM
OpenDCT stopping.. jbuszkie SageTV for unRAID/Docker 1 07-27-2017 08:32 AM
OpenDCT and R5000 checkbin Hardware Support 9 12-29-2016 12:54 PM
OpenDCT: Can I use it? SDeGonge Hardware Support 7 02-20-2016 10:27 AM

All times are GMT -6. The time now is 11:10 PM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.