Frndly TV for Channels

@matthuisman

Is it safe to assume that if someone is running the app via Python that when the container version is updated that the person using Python should pull the latest version of the app as well ?

correct, also the python version now uses proper named arguments which are the same names as the docker environment variables.

eg.
python app.py --PORT 8183 --USERNAME "[email protected]" --PASSWORD "mypassword" --IP "72.229.28.185"

I'm using this app as a "template" of sorts.
Get it right once, and then can start producing a bunch of others all with the same features etc.

Thank you again for this quick fix.
This is really a great addition to Channels and it is saving money on my Frndly TV subscription. So thanks a lot! My donation to you was well worth it. :slight_smile:

Nice! I've updated my container.

Thank you so much for all of your efforts. They are sincerely appreciated!

Thanks Matt.
Woke up this morning and tuned to a channel with no 500 errors. Good Job. Now if someone can figure out how to get a xmltv for the two channels Dove and Curiosity From Frndly's guide would make this a perfect fit for this addition to our Channels DVR.

ok, you should now be able to get a basic EPG (just title of program) for the channels that don't get it from Gracenote.

You need to do

  1. Update to latest container
  2. Change your current playlist url to: http://..../playlist.m3u?gracenote=include
    (this playlist will now only contain channels that have gracenote ids)
  3. ADD a new playlist
  4. Set its url to http://..../playlist.m3u?gracenote=exclude
    (this playlist will contain only channels that dont have a gracenote id)
  5. Add EPG for this playlist: http://..../epg.xml?gracenote=exclude
    (this epg will only contain epg data for channels that don't have gracenote id)

And that should do it

Hopefully in the future Channels will allow using both Gracenote IDs and an EPG together.
When that happens - the above 2nd playlist wouldn't be needed anymore

4 Likes

Thank you sir. It works perfectly. Happy Turkey Day. :turkey:

I just set this up today. I am getting an error that shows:
Could not parse playlist http://192.168.1.152:8183/play/history.m3u8: Can't detect playlist type

Would anyone be able to help me? Thanks

I it appears that Frndly has made some changes. Several Channels have the same error. It appears that the links are not m3u8 url's

Yes, for me A&E, History, Lifetime, and FYI are not working.

argh, looks like FrndlyTv is switching some channels over to MPD with DRM which Channels / ffmpeg don't support.

The latest container will now show an error for streams that are not supported.
You could use /playlist.m3u8?exclude=frndly-31,frndly-33 etc to remove them from playlist

i could make a Kodi FrndlyTv add-on that can support Widevine DRM, but that obviously doesn't help the Channels users much

1 Like

I wonder if there is any hope that Frndly won't do this to all the channels they carry. This ChannelsDVR "add-on" to get Frndly is pretty much the only reason why I got Frndly. Glad I didn't go for the annual subscription. Is there any hope of getting around this set back.

In the USA, at least, it is illegal to circumvent DRM.
Since Channels is and wants to remain 100% legal, they will never even remotely consider trying to get around DRM. I support this.

Sadly, once DRM is used by providers, it simply won't work in Channels.

Let's enjoy whatever is left while we can. :laughing:

To clarify I didn't mean to suggest circumventing the DRM. I agree everything should of course be legal. I meant is there a way to legally authenticate the DRM using our proper Frndly credentials like we do with the other channels Frndly offers. Or is this basically a "you use our app or nothing at all" type of thing even though we are paying for access to the stream?

1 Like

Authenticating (signing in) is totally different than DRM.
You need a client that supports their DRM method.
It's like the PBS stations that added DRM to their stream. The web player and apps can handle the DRM, but Channels cannot.

Got it. Sorry for the misunderstanding. :blush:

Today I looked at Frndly. I get reconnecting... and Hallmark and all other Frndly channels are not working.

Anything else change or are they all gone now?

All but 4 of them are still working. A&E, History, Lifetime and FYI are not working because those channels are now DRM'd, Channels can't stream DRM'd content.

Sorry. I just updated Docker. Removed and reinstalled FRNDLY TV FOR CHANNELS, and it seems to be working again.

Thanks Matt.

1 Like

I can't seem to get this to work this week. I've removed and reinstalled my docker image multiple times. log says that it's invalid PW but I've verified with the website and haven't changed it.
logs....

ErrorWarningSystemArrayLogin


Starting server on port 80
logging in....
xxxxxxxxxx - - [18/Dec/2021 00:31:25] "GET /playlist.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('xxxxxxxx', 62890)
Traceback (most recent call last):
File "/usr/local/lib/python3.8/socketserver.py", line 683, in process_request_thread
self.finish_request(request, client_address)
File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "./app.py", line 22, in __init__
super().__init__(*args, **kwargs)
File "/usr/local/lib/python3.8/socketserver.py", line 747, in __init__
self.handle()
File "/usr/local/lib/python3.8/http/server.py", line 427, in handle
self.handle_one_request()
File "/usr/local/lib/python3.8/http/server.py", line 415, in handle_one_request
method()
File "./app.py", line 51, in do_GET
self._error(e)
File "./app.py", line 49, in do_GET
routes[func]()
File "./app.py", line 62, in _playlist
channels = frndly.channels()
File "/usr/src/app/frndly.py", line 133, in channels
rows = self._request('https://frndlytv-api.revlet.net/service/api/v1/tvguide/channels?skip_tabs=0')['data']
File "/usr/src/app/frndly.py", line 106, in _request
self.login()
File "/usr/src/app/frndly.py", line 176, in login
raise Exception('Failed to login: {}'.format(data['error']['message']))

Exception: Failed to login: Invalid password.