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

@turtletank I've been using ADBTuner for well over a year now and love it. Thank you for all of the time and effort that you've put into it.

I've been having a few issues since around the first of the year and have resolved all but one that I can't seem to narrow down.

What I see is that occasionally (3 out of 5 mornings) when I start the first stream of the day, or later in the day after a long idle time, ADBTuner presents the YoutubeTV main screen as opposed to the channel requested. I also get a 504 response back sometimes as well.

This behavior seems to have started around the end of last year or the beginning of this one. Around that same time I had other issues such as buffering and pixelating which I ultimately resolved by upgrading my network switch. At about that same time though I also went from the 1X branch of your code to the 2X branch, upgraded my URayEncoder to the latest firmware and of course keeping the Unifi stack up-to-date.

As I said above I've replaced my network switch which made a huge improvement on the other issues, upgraded the URayEncoder to latest firmware, current with ADBTuner, and also upgraded to the newest Onn 4K boxes. I have keep alive enabled on each tuner enabled as well.

Any idea of what may be causing the YouTubeTV main screen to appear rather than the channel? I've run the logs thru Claude and I don't really think it knows enough to understand what might be happening but it seems to feel that I need to raise the issue to you. I can provide logs from this morning if that helps.

If you can share some logs either here, or via PM, I’d be glad to take a look and see if we can figure out the issue.

So I just wanted to share, I've been dealing with some weird issues with my Osprey boxes for the past couple of weeks, and I finally found a different deep linking scheme that doesn't use https like we've all been using for ages with Osprey boxes. So far, and by so far, I mean I would have issues within five minutes exactly where my stream would restart, and I've been going steady for at least a half hour now without any issues. So it's still early, but a consistent five minutes versus a steady half hour, a couple of times actually, is not something I want to ignore. I've also tested both schemes back to back and have had a failure within five minutes and then a success for a half hour.

The scheme I'm testing now on my Ospreys is:

dtvnow://deeplink.directvnow.com/ott/tune/live/channel/CALLSIGN/RESOURCE_ID

Just so people don't have to dig, and I know there are a lot of Osprey users using ADBTuner, I figured I'd share this finding here just in case it becomes useful if other people start hitting weird issues with deep links. Since ADBTuner is completely reliant on deep links and ah4c can tune by channel numbers, I figured this is a good place to share this alternate scheme. :grin:

Edit: I'm pretty confident that this dtvnow:// scheme is the solution. So far using it, I have not had a single issue, whereas before I would have an issue within exactly five minutes to the clock. I'm still trying to figure out the why, but I have the what.

I've changed all my Osprey Deep Links to use your new format. So far, so good, will let you know.

1 Like

Let me know if you see any weirdness.
I'm still testing, but it's been stable.

What's annoying me is I can't figure out what broke. My best guess is something to do with the old scheme using https. I have a feeling some endpoint on DirecTV's end is either flaking out or being deprecated. I guess the regular app uses dtvnow://. So it would make sense that they would just maintain that scheme for everything internally rather than having an HTTPS scheme for their Gemini hardware, which also kind of makes sense because a new Gemini box is coming.

I also found another scheme that also fails it is https://stream.directv.com/ott/tune/live/channel/CALLSIGN/RESOURCE_ID

No problem. I added to the Osprey FAQ/WiKi - DirecTV Osprey/Gemini Boxes - #4 by spammedeeper

Thank you. I have a feeling it has something to do with the new Gemini boxes. I was looking and they cleared the FCC around early June.

I started having issues late June. So I'm wondering if maybe DirecTV is making backend changes. On one hand, this kind of bodes well for our boxes continuing to work. It just means we might have to adapt to whatever changes they make. Hopefully this is it.

I'm currently using a Link Pi encoder with (2) Chromecast with Google TVs. Ever since Android 14 and Google changing the ADP port, its been a struggle.

What are the go to devices people are using that have been rock solid? I primarily use it for Youtube TV tuning. Which cheap devices do people recommend? Any benefit using a Fire Stick vs say an Onn device?

I have seven FireStick 4K Max and Max Gen2 sticks running in multiple locations. They've worked great for going on three years.

FYI: There is a new version of the YouTube TV app for Android TV out in the wild (4.x.x).

It seems to be a major rewrite that replaces Google's Cobalt library with "Chrobalt." This seems to be more or less a full implementation of the Chromium browser engine (Blink) instead of the lightweight alternative it was before. The app package is significantly larger and the app consumes more RAM while running. This certainly doesn't benefit the end users with RAM and storage constrained devices. :frowning:

It seems to be a staggered release, I had to sideload it for testing on an Onn 4k Plus.

As far as ADBTuner is concerned, there is a bug in this version of the YTTV app that causes deep linked content loading to fail when the app has been sitting idle in the background for a while. The deep link opens the app, the content starts loading, and then the app forces a full reload.

I think it's basically doing the equivalent of opening a new browser tab and closing the old one. The deep link target gets lost in the process so the app just ends up sitting on the YouTube TV home screen. Since the video does actually start for a second ADBTuner detects that playback and considers it to be a successful tuning operation.

I'm looking into some options that would safely recover from this, or similar things in other apps. In the meantime, switching to a Compatibility Mode configuration in ADBTuner should keep things working with the 4.x.x app (with slower tuning times unfortunately).

Using the "Keep Device Awake" feature in ADBTuner with YTTV as the "Keep Alive Package Name," and "Keep In Foreground" enabled might sidestep the issue as well since the app could refresh itself while sitting idle. I haven't confirmed this is a fix yet though.

@bnhf I don't know if you have any hardcoded entry points for YTTV in your projects, but the entry point has changed from "MainActivity" to "ChrobaltMainActivity" in this version of the YTTV app.

@johnluber thank you for sharing your logs and other information.

2 Likes

Yeah they're all changing stuff I just have been dealing with all these DirecTV issues related to Deep linking.

They have this new process that I pulled from the decompiled APK for the Ospreys: FeatureFlags.ID.USE_YOURTV_FOR_STARTUP . It seems to cause some sort of race condition when you wake immediately tune and don't have some sort delay in between wake and tuning which does not affect ADBTuner because of the built-in delay but does affect ah4c which is why i committed a pr to fix it.

It seemed to get muddied in my testing because I ran into a bunch of other issues that seem to be account level for me. I don't think they're necessarily cracking down on Deep linking but it seems like they're just changing the way these clients work and making it harder for us.

And testing the DirecTV TV app with a non-Osprey client and adbtuner. I've always done am start -S to force a restart of the client. While that makes tunes a bit slower, that has always worked reliably every time because it is a fresh instance of the app.

1 Like

Thank God a good chunk of the channels I want have native apps so I could just use that instead but yeah...they keep moving the goalposts here. Vintage Google lol

Yeah, unfortunately these complexities often make projects like this unreasonable for anyone but enthusiasts. :frowning:

2 Likes

I think the saving grace is the fact that especially with Android, Google Assistant is used generally to tune channels.

We might have an angle with that as a mechanism.

1 Like

Philo on FireStick is no longer working with deeplinks. And to make it more fun, it looks like when ADBTuner tries to tune the station, it permanently breaks the app. If I uninstall Philo and reinstall it works when manually using the app. When I try to use ADBTuner, the app tries to launch, but only the logo shows with a spinning circle. The app never comes up. If I quit the app, reboot the firestick and try to launch Philo again, it just has the logo and spinning circle again.

Just confirmed that I can manually open and use the Philo app multiple times after reinstalling. As soon as I use ADBTuner, the app has to be uninstalled/reinstalled.

Not getting the "break" using my ONN, but it's not directly tuning channels anymore but just a general splash page (trying to tune Destination America):
image

Does anyone else have automatic app updates turned off? I just checked and there is a Feb. 2026 version of the YTTV app that I can update to (on my ONN devices) - I assume that is not the new problematic version, can anyone confirm?

It's possible that the scheme changed. This is something that just happens sometimes.

The easiest way to fix this is to use an AI agent like Claude Code Use JADX to decompile the APK and look at the manifest and see what the new scheme is.

I have some free time and I don't have a subscription but I'll try to find the scheme if that's helpful.

Okay, it appears that with Philo the channel IDs have changed. That's what I was able to determine. I don't have any way of extracting those, so someone with an account will have to figure that out.

I will see if I can get the new version of YTTV to load one one of my Onn Full HD Sticks, see how it works. Will keep you all posted.