Use Channels-DVR as a tuner for Emby

My setup consists of a dedicated Channels server and Shield devices at each entertainment center.

Outside, at the pool area, I use a super cheap Roku TV (wireless) to watch Emby (local channels only via the HDHomerun). While I'm not a fan of Roku devices, it was the only TV, when I purchased it, that was small and allowed me to move it from the closet to outdoor easily.

My imagination got the better of me and I ended up writing a python program that calls a Channels DVR endpoint that provides channel information for TVE. The program creates a m3u file based on this endpoint with all of the live stations that Channels is serving up.

In Emby, I setup a new "TV Source" and pointed to the m3u file. For guide data I'm using iptv-epg.com.

This configuration works great on the Roku using the Emby App. The only issue I'm having is accurate guide data. iptv-epg provides guide data to all of the channels BUT the whole timezone the TVE feed is based on is driving me insane which leaves me to believe I don't understand everything going on.

FX and FXP I configured by setting a time offset in the guide. But this doesn't appear to work for all channels. USA does not return guide data that is even close + or - n-timeshift with what is actually airing.

My question: is there a guide source I can use that is ready-made that matches the Channels DVR guide? If not, any suggestions on understanding where live tv feeds base their guide data. I can always exclude the problem channels, but want to seek help first. Thanks -- Mike

Channels' guide data is provided by Gracenote. Gracenote runs the Zap2It website, so the listings there will be the same as Channels'.

Also, you can get guide data from Schedules Direct (which also uses Gracenote's data) from the xmltv utilities, such as the tv_grab_zz_sdjson and tv_grab_zz_sdjson_sqlite, and then feed the resulting xmltv files to Emby.

Thanks @racameron. I was thinking about going in that direction. I wasn't sure if I would have the same issue. The only negative is I would have to transform the channel numbers to avoid mapping each channel in Emby. iptv-epg does this easily. But right now I have a lot of time on my hands. :wink:

FYI:

As far as guide data.. you could pull it from the DVR I guess, but it's in a json format that would need some massaging before it could be used with other software.

Thanks @tmm1 I tried the roku app prior, but buffering was an issue. I created the program (instead of the built-in generator) so I could transform channel numbers for easier mapping. If I go with Schedules Direct, I'll need to transform the numbers for automatic mapping in Emby.

1 Like

Posted here too soon. It's working. iptv-egp.com was having a back-end issue and my configuration took ~hour to apply. All guide data is now accurate. Thanks for the feedback tho.

Just added this to my Roku 3 and it still works! There is no guide, but “on now” will still pull the live channels. Looks like all of my recorded movies are there too. The TV recordings are limited to “up next”, no option for all recordings.

Never knew this existed, that’s pretty wild!

Has anyone used the the channels m3u for locast or sling TV, I tried adding a tuner to emby and it said the url was invalid http://x.x.x.x:8089/devices/TVE-Sling TV/channels.m3u and also http://x.x.x.x:8089/devices/TVE-Locast/channels.m3u only Philo worked

The Locast device name is LOCAST-### where "###" is your broadcast market. For example, the LA broadcast market is 803, so my Locast device in Channels is at the /devices/LOCAST-803/channels.m3u endpoint.

Worked Thanks

I started this thread and thought I would close out my part by posting what I found. This was my first attempt in creating m3u files and working with guide data, so this may be simple to you. I had a lot to learn. Seriously.

The idea seemed simple, use Emby to play live TV from Channels DVR on an old Roku TV that didn’t handle the beta Channels DVR App very well.

In the end I was able to accomplish exactly what I wanted with the added benefit of having all the channels in the order I wanted them (grouped by news, movies, locals, etc.).

I abandoned the iptv-epg service (service quality was the primary issue. I experienced, slow updates to my configuration and the quality of guide data was less than what Channels provides.

I read and tried a lot of tips from various internet sites related to Emby and proper m3u configurations. I found more out-of-date/inaccurate information than answers. I did figure out the key elements of the m3u setup that work with Emby per my implementation goals.

The m3u file needs to provide the exact call sign for a channel, otherwise Emby required lots of channel mapping. That’s a pain. To place the channels in the guide in the order I wanted, I found that using the channel-id tag allowed me to the order the channels in the Emby guide according to my preferences.

Here’s an example:

#EXTINF:-1 channel-id="10" tvg-logo="http://fanc.tmsimg.com/assets/s64241_ll_h3_aa.png" tvg-name="MSNBC",MNBCHD

The python code to generate this line:

m3u_file.write("#EXTINF:-1 channel-id=\"{0}\" tvg-logo=\"{1}\" tvg-name=\"{2}\",{3}{4}".format(emby_channel_order, channel_logo, sd_channel_name, sd_channel_callsign, "\r\n"))

I used the built-in Emby guide for tv/show listings, but I had to use several guide sources to get East vs Pacific channels to work without resorting to time-shifting the m3u per channel. I did not have to map any channels in the Emby guide setup, everything just worked. I simply added the m3u source and added the guides.

There may a more direct route to this end, but where I lacked any knowledge, I perhaps took the long route.

Brilliant workaround for most things!

Question for you, how exactly did you get the Pacific channels to lineup? I added my local Guide source (i.e. DISH Network) for all non-Pacific channels and then a second Guide Source using a California zip code and mapped ONLY the "P" channels and they aren't quite matching up right, they are essentially showing the exact same lineup, with no time offsets.

Your approach is the same as what I implemented in my setup. To get guide data for all of the channels, I have 4 different Emby Guide sources:

  1. Local for my area
  2. Direct TV New York - Satellite (zip: 10001)
  3. Charter Spectrum - Digital Compton (zip: 90001)
  4. Direct TV - Los Angeles - Satellite (zip: 90001)

I had to use that order to get everything to work.

You will need to normalize the channel names. For example, Channels reports FreeForm as FREEFORM and FREEFORMP. The channel names are FREFMHD and FREFRMP. Once i changed all of the channel names to match the standard name, everything just worked.

Posting part of my m3u file below. As this was my first attempt I can't tell you it is 100% right. It does work however.

Here's a partial of my m3u file:

#EXTM3U
#EXTINF:-1 channel-id="7" tvg-logo="https://tmsimg.fancybits.co/assets/s64241_ll_h3_aa.png" tvg-name="MNBCHD",MNBCHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6050/stream.mpg
#EXTINF:-1 channel-id="8" tvg-logo="https://tmsimg.fancybits.co/assets/s58646_ll_h3_ac.png" tvg-name="CNNHD",CNNHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6030/stream.mpg
#EXTINF:-1 channel-id="9" tvg-logo="https://tmsimg.fancybits.co/assets/s10146_ll_h3_ab.png" tvg-name="CNNI",CNNI
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6032/stream.mpg
#EXTINF:-1 channel-id="10" tvg-logo="https://tmsimg.fancybits.co/assets/s60179_ll_h3_ab.png" tvg-name="FNCHD",FNCHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6073/stream.mpg
#EXTINF:-1 channel-id="11" tvg-logo="https://tmsimg.fancybits.co/assets/s58718_ll_h3_ac.png" tvg-name="FBNHD",FBNHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6074/stream.mpg
#EXTINF:-1 channel-id="12" tvg-logo="https://tmsimg.fancybits.co/assets/s58780_ll_h3_aa.png" tvg-name="CNBCHD",CNBCHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6051/stream.mpg
#EXTINF:-1 channel-id="13" tvg-logo="https://tmsimg.fancybits.co/assets/s58574_ll_h3_aa.png" tvg-name="FXHD",FXHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6080/stream.mpg
#EXTINF:-1 channel-id="14" tvg-logo="https://tmsimg.fancybits.co/assets/s14988_ll_h3_aa.png" tvg-name="FXM",FXM
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6084/stream.mpg
#EXTINF:-1 channel-id="15" tvg-logo="https://tmsimg.fancybits.co/assets/s58574_ll_h3_aa.png" tvg-name="FXP",FXP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6081/stream.mpg
#EXTINF:-1 channel-id="16" tvg-logo="https://tmsimg.fancybits.co/assets/s66379_ll_h3_aa.png" tvg-name="FXXHD",FXXHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6082/stream.mpg
#EXTINF:-1 channel-id="17" tvg-logo="https://tmsimg.fancybits.co/assets/s66379_ll_h3_aa.png" tvg-name="FXXP",FXXP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6083/stream.mpg
#EXTINF:-1 channel-id="18" tvg-logo="https://tmsimg.fancybits.co/assets/s92008_ll_h3_aa.png" tvg-name="IFC",IFC
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6088/stream.mpg
#EXTINF:-1 channel-id="19" tvg-logo="https://tmsimg.fancybits.co/assets/s59337_ll_h3_ab.png" tvg-name="AMCHD",AMCHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6086/stream.mpg
#EXTINF:-1 channel-id="20" tvg-logo="https://tmsimg.fancybits.co/assets/s59186_ll_h3_ac.png" tvg-name="PARHD",PARHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6022/stream.mpg
#EXTINF:-1 channel-id="21" tvg-logo="https://tmsimg.fancybits.co/assets/s92041_ll_h3_aa.png" tvg-name="SUNDANP",SUNDANP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6085/stream.mpg
#EXTINF:-1 channel-id="22" tvg-logo="https://tmsimg.fancybits.co/assets/s66268_ll_h3_ab.png" tvg-name="HALLHD",HALLHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6090/stream.mpg
#EXTINF:-1 channel-id="23" tvg-logo="https://tmsimg.fancybits.co/assets/s60150_h3_aa.png" tvg-name="LIFEHD",LIFEHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6046/stream.mpg
#EXTINF:-1 channel-id="25" tvg-logo="https://tmsimg.fancybits.co/assets/s64492_ll_h3_aa.png" tvg-name="BBCAHD",BBCAHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6087/stream.mpg
#EXTINF:-1 channel-id="26" tvg-logo="https://tmsimg.fancybits.co/assets/s51529_h3_aa.png" tvg-name="AETVHD",AETVHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6043/stream.mpg
#EXTINF:-1 channel-id="27" tvg-logo="https://tmsimg.fancybits.co/assets/s58625_ll_h3_ab.png" tvg-name="BRAVOP",BRAVOP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6059/stream.mpg
#EXTINF:-1 channel-id="28" tvg-logo="https://tmsimg.fancybits.co/assets/s58623_ll_h3_ae.png" tvg-name="SYFYP",SYFYP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6055/stream.mpg
#EXTINF:-1 channel-id="29" tvg-logo="https://tmsimg.fancybits.co/assets/s57391_h3_aa.png" tvg-name="TLCHD",TLCHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6105/stream.mpg
#EXTINF:-1 channel-id="30" tvg-logo="https://tmsimg.fancybits.co/assets/s16123_ll_h3_aa.png" tvg-name="TVLAND",TVLAND
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6020/stream.mpg
#EXTINF:-1 channel-id="31" tvg-logo="https://tmsimg.fancybits.co/assets/s58452_h3_aa.png" tvg-name="USAP",USAP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6053/stream.mpg
#EXTINF:-1 channel-id="32" tvg-logo="https://tmsimg.fancybits.co/assets/s61812_ll_h3_aa.png" tvg-name="EP",EP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6057/stream.mpg
#EXTINF:-1 channel-id="33" tvg-logo="https://tmsimg.fancybits.co/assets/s59615_ll_h3_ad.png" tvg-name="FREFMHD",FREFMHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6126/stream.mpg
#EXTINF:-1 channel-id="34" tvg-logo="https://tmsimg.fancybits.co/assets/s59615_ll_h3_ad.png" tvg-name="FREFRMP",FREFRMP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6127/stream.mpg
#EXTINF:-1 channel-id="35" tvg-logo="https://tmsimg.fancybits.co/assets/s42642_ll_h3_ac.png" tvg-name="TNTHD",TNTHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6035/stream.mpg
#EXTINF:-1 channel-id="36" tvg-logo="https://tmsimg.fancybits.co/assets/s42642_h3_aa.png" tvg-name="TNTPHD",TNTPHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6036/stream.mpg
#EXTINF:-1 channel-id="37" tvg-logo="https://tmsimg.fancybits.co/assets/s58515_ll_h3_ac.png" tvg-name="TBSHD",TBSHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6033/stream.mpg
#EXTINF:-1 channel-id="38" tvg-logo="https://tmsimg.fancybits.co/assets/s58515_ll_h3_ac.png" tvg-name="TBSHDP",TBSHDP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6034/stream.mpg
#EXTINF:-1 channel-id="39" tvg-logo="https://tmsimg.fancybits.co/assets/s64490_ll_h3_ac.png" tvg-name="TRUTVHD",TRUTVHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6037/stream.mpg
#EXTINF:-1 channel-id="40" tvg-logo="https://tmsimg.fancybits.co/assets/s64490_ll_h3_ac.png" tvg-name="TRUTVP",TRUTVP
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6038/stream.mpg
#EXTINF:-1 channel-id="41" tvg-logo="https://tmsimg.fancybits.co/assets/s49788_h3_aa.png" tvg-name="HGTVD",HGTVD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6104/stream.mpg
#EXTINF:-1 channel-id="42" tvg-logo="https://tmsimg.fancybits.co/assets/s50747_ll_h3_ab.png" tvg-name="FOODHD",FOODHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6102/stream.mpg
#EXTINF:-1 channel-id="52" tvg-logo="https://tmsimg.fancybits.co/assets/s14771_ll_h3_ad.png" tvg-name="HISTORY",HISTORY
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6044/stream.mpg
#EXTINF:-1 channel-id="53" tvg-logo="https://tmsimg.fancybits.co/assets/s56905_ll_h3_ad.png" tvg-name="DSCHD",DSCHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6101/stream.mpg
#EXTINF:-1 channel-id="54" tvg-logo="https://tmsimg.fancybits.co/assets/s65342_ll_h3_ac.png" tvg-name="IDHD",IDHD
http://<CHANNELS IP ADDRESS>:8089/devices/ANY/channels/6107/stream.mpg