FruitDeepLinks — Universal Sports Aggregator for Channels DVR

NBA on Peacock App - ? Best Deeplink choice

Apparently Peacock offers 2 feeds for most of their NBA broadcasts:

  1. “Performance View” w/ stats overlays and other screen clutter and
  2. “Standard” which is the traditional broadcast often in HDR w/ Dolby sound.

The performance view is typically what opens when I select the game from the guide. I can then switch within the app to the other feed but would like to see that open by default. Thoughts?

1 Like

I have a free add supported version of Hulu that I get from my phone provider, not the live TV. I have found that if I subscribe to the $30 version of the ESPN app which hosts the linear channels too, then those ESPN channels will show up on my Hulu app. I was then able to use the normal Hulu deeplink method to create full time linear channels for the linear ESPNs.

If someone could figure out a static deeplink channel method that would work with the ESPN app directly, that would work as well.

1 Like

Hi @KineticMan , just wanted to let you know I have been seeing a lot of ESPN plus NHL games also landing on my Amazon Exclusives channels. Not sure how you are filtering all that, but if I go to the now playing part of the dashboard, I can sort by Amazon Exclusives and see a lot of NHL events that show as having playables by Amazon Exclusive and also ESPN plus. No biggie, I know that the ESPN plus lane is the right one to use, just putting it on your radar.

I have seen this as well sometimes. Makes me feel like I am playing NBA Jam back in the day.

2 Likes

Just so I can debug this better-- are you saying some NHL games are showing a playable for both Amazon and ESPN+? I see the same (looking at Minnesota Wild at Colorado Avalanche right now). The game is both airing on ESPN+ and Amazon Prime. are you saying the playables are leaking through to the wrong lane?

Correct. I see ESPN+ games showing up on my Amazon Exclusive lanes. Is Amazon getting ready to start trying to get people to subscribe to ESPN+ through Amazon? Maybe, they try to do about everything else. When I click on all of the 4-5 games showing they all say unavailable to me through the Prime app.

I know that Prime has NBA exclusive games, but I know of no such deal with the NHL.

On second thought this could be that Amazon is now hosting some RSNs. Not any of the ones in my area, so maybe that is why they are unavailable. So maybe this is legit. Would need someone who gets their RSNs through Amazon to chime in.

Anyone getting Bally Sports/Fanduel through Amazon?

I just did a channel number range adjustment to my season pass to fix the problem on my end.

1 Like

Maybe I shouldn’t have used the wording “Amazon Exclusive.” My intention was if a playable is Amazon, the scraper then goes to Amazon and checks what sub-service Amazon is reselling. If it determines it’s Amazon only (not like NBA League Pass), I called it “Amazon Exclusive.” Not necessarily that event is exclusive to Amazon, but that it’s not a sub-service of Amazon.

Could that be the confusion? Or is it truly a bug where those events playables are leaking through to other playables? Such as, if I intended to watch a NBA game on Amazon, it selected a playable for ESPN+.

I’m in Ohio and Amazon resells Bally Sports Ohio and they air the Cavs games.

I agree with your definition of Amazon Exclusive, an event that is strictly a Prime broadcast. Like NFL Thursday night football, and the handful of NBA games each week. I don’t think the NHL has any Prime exclusive games, at least not in the US.

This to me as well. But we are all just thankful visitors to your rodeo. You do you. Seems like these RSN could be separated out into another sub-filter, if it was up to me, which it is not. I’ve said it before, but thanks again for all of this.

no problem. I'm guessing there is other RSNs out there, but i'm a bit limited as to geo-location on my Amazon might not show those other RSNs.

I do have the scraper exporting a debug log for Amazon that I was using during dev to discover the services- if anyone wants to send me their CSV file, I can take a look and see if its catching other RSNs!

It's saved under the /data folder. As example below:

"C:\Projects\FruitDeepLinks\data\amazon_scrape_20260218_115538.csv"

I realize this strictly isn't a FruitDeepLinks question but since there's probably a lot of ESPN+ users here I'll ask here first. If there's a better thread for this, please let me know.

Nearly all of my recent ESPN+ streams error out eventually. This happens with both CC4C (I haven't tried PrismCast yet) and running on FireTV/GoogleTV boxes. Sometimes it might take an hour or two but it almost always happens lately. Is anyone else experiencing this?

Hi @nateg Wondering what your M3U looks like for the HULU Deeplinks of the ESPN linear channels? I'm running AH4C and the Hulu M3U wasn't loading Hulu, it just opens the FireTv homepage and not the Hulu App.

Or if you could point in the direction of where Hulu Deeplinks M3U's are documented?

Thanks!

That probably has more to do with the Hulu ah4c scripts, as those date back a couple of years, and I've never tested them. We should move this discussion to the ah4c thread, and you should post the logs from a failed tune.

2 Likes

There is good description of it in the main ADBTuner channel. Search there. Methods to discover your deeplinks for Hulu, YoutubeTV, Sling TV, possibly others, all there.

1 Like

Thank you @bnhf @nateg I'll do some more testing and move this convo to AH4C if I have further issues :+1:

@KineticMan are you able to scrape for Amazon - Apple TV stuff. I just subbed to Apple+ via Prime so I wonder if the MLS and MLB stuff can be scrapped from there

For those of us who are using this tool for ADBTuner tuning, if you haven't discovered the most recent development version of ADBTuner, I highly recommend. The developer has expanded out the historical "who's watching?" capability, so that you now may put in custom search terms beyond the native ones. This is very handy as a way to get past all of the "watch live" type splash screens that can be encountered by all of the live events across the various apps now supported by FDL. The short version of this is that you can add search terms such as "live" or "watch" and it will keep periodically pushing the DPAD_CENTER button until it detects that you are all the way to live video. It is really nice doing things this way, for me, because you can fold back in some of the native detect live video tools that are built into ADBTuner, and everything doesn't have to be so timing based as the custom configs first being used here with FDL. Some of these timings were set quite long because how quickly an app can open can vary quite a bit. Plus this approach hides more of the sausage being made, which I prefer as well.

I started using this development version, and was making a bunch of different configs, discovering the right search terms per app, and eventually found that a couple of key search terms covered a lot of different apps. So I consolidated them, and they have been working quite successfully for a while now for me, so I thought I would share to save others the trouble.

There are two main configs I made. A standard one that would support many apps, and then a compatibility one. A decent amount of the apps supported here don't close properly, so I had to make a compatibility version, so apps would be forced closed, similar to the compatibility version in ADBTuner. Between these two, I was able to make them work with a lot of different apps supported with FDL.

There were two apps that still couldn't be supported with these, as they didn't consistently, go to the live version of the event when tuning through FDL, the ESPN app, and the NBA app. Some configs for ESPN have been shared previously in this thread, but for me I prefer mine, because it is leveraging some of the video detection aspects of ADBTuner, doesn't seem to be so timing based, and less sausage-makey. The NBA one was tricky to always get to live, as the app wants to throw a lot of different looks where buttons can be found on the screen, etc. But eventually I think I have discovered the proper sorcery of button pushes to consistently get you to live.

I will share all four of these below. I currently use FDL Standard for HBO Max. I use FDL Compatibility for Prime Video, Peacock, and Paramount+. I use FDL ESPN Specific for ESPN, and FDL NBA Specific for NBA of course. The "Specific" ones still potentially have a little bit of timing basis to them, as there is a lot of button pushing required, and I tuned them for my personal use on one specific type of hardware, so it is possible you may have to stretch out some of the initial timings if your hardware is different then mine. I don't like to wait forever, so I tried to time them decent for my stuff, so YMMV there. Enjoy!

    "name": "FDL Standard",
    "author": "nateg",
    "version": "1.0",
    "description": "FruitDeepLinks standard config with tuning to the Live feed.",
    "uuid": "38a8a0df-23b2-41cc-88a5-35ee114eb76b",
    "global_options": {
        "wait_for_video_playback_detection": true,
        "use_fixed_delay": false,
        "fixed_delay_seconds": 0,
        "wait_after_post_playback_start_commands_seconds": 0
    },
    "pre_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP"
    ],
    "tune_commands": [
        "am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
    ],
    "tune_match_text_commands": [
        {
            "match_text": [
                "who's watching",
                "choose an account",
                "edit profiles",
                "watch",
                "live"
            ],
            "commands": [
                "input keyevent KEYCODE_DPAD_CENTER"
            ],
            "start_checking_after_seconds": 5
        }
    ],
    "post_playback_start_commands": [],
    "post_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP",
        "input keyevent KEYCODE_MEDIA_PAUSE"
    ],
    "timed_keep_active_commands": []
}
{
    "name": "FDL Compatibility",
    "author": "nateg",
    "version": "1.0",
    "description": "FruitDeepLinks compatibility config with tuning to the live feed.",
    "uuid": "40c81359-f241-4c63-af69-bbd76208b065",
    "global_options": {
        "wait_for_video_playback_detection": true,
        "use_fixed_delay": false,
        "fixed_delay_seconds": 0,
        "wait_after_post_playback_start_commands_seconds": 0
    },
    "pre_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP",
        "am force-stop '||TARGET_PACKAGE_NAME||'",
        "sleep 1"
    ],
    "tune_commands": [
        "am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
    ],
    "tune_match_text_commands": [
        {
            "match_text": [
                "who's watching",
                "choose an account",
                "edit profiles",
                "watch",
                "live"
            ],
            "commands": [
                "input keyevent KEYCODE_DPAD_CENTER"
            ],
            "start_checking_after_seconds": 5
        }
    ],
    "post_playback_start_commands": [],
    "post_tune_commands": [
        "am force-stop '||TARGET_PACKAGE_NAME||'",
        "input keyevent KEYCODE_HOME"
    ]
}
{
    "name": "FDL ESPN Specific",
    "author": "nateg",
    "version": "1.0",
    "description": "ESPN for FruitDeepLinks with tuning to live feed.",
    "uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac",
    "global_options": {
        "wait_for_video_playback_detection": true,
        "use_fixed_delay": false,
        "fixed_delay_seconds": 0,
        "wait_after_post_playback_start_commands_seconds": 0
    },
    "pre_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP"
    ],
    "tune_commands": [
        "am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
    ],
    "post_playback_start_commands": [
        "sleep 10",
        "input keyevent KEYCODE_DPAD_DOWN",
        "sleep 1",
        "input keyevent KEYCODE_DPAD_DOWN",
        "input keyevent KEYCODE_DPAD_RIGHT",
        "input keyevent KEYCODE_DPAD_CENTER"
    ],
    "post_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP",
        "input keyevent KEYCODE_MEDIA_PAUSE",
        "input keyevent KEYCODE_HOME"
    ]
}
{
    "name": "FDL NBA Specific",
    "author": "nateg",
    "version": "1.0",
    "description": "NBA for FruitDeepLinks with tuning to live feed.",
    "uuid": "599c8090-0e83-4a75-9c8b-69494d1a2d75",
    "global_options": {
        "wait_for_video_playback_detection": true,
        "use_fixed_delay": true,
        "fixed_delay_seconds": 9,
        "wait_after_post_playback_start_commands_seconds": 0
    },
    "pre_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP",
        "am force-stop '||TARGET_PACKAGE_NAME||'",
        "sleep 1"
    ],
    "tune_commands": [
        "am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
    ],
    "post_playback_start_commands": [
        "input keyevent KEYCODE_DPAD_CENTER",
        "sleep 13",
        "input keyevent KEYCODE_DPAD_DOWN",
        "sleep 1",
        "input keyevent KEYCODE_DPAD_LEFT",
        "input keyevent KEYCODE_DPAD_LEFT",
        "input keyevent KEYCODE_DPAD_LEFT",
        "sleep 1",
        "input keyevent KEYCODE_DPAD_LEFT",
        "input keyevent KEYCODE_DPAD_LEFT",
        "input keyevent KEYCODE_DPAD_LEFT",
        "sleep 2”,
        "input keyevent KEYCODE_DPAD_DOWN",
        "input keyevent KEYCODE_DPAD_CENTER"
    ],
    "post_tune_commands": [
        "am force-stop '||TARGET_PACKAGE_NAME||'",
        "input keyevent KEYCODE_HOME"
    ]
}
4 Likes

N00b questions/issues:

Despite suggestions that I use Project One-Click (which I'm resisting because I want to understand how it's all supposed to work before I take the easy way out), I've manually used Portainer to build the stack per the instructions in the READ.ME on the repo.

[NOTE: the URLs to put in the Custom Channel in Channels DVR are of the form: http://your-server-ip:6655/direct.m3u . This URL is missing an "/out" on both of them. I mention this for doc update. In fact, you might wish to suggest copy/paste from the Output Files tile of the Dashboard ]

It's up, and running. I created both Sources in Channels DVR. It's showing events in Channels Guide for both sources (though the channel titles are blowing through the size of the box allocated for that in the guide for the direct sourced channels).

In the web interface, I click on a showing and the event window pops up. I click "Watch now" and I get this flashing up 3 or 4 times, and then giving up

. This happens whether using the direct stream or the multisource_lanes stream.

I do have an ADBTuner container up and spinning. I have set up a tuner on it. However, I've set up no channels on it, nor done anything to tell it about Channels DVR or vice versa.

I'm thinking there's some glue missing somewhere in here between Channels, FruitDeepLinks and ADBTuner that I'm sure P1C would have just handled, but I wouldn't understand it and couldn't troubleshoot future issues. So, bear with me... what mistakes do you see for me to clean up?

Thanks!

UPDATE: I went to a TV with a Chromecast and selected a game from the direct list, and it loaded ESPN and the event at the beginning. I then tried the multisource and got "You don't have an app that can do this."

Though you have a number of issues, this one is probably because of a completely unrelated issue:

This is not actually true, using the Project One-Click approach will help you understand how all the pieces go together. Part of the reason for creating it, is so that each person does not need to be walked through the process, but rather can use an automated tool to see how it's done.

Here are the basics:

What Project One-Click would do for you, is to create x number of ADBTuner virtual channels for each app you want to use (ESPN, Amazon, NFL, NBA, etc). The URL used for each provider's virtual channels would use a structure that's designed to query FDL to get the actual URL for whatever event is currenlty playing in that lane.

Your CDVR Custom Channels Source (again something Project One-Click would do), would use ADBTuner as the M3U provider and FDL as the EPG provider:

This process has to be repeated for each app ADBTuner needs to use. X number of virtual channels created, and a CDVR Custom Channels Source that corresponds:

It's not unusual for the ADBTuner virtual channels to need ADBTuner custom tuning configurations for a given app. Project One-Click also takes care of this for you, offering certain ADBTuner Custom Configs:

When you're all done, you'll end up with multiple new CDVR Sources (which you can combine in a Channel Collection if you like), each tied to a specific app supported through ADBTuner:

You might consider thinking of the Project One-Click approach as being not unlike watching a YouTube video, or reading a step-by-step. In this case you'll gain that same knowledge, but end up with a functional setup at the end.

EDIT: Probably also worth mentioning the Project One-Click Action is design to be able to be run on as needed basis. So if you need to increase or remove the number of lanes (aka virtual channels) for a given app, or change the ADBTuner Custom Config for a given subset of virtual channels, this is done for you through the Action (as opposed to editing each channel manually -- with the inherent chance for human error involved).