ADBTuner: A "channel tuning" application for networked Google TV / Android TV devices

As the Greybeard of Ospreys, figured I would chime in on a few things for anyone considering them.

Android TV (Android 11). They pretty much do all Android Apps. I actually had Channels DVR running on one to test as the remotes are so good. But yeah, they are relatively slow.

  • C71KW-200 (Osprey/Late 2018) - The original, made by Samsung. Oldest and slowest.
  • C71KW-400 SKU 60164 (Osprey/2019) - Made by Wistron NeWeb Corporation, updated version, 2GB RAM.
  • C71KW-400 SKU 60233 (Osprey/late 2019) - Made by Wistron NeWeb Corporation, updated version, 4GB RAM.
  • C71KW-400 (Gemini)* - The black sticker, DirecTV refresh (away for AT&T). AFAIK, same as the 60233, manufactured all the way through 2022 IIRC
  • Gemini Air - Dongle (Chromecast) style, can buy from DirecTV, super expensive but faster than Osprey.

Shaggylive is right on the money. I currently use a mixture of 60164 and 60233. The RAM difference is noticeable if you are using the box plugged into a TV. Apps load faster as well. Preferred, but for just tuning with deep link, there is not a huge difference. And as he stated, be careful of the Gemini Ospreys, as they can be flashed as Stream or Satellite.

Having the remote makes your life so much simplier, but it can be done without a remote. Since the Osprey has a full USB A port, you can hookup a keyboard. There is a way to bypass the "connect remote" screen, which I was able to do once as I was being lazy and didn't want to find another remote. Thinking back, the remote setup may eventually time out and let you continue with keyboard. All said, remote-less is an unpleasant setup.


Many options for Ospreys on eBay, my preferred place for eWaste purchase. Most Ospreys you get are going to be the 2GB/60164 version, which is fine. Last I purchased Ospreys it was from a vendor recommended on Reddit. I have no affiliation with this vendor, just a good shopping experience: Security Measure | eBay

1 Like

As a greybeard who doesn't understand half of how I keep all of this stuff running, I greatly appreciate your willingness to share your wisdom and experience. If it wasn't for the help of several knowledgeable and good natured folks on this forum, I'd be stuck in the stone age. Thank you so very much, everyone.

1 Like

Based on your experience would a single Osprey (setup for DTV use only) be better using AH4C or ADBTuner? Any appreciable differences in tuning speed between these 2 options?

Thanks for your help!

Both are great solutions for Ospreys. I started with Ospreys in late 2023. Since Osprey boxes have the unique feature of tuning by channel number, I adapted the AH4C project to do so in early January 2024. This ran like a champ as my primary setup until Summer 2025. Reliable tuning, I never messed with it, AH4C just works (and still does).

When the AH4C thread started mentioning deep links working on DirecTV app, I wondered if they would work on the Ospreys. The Osprey interface is basically the DirecTV App. After a bit of messing around, I found they do and the tuning was a bit faster than waiting on channels numbers to be entered via AH4C. But it was not perfect. I needed to work around ADBTuner not seeing Osprey system apps for targeting. This setup worked but it was not easy. That is, until just today.

As of the most recent dev build by @turtletank, no special work around is needed in ADBTuner. Standard setup, and a standard config (though I recommend custom config for more control). ADBTuner is currently my recommended setup for tuning DirecTV with Osprey boxes.

TLDR: As of the dev build 20251213-1, I would recommend ADBTuner for use with DirecTV and Osprey hardware. My testing since August has been reliable, and with the recent changes made to the dev version, setup is much simpler, and there is good development with @bnhf effort to support this type of setup. If you are concerned about deep links stopping on any Osprey you purchase, you can always move over to AH4C, which I ran for nearly two years without hiccup.

1 Like

I'd expand on this to say, anyone going this route, should be sure to use Project One-Click to create DTV channels in ADBTuner and CDVR.

The Action will grab the entire lineup your subscribed to, create the channel entries in ADBTuner with Gracenote Station IDs, add whatever Custom Tuning Config you'd like to use, and create the Custom Channels Source in CDVR.

I only subscribe to one genre pack and one addon, and this amounts to ~170 channels. If you have a more complete package this could be 300-400+ channels.

It only takes a couple of minutes to complete the process, and the Action can be run anytime you want to "synchronize" what's in your current DTV package with ADBTuner and CDVR or even to change the Custom Config you're using for all those channels (if it uses a different UUID identifier).

More details here:

2 Likes

Not sure if this is a bug, but I figured I'd mention it.
Every time I make a change to my channels, even a single channel, or export and import, my channel collection that I have set using the channels from ADB Tuner all get deleted.

It's only mildly annoying because it takes two minutes to set the channel collection back up, but I'm wondering if there's a bug that is causing perhaps a UUID to change.

For example, I'll take all the channels from a particular provider and put them into a channel collection. Then I'll add that to my guide. Any change made seems to make all of those channels disappear when the m3u reloads.

I realize I would not recommend using the standard config with the Osprey boxes.
It has media commands to stop and pause, etc.

If you do that and tune to the same channel, you may be behind live. I was initially doing a stop command in post tune. It was messing things up when I tuned back to the same channel on the same box. The best solution is to either do what you do, which is sleep the box and wake it. Or do what I do and just let them stream all the time if you don't care about bandwidth and have a need for speed, lol. :racing_car:

1 Like

Good catch. For reference, here is my tuning ADBT Config for tuning with Osprey after updating to Dev Version 20251213-1

{
    "name": "DTV: Osprey Deep Link (DODL)",
    "author": "spammedeeper",
    "version": "0.1",
    "description": "Deep Link Tuning with Osprey Hardware.  Wake, Tune, Sleep.",
    "uuid": "670c0f68-6c1f-4258-b3c3-0c67fd0ab316",
    "global_options": {
        "wait_for_video_playback_detection": true,
        "use_fixed_delay": false,
        "fixed_delay_seconds": 0,
        "check_for_and_clear_whos_watching_prompts": false
    },
    "pre_tune_commands": [
        "input keyevent 224"
    ],
    "tune_commands": [
        "am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
    ],
    "post_tune_commands": [
        "input keyevent 26"
    ]
}

Tuning Ospreys from sleep is for sure the slower way to tune, especially as Ospreys are not as "peppy" as modern hardware. But it is reliable. I get about 10-12 second tuning times with this setup.

I'm doing the exact same thing, but without the pre-tune commands and post-tune commands.
There's literally no way to stop streaming without sleeping them. But leaving them going uses a little bit of bandwidth. They don't get too warm for me at least. And I can tune in about six seconds. I like flipping around channels sometimes, so the fast tuning is worth it for me. But otherwise, your config is great for saving power and bandwidth on slower connections where that is really important.

I did some testing with leaving the Ospreys running back in my AH4C testing. Since this is Android 11, you can trigger the screen saver via ADB, keep the box awake. If you want to give it a go, change the post_tune command to be:

"post_tune_commands": [
        "am start -n 'com.android.systemui/.Somnambulator'"
    ]

This will trigger DayDream. You need to input a key command to exit screen saver, such as input keyevent KEYCODE_HOME in your pre tune setup.

Should stop the stream preview on the home screen. You could set the screen saver to display a static image for "no signal" or "waiting to tune". Not sure if this slows down the tuning speed of leaving Osprey at Home Page, but should be faster than a full wake.

I tested it and it's about the same as letting it sleep. It's a great thought though. Thank you.

Hopefully a quick ask for @turtletank

Can the requirement for a channel #, when adding one, be removed or optional? Most of my channels are imported via JSON without one, but would like to be able to add one manually without a channel number.

+1

I've tweaked the html manually in the past to allow this, but it would be nice not to have to remember. :slight_smile:

At the same time, it would be great if /api/v1/channels/ could accept channel numbers with decimal points because with DirecTV we have a lot of overflow channels that share the same channel number. At the same token it would be great if those decimal points could exceed 10 just in case there are a lot of overflows because currently they can only go up to 9. Additionally, it might be good if we could have letters in the channel numbers like A, B, C, D, etc. And make them a string value just to keep it simple.

How about emoji channel numbers? lol

For real though, from what I can tell you are asking for the ability the ability to do whatever you want with that field regardless of it might cause sorting issues, or issues with any apps that consume the m3u playlist. Is that correct?

Since this is mostly focused on Channels DVR, how does Channels handle missing or non-numeric channel numbers? What is the benefit of using 10.1 instead of incrementing the number to 11? Are you trying to match them to real world channel numbers? Does Channels group them in some way?

In my head, it's like cable tv where MTV could be like channel 512 for no specific reason and local channel 42 might be channel 9. Because it doesn't matter. It's just a number.

Admittedly, I have like 5 channels configured in ADBTuner so my experience with some of these things is pretty limited. Making that field an optional string could be a breaking change for some existing configurations and I want to make sure there is enough value to risk that.

Lol. I'll tune to channel :ok_hand::sunglasses::notes:! if we could just increment decimal points for overflow channels via the API that would be great. I contributed some code to @bnhf's project and the only way to get decimal points in was a post to /admin/channel and it couldn't go over 9. This is mainly RSN's causing these issues where they have a bunch of overflows for sporting events.

Ok, so how about a decimal that defaults to 0 if no value is provided when adding/editing the channel?
This way it stays numeric and the odds are very small that client apps will have a problem with it.

Is there a situation where we would want to exclude the field entirely in the generated playlist?

Edit: you don't actually want a decimal because 10.1 and 10.10 can't be the same? you are more looking for sub-channel number separated by a decimal point?

I think it's probably fair to say that DirecTV users, more than any other, are known for knowing their channel numbers -- and using them to tune. What's crazy in the DTV world, is that they had duplicate channel numbers -- first when when they transitioned from SD to HD and also for so called "overflow" or "alternate" channels.

I had DTV myself for about 15 years, so I can appreciate where this is coming from. With ah4c, I'd add an A, B, C, D etc. to the duplicate numbers, which CDVR handled fine. The idea of using subchannel numbers, like used in OTA TV seems good too. Either approach would be appreciated.

Since DTV is one of the supported providers in CDVR, having the channel numbers match their standard numbers, means guide data matches up great -- whether Gracenote IDs are present or not.

Great. Thank you for the insight. I guess DTV is also the only streaming provider that uses channel numbers?

From a usage standpoint, would it be too much of a pain if it was two separate fields? One for channel and one for sub-channel?

I'd say if it's not something that's easy to execute using the field you have now, l'd suggest leaving things as they are. As things stand, subchannels to .9 are accepted in ADBTuner -- and personally, I think that's sufficient.

Allowing empty channel numbers on manual entry I'd say is more important at this point, and of the two recent requests would be the one to implement.

For streaming services where channel number is not a thing, it's nice to be able to ignore that field (as can be done when importing JSONs or using the API), and use a channel number override in your CDVR Custom Channel Source.