FruitDeepLinks — Universal Sports Aggregator for Channels DVR

That very same event worked here:

And since you said the deeplink worked in a test channel, that suggests something may have gone adrift with your setup.

What are you seeing in the ADBTuner log when you attempt to tune to this channel? If you could post that section of the Portainer log, that could be helpful.

That link partially worked in cc4c. It opened up a page that I had to vnc into my server and click on "Watch Live".

It's the same in ADBTuner, I've just added a "post playback start" command to send the equivalent of a "Select" button on a remote control.

Like other site-specific stuff in cc4c, a Puppeteer automation will need to be added to select watching live when sending P+ deeplinks.

It works for me through doing the preview using the ADBTuner config page as well, but does not work when I actually try to tune the channel through CDVR. I see nothing in the ADBTuner logs when I try to tune the channel through CDVR. I also see nothing on the live logs on fruit dashboard. I tried to check for something strange in my setup of ADBTuner, did a complete manual delete of the source settings and all of the channels in ADBTuner for pplus, then did a reinstall through project one click, and same behavior as before.

How about in the CDVR logs, anything there that might help? I just tested with a FireStick client, instead of through the ADBTuner Preview -- and it worked there for me too:

CDVR logs:

2025/12/22 12:48:12.384551 [TNR] Opened connection to M3U-ADBTuner-Paramount+ for ch15026 Paramount+ 1

FruitDeepLinks:

[2025-12-22 19:48:14] [DEBUG] ADB deeplink lookup: provider=pplus, lane=1, event_id=appletv-umc.cse.447ftlcvft4ovobthz1zhcrsw, lookup_id=umc.cse.447ftlcvft4ovobthz1zhcrsw, uid_col=pvid

ADBTuner logs:

2025-12-22 19:48:13.356 - stream - [Tune (m296vsP23aoGAXHoHrULfG)] No active tuners found for Paramount+ 1. Reserving a new tuner.

2025-12-22 19:48:13.356 - tuner_management - [Tune m296vsP23aoGAXHoHrULfG] Attempting to reserve tuner for: ['com.cbs.ott', 'com.cbs.ott'].

2025-12-22 19:48:13.361 - tuner_management - [Tune m296vsP23aoGAXHoHrULfG] Available Tuners:

2025-12-22 19:48:13.361 - tuner_management - [Tune m296vsP23aoGAXHoHrULfG] Name: firestick-rack1 Priority: 1

2025-12-22 19:48:13.361 - tuner_management - [Tune m296vsP23aoGAXHoHrULfG] Name: firestick-rack2 Priority: 

2025-12-22 19:48:13.362 - tuner_management - [Tune m296vsP23aoGAXHoHrULfG] Using first available tuner (by priority).

2025-12-22 19:48:13.362 - tuner_management - [Tune m296vsP23aoGAXHoHrULfG] Reserved Tuner: Name: firestick-rack1 Priority: 1

2025-12-22 19:48:13.362 - stream - [Tune (m296vsP23aoGAXHoHrULfG)] Tuning to Paramount+ 1 on firestick-rack1

2025-12-22 19:48:13.362 - stream - [Tune (m296vsP23aoGAXHoHrULfG)] Using channel configuration: FruitDeepLinks - Paramount+ (62a01c95-94f8-41b7-b56b-4838859ab42d)

2025-12-22 19:48:13.362 - stream - [Tune m296vsP23aoGAXHoHrULfG] Redirecting to stream after 0.01 seconds (fixed delay of 0 seconds exceeded). Tuning is still in progress.

2025-12-22 19:48:13.362 - uvicorn.access - 100.111.146.77:0 - "GET /stream/696 HTTP/1.1" 307

2025/12/22 19:48:13 [PROXY] 100.111.146.77 -> GET "/proxy/3?requestKey=m296vsP23aoGAXHoHrULfG" -> "http://encoder_48007/0.ts"

2025-12-22 19:48:13.706 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - input keyevent KEYCODE_WAKEUP

2025-12-22 19:48:14.122 - server - 

--------------------------------------------------

Tuner "firestick-rack1" is currently in use and locked.


Tune ID: N/A

Channel: Paramount+ 1

Lock Obtained: 2025-12-22 19:48:13 (0.02 minutes ago)

Last Seen: N/A

Bytes Transferred: None

Remote User Agent:

N/A

--------------------------------------------------

2025-12-22 19:48:14.831 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - pidof com.cbs.ott

2025-12-22 19:48:14.972 - stream - [Tune (m296vsP23aoGAXHoHrULfG)] Resolving dynamic URL (http://htpc6:6655/api/adb/lanes/pplus/1/deeplink?format=json) for channel.

2025-12-22 19:48:14.996 - stream - [Tune (m296vsP23aoGAXHoHrULfG)] Retrieved dynamic URL data: {'channel_id': 'pplus01', 'channel_name': 'CBS Sports', 'deeplink': 'pplus://www.paramountplus.com/live-tv/stream/serie-a/e3336669-b4d0-4617-8968-dc8be9914937?searchReferral=appleatv&source=spotlight', 'deeplink_format': 'scheme', 'event_end_utc': '2025-12-22T23:35:00+00:00', 'event_start_utc': '2025-12-22T17:00:00+00:00', 'lane_number': 1, 'provider_code': 'pplus', 'start_utc': '2025-12-22T17:00:00+00:00', 'status': 'success', 'stop_utc': '2025-12-22T23:35:00+00:00', 'title': 'Italy Supercoppa Italiana: SSC Napoli vs. Bologna FC'}

2025-12-22 19:48:14.996 - stream - [Tune (m296vsP23aoGAXHoHrULfG)] Using pplus://www.paramountplus.com/live-tv/stream/serie-a/e3336669-b4d0-4617-8968-dc8be9914937?searchReferral=appleatv&source=spotlight to load channel.

2025-12-22 19:48:14.996 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - input keyevent KEYCODE_MEDIA_STOP

2025-12-22 19:48:15.906 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - am force-stop com.cbs.ott

2025-12-22 19:48:16.020 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - am start -W -a android.intent.action.VIEW -d 'pplus://www.paramountplus.com/live-tv/stream/serie-a/e3336669-b4d0-4617-8968-dc8be9914937?searchReferral=appleatv&source=spotlight' 'com.cbs.ott'

2025-12-22 19:48:17.948 - stream - [Tune m296vsP23aoGAXHoHrULfG] Waiting 3 seconds to allow sleeping device to setup.

2025-12-22 19:48:20.948 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - sleep 8

2025-12-22 19:48:20.948 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: Sleeping for 8.0 seconds.

2025-12-22 19:48:28.948 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - input keyevent KEYCODE_DPAD_CENTER

2025-12-22 19:48:29.927 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - sleep 8

2025-12-22 19:48:29.927 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: Sleeping for 8.0 seconds.

2025-12-22 19:48:37.927 - lib.adb - [Tune (m296vsP23aoGAXHoHrULfG)] ADB: firestick-rack1 - input keyevent KEYCODE_DPAD_CENTER

Also, here's what my CDVR Custom Channels setup looks like:

Interestingly, it worked for me while trying to tune through a web browser. Always when I tried through my TVs, no go. It like didn't tune, like aggressively fast as well. I am always trying to do this tuning through Apple TVs, when it doesn't work. Curious if the Apple stuff tagged onto the end of the deeplink is confusing CDVR. Only AndroidTV devices I have are for ADBTuner. Can go and try to install CDVR on one of them and see if behavior is different. Off to try now...

Did your CDVR server log anything in those failed attempts?

Not sure. Didn't look at that. When I tried to tune with my Google TV Streamer 4K (Android 14), I could see activity on fruit logs, and ADBTuner logs. Didn't tune successfully though. Dumped out very quickly again, didn't seem to give it a chance to tune. Also, I am on ADBTuner 2.0 stable build. Which one are you on? Developmental? Remind me how to look at CDVR logs?

Yes, I'm on the developmental build.

Support - Logs in the CDVR WebUI.

1 Like

Okay, a bit of tinkering attempts at trying to fix the problem on my part was the problem for it not working on AndroidTV. Very recently changed the source settings to HLS from MPEG-TS. Saw that problem in CDVR logs. Fixed that and I can now tune it with my AndroidTV Google TV Streamer. Progress.

Still no go on the AppleTV. No activity on CDVR log when trying with AppleTV either. Can maybe try switching to ADBTuner developmental, running out of time to try playing with this soon today though.

If your AppleTV client isn't even hitting the server, you should force close the Channels app and/or reboot the ATV.

Tried that, both force close, and reboot on two different TVs, and switched to the development build of ADBTuner. Still no go. Odd.

Success! I made my own source settings setup for the Paramount+ channels, and it was able to work on my Apple TV and all. Don't know that there were anything wrong with the way that project one click autogenerated ones were setup, but suspect that maybe things just somehow got corrupted in my CDVR under that particular name. I have been hammering my CDVR server with changes recently, playing around with all of these things to get these fruit channels tested. Probably the universe telling me I need to take a holiday break on all of this as well.

But in summation, can confirm that Paramount+ channels seem to work using Google TV Streamer 4K (Android14) as well. Thanks @bnhf for all of the troubleshooting help.

Love the updated CC integration multisource lanes.

But I'm not getting the overnight database refresh running the container in a windows docker. Installed the container using Olivetin one-click with time zone set to America/New_York. The web FDL Admin page shows autorefresh box checked and a 0230 time, but the refresh didn't run.

ESPN4CC4C never automatically updated for me either, but the web admin refresh was so fast I just manually refreshed...

Is the container updating for others using windows docker? Any suggestions for troubleshooting?

It's working here. Shows the refresh in the admin page and in the container log.

Definitely something funny on my end with the auto refresh:

  • I don't see the refresh entry in the webpage admin log
  • In the container log I get an error message, copied several lines prior to the scheduled update time at 0230 and after the error

127.0.0.1 - - [23/Dec/2025 02:13:46] "GET /health HTTP/1.1" 200 -

172.27.0.1 - - [23/Dec/2025 02:40:19] "GET /out/multisource_lanes.xml HTTP/1.1" 200 -

127.0.0.1 - - [23/Dec/2025 03:14:25] "GET /health HTTP/1.1" 200 -

Run time of job "schedule_auto_refresh_from_settings.. (trigger: cron[hour='2', minute='30'], next run at: 2025-12-23 02:30:00 EST)" was missed by 0:50:42.375685

172.27.0.1 - - [23/Dec/2025 03:40:50] "GET /out/multisource_lanes.xml HTTP/1.1" 200 -

Still haven't got auto refresh working but sharing some more troubleshooting.
I reset the autorun refresh time to 11:45 am and restarted the container at 11:30 am

The container log gives an error
Run time of job "schedule_auto_refresh_from_settings.. (trigger: cron[hour='11', minute='45'], next run at: 2025-12-23 11:45:00 EST)" was missed by 0:00:02.397156

The admin webpage logs don't show the refresh trying to run at 11:45am
[2025-12-23 11:34:07] [INFO] FruitDeepLinks server starting...

[2025-12-23 11:34:07] [INFO] Server running on http://0.0.0.0:6655

[2025-12-23 11:34:07] [INFO] Admin dashboard: http://0.0.0.0:6655/

[2025-12-23 11:34:07] [INFO] CDVR Detector: Disabled (set CDVR_DVR_PATH in .env to enable)

[2025-12-23 11:34:07] [INFO] APScheduler scheduler started

[2025-12-23 11:34:07] [INFO] Auto-refresh scheduled daily at 11:45 (scheduler local TZ)

no entry at 11:45

Do you have any other cron jobs scheduled or still running? Is the cron scheduler running at all?

@KineticMan, I believe you have a provider name mislabeled. I believe the gametime:// is the NBA app. You have it labeled as Prime Video TNF. Would be nice to get the NBA app going here too.

Also, future feature request: could you add tags of "Live" and "New" to the metadata of all these events? Would help with sorting them in CDVR. Regular CDVR guide seems to do that for all of its live sports event scheduling.

1 Like

I am running multiple containers within Windows Docker. Suspect they all use Cron or APScheduler to refresh their databases. Tubi-for-channels, samsung-tvplus-for-channels, espn4cc4c, ESPN_Plus, portainer, olivetin, and fruitdeeplinks. Running this on a win 11 BeeLink mini PC Ryzen 7. It was NOT powerful enough to containerize CC4C, CC works running in windows using node with an older version of chrome. Otherwise I've never seen significant CPU or memory usage, but certainly could be the issue root cause...

I did a little googling on the error message. Most discussions in the programing forums with this error message were around setting a "misfire_grace_time" setting with APScheduler. The default is 1 second, and mine for whatever reason has been running more than a second late so NOT executing (2 seconds late in once instance and 50 seconds late in another log entry). I wonder whether misfire_grace_time is using the default 1 second for espn4cc4c and fruitdeeplinks as these are the only two containers that aren't updating guide data on a schedule?

1 Like