Frndly TV for Channels

The variable for IP address is only for the Local Now feed as far as I know. The Frndly MeTV feed is the same feed for all Frndly customers. Your local OTA MeTV may be different than Frndly.

The call letters you see in Manage Lineup are basically the call letters of a station whose schedule matches Frndly. The stream itself probably doesn’t originate from that station.

1 Like

For my Synology setup I used a scheduled task, set to only once no repeating, with a user defined script.

Control Planel > Task Scheduler > Create > Scheduled task > User-defined Script

User Defined Script:

docker pull matthuisman/frndlytv-for-channels
docker run -d --restart unless-stopped --env "IP=XXX.XXX.XXX.XXX" --env "[email protected]" --env "PASSWORD=xxxxxxxx" --name frndlytv-for-channels -p 8183:80 matthuisman/frndlytv-for-channels

Then run the task. For all future updating I added the following to beginning of the user defined script:

docker stop frndlytv-for-channels
docker rm frndlytv-for-channels

I am curious how you did your install as I am new to Synology and barely understand Docker myself.

1 Like

@Absenm Your method of using a one-time task is the preferred way as it mirrors the developer's setup instructions. The one thing I wasn't sure was how I would update the docker if my frndlytv password changed. I assume one would have to delete the container and set it up again. Here is what I did to set it up (albeit in A LOT more steps).

  • Log into your Synology web interface and launch the Docker app from the Package Center (this assumes Docker is already installed. If not, that would be the first step).

  • Click on Registry on the left and type "frndly" in the search box in the upper right.

  • Click on "Frndly TV for Channels" in the search results and click Download to download the image.

  • Click on Image on the left to see the images you have downloaded.

  • Click on frndlytv-for-channels image in the list and click "Launch" in the top row.

  • In the Network window, leave the default settings selected and click "Next".

  • In the General Settings window, click the box next to "Enable auto-restart".

  • In the General Settings window, click on the "Advanced Settings" button in the lower-left which will open a new window.

  • In the Environment section, you will need to add at least two variables for your frndlytv credentials. Click "Add" to get a new entry section and type "USERNAME" in the variable box and enter your registered email address in the value box. Click "Add" to get another entry section and type "PASSWORD" as the variable and your frndlytv password as the value. Additional variables can be added if you like (i.e. IP address, etc.). After adding the variables, click "Save" to close the window.

  • You will be returned to the General Settings window. Click "Next".

  • In the Port Settings window, click in the box labeled "Local Port" and type "8183". Leave other settings as-is and click "Next".

  • In the Volume Setting section, click "Next".

  • In the Summary section, confirm your selections, leave the box checked "Run this container after the wizard is finished" and click "Done".

  • After a few minutes, confirm you can access the Channels configuration via the status page at:

http://IP_ADDRESS_OF_SYNOLOGY:8183 (replacing IP_ADDRESS_OF_SYNOLOGY with the actual IP address of your Synology)

  • Follow the rest of the instructions at the developer's website to finish the setup:

Be sure to donate to the developer for the great work!

As for updating the container, I use another docker called watchtower that checks every 24 hours for any updates for your installed containers. If it finds a newer version, it will automatically stop the container, download the updated version and restart the container.

Again, this is way more involved that issuing a one line command, but I did it mainly so I could learn.

3 Likes

Wow. Your way is definitely involved. And it certainly is a way to do it. Actually it is the type of procedure I used to install two other docker containers when I first got my Synology. Then I said to myself, “There has to be an easier way to install docker containers”. That’s when I discovered the one-time task method. Now I install and update all my docker containers the task scheduler way. Your instructions are certainly an education on the Synology Docker GUI.

I have been looking in to Watchtower but haven’t tried working with it yet. Still in the reading up on it stage. For now the stop/remove lines added to the task scheduler defined-script do a good job. But that is an on-demand method that will stop and remove no matter if the container is actually updated. So Watchtower seems to be a nice automated way of updating that only does something if an update is actually found. And from what I read elsewhere, there seems to be a way to have watchtower only look at specific containers.

Like a dummy, I spent way too much time trying to figure out how to create a docker container right in the Docker program. I had no idea that the script should be created as a task using the Synology GUI as @Absenm did. I really wanted to follow @matthuisman 's instructions. But, I had a mental block against looking outside of Docker.

Instead, on my own, I stumbled onto the way @gilbreen did it through downloading an image using the Docker registry, and figured out how to out the User and Password in as described. To my surprise, it eventually worked.

Since then, I have been concerned that I may have done it wrong, as it wasn't the way described in Matt's instructions. Are there any shortcomings to grabbing the container image through the registry in Docker?

As long as you have all the variables set correctly you should be okay. Since the task scheduler way I mentioned is essentially a cut and paste of @matthuisman docker setup run command, it is far simpler and less likely to miss something. Plus it is saved in task scheduler for future use if needed. But the two methods or the ssh sudo docker CLI run command when done correctly will function exactly the same.

Basically, if you can reach the frndlytv-for-channels status page (docker_server_ip:8183) and it shows links pointing to address of the server the docker is running on then you did the docker setup correctly.

1 Like

@Absenm Thanks for sharing the ability to do all of this via the Task Scheduler. I would have never found it since it lives outside of the Docker app. I knew there had to be an easier way, but I also learned a bit more about Docker (perhaps more than I was planning to learn). Next time I need to create a docker container, I will definitely be using the Task Scheduler method.

1 Like

Thanks! I'll give the Task Scheduler method a try next time @matthuisman posts updates. Definitely sounds like it is a more simple way.

Since you already have it installed, you just need to to make sure you have the stop/remove commands in the defined script as such:

docker stop frndlytv-for-channels
docker rm frndlytv-for-channels
docker pull matthuisman/frndlytv-for-channels
docker run -d --restart unless-stopped --env "[email protected]" --env "PASSWORD=xxxxxxxx" --name frndlytv-for-channels -p 8183:80 matthuisman/frndlytv-for-channels

That will stop, remove, pull, setup the container, and restart it. [Only Include the Stop and Remove lines if you already have the docker container.]

Two additional variables that are not required but may be of interest are:

The --env "IP=xxx.xxx.xxx.xxx" is only if you want to change the geo-location that LocalNow uses. I do not believe it affects any other channels. It is by default the internet IP of your server.

The --env "KEEP_ALIVE=xxx" is mainly useful for people experiencing timeouts or problems with recordings not starting due to timeouts. Some systems can't login to Frndly fast enough before Channels times out. The keep alive will check every xxx minutes to make sure the token has not expired (thus no need to login). If it has expired it will re-login to get a fresh token. Every 5 hours it will re-login whether or not the token has expired. The default is 0 (off) as most users do not need keep alive because their systems connect fast enough for the regular "on-demand" tokens. (This is discussed about 100 posts up, lol).

1 Like

Thanks for the advice and tips, @Absenm !

I had Frndly TV for Channels working fine but got a new router today and now it is no longer working. I am guessing it is a firewall issue. My setup:

Channels DVR running on a Raspberry 4
Docker Desktop on Windows 10

As I said, I installed a new router today which I believe is the issue. A recording failed, then I was not able to play any friendly shows through channels dvr, so I removed the friendly source and tried to reinstall it. Now, when I try to add it back I get the following error message:

invalid source url: Get "http://192.168.1.6:8183/playlist.m3u8?gracenote=include": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

It appears docker is running: C:\Users\bpaul>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0763f5399779 matthuisman/frndlytv-for-channels "python -u ./app.py" 3 days ago Up 29 minutes 0.0.0.0:8183->80/tcp frndlytv-for-channels

Should the port say 0.0.0.0:8183->tcp like it is showing or should the 192.168.1.6 adderss docker desktop is running on be listed?

Any suggestions?

Does this link load?

What is the IP of your desktop?

Maybe you need to setup static dhcp reservation for the dvr on the new router

Thanks for the quick response! The IP for the desktop running docker desktop is 192.168.1.6. Yes, the link loads and provides:

Channels Source 1

Stream Format: HLS
Refresh: Daily
Source URL: http://192.168.1.6:8183/playlist.m3u8?gracenote=include
XMLTV Data URL: (Leave Blank)

Channels Source 2

Stream Format: HLS
Refresh: Daily
Source URL: http://192.168.1.6:8183/playlist.m3u8?gracenote=exclude
XMLTV Data URL: http://192.168.1.6:8183/epg.xml?gracenote=exclude

Blockquote Mark_Loves_KensleyDVR UserUpdate: I think my issue is I just installed a new Mikrotik router and I'm sure there is something I have to do to make the Channels DVR server see my Docker container. Both are in the same network but live on different machines. I am learning very quickly that the Mikrotik router is not very idiot friendly.

This is the issue I am having. Do you remember the fix?

UPDATE: OK, I GOT THIS WORKING. No more connection time out errors. Here is the fix:

In Windows Defender Firewall, under "inbound rules", you need to set port 8183 and Docker Desktop Backend to "allow connections".

1 Like

Been trying for hours to get this working in Channels. Got the Docker up and running no problem but cannot get it to load into channels. I put in this http://192.168.50.172:8183/playlist.m3u8?gracenote=include and I get this error message

invalid source url: parse " http://192.168.50.172:8183/playlist.m3u8?gracenote=include": first path segment in URL cannot contain colon

Where are you putting it?

You have an extra space at the beginning of the url. Right in front of the http.

edit: maybe the devs can add something to weed out / trim white space from urls.

1 Like

Under Custom Channels, Sourse, URL

Corrected that and now get this error

invalid source url: failed to retrieve m3u: 500 Internal Server Error

When you view the Frndly docker for Channels webpage at http://192.168.50.172:8183
Does it look like this?

Channels Source 1

Stream Format: HLS
Refresh: Daily
Source URL: http://192.168.50.172:8183/playlist.m3u8?gracenote=include
XMLTV Data URL: (Leave Blank)

Channels Source 2

Stream Format: HLS
Refresh: Daily
Source URL: http://192.168.50.172:8183/playlist.m3u8?gracenote=exclude
XMLTV Data URL: http://192.168.50.172:8183/epg.xml?gracenote=exclude

If it does, you should inspect the Frndly docker container log for errors