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

Seems to me this was a bug that was introduced with the Android 14 update for Chromecast with Google TV instead of a "feature" that Google decided to change in Android 14. Unfortunately for Chromecast with Google TV users, Google has announced that the Android 14 update would be the last update for those obsoleted devices, so those issues likely may never get fixed. I have a few Chromecast with Google TVs, but none have updated to 14 yet. Guess I have to look at upgrading those out of my ADBTuner setup. Fortunately I have been very happy with Google's latest device in the Google TV Streamer 4k.

Yes, this exactly. My experience as well. Was why I was tinkering with the custom configurations feature recently added.

My Showtime issues seemed to possibly resolve themselves (app update?). So I wasn't able to try this, but I think this should get you pretty close as I have learned how to use the configurations for a couple of other things. You may have to tweak the sleep timings a little depending on your device. I found I had to keep the total delays at a max of around 20-21 seconds or things weren't going to tune in Channels. Also, I found sending sleep delays in maximum chunks of 4 or less would work when 5 or greater wouldn't work well. Hopefully yours might update soon too, but if not, try this

{
"name": "Fix Showtime",
"author": "Nate",
"version": "0.1",
"description": "Fix Showtime menu not going away issue.",
"uuid": "7cf29289-bcd6-4eca-97f3-811cf5c469c6",
"global_options": {
"wait_for_video_playback_detection": false,
"use_fixed_delay": true,
"fixed_delay_seconds": 0,
"check_for_and_clear_whos_watching_prompts": false
},
"pre_tune_commands": [
"am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
],
"tune_commands": [
"sleep 4",
"sleep 3",
"input keyevent KEYCODE_DPAD_CENTER",
"sleep 4",
"sleep 1",
"input keyevent KEYCODE_DPAD_DOWN",
"input keyevent KEYCODE_DPAD_DOWN",
"sleep 1",
"input keyevent KEYCODE_BACK",
"input keyevent KEYCODE_BACK"
],
"post_tune_commands": [
"am force-stop '||TARGET_PACKAGE_NAME||'"
]
}

Also, I learned how to make use of the "configurations" for an app that didn't support deep links to open to a channel in an app and have it go fullscreen. Using the monkey command this way will launch any app. See this below if anyone is interested:

{
"name": "NFL Network",
"author": "Nate",
"version": "0.1",
"description": "NFL App NFL Network.",
"uuid": "bf2fe05e-7b75-422b-b99d-5dedb9f65ab4",
"global_options": {
"wait_for_video_playback_detection": false,
"use_fixed_delay": true,
"fixed_delay_seconds": 0,
"check_for_and_clear_whos_watching_prompts": false
},
"pre_tune_commands": [
"monkey -p com.gotv.nflgamecenter.us.lite -c android.intent.category.LEANBACK_LAUNCHER 1 || monkey -p com.gotv.nflgamecenter.us.lite -c android.intent.category.LAUNCHER 1"
],
"tune_commands": [
"sleep 4",
"sleep 4",
"sleep 4",
"input keyevent KEYCODE_DPAD_CENTER"
],
"post_tune_commands": [
"am force-stop com.gotv.nflgamecenter.us.lite"
]
}

Thanks nateg. I just did a check of showtime channel and I see that some of my devices are working good now but some still have the menu issue. I agree it is probably a peacock app update that is rolling out. If I have some time later I will check each device to see what version app they are running.

Edit: I have both CCwGTV 4K and ONN 4K Pro devices. I see it working on some of both models and still failing on some of both models.

Hi all! I'm back using ADBTuner with FuboTV, but having a heck of a time getting it to work as it used to.

Channels seems to time out getting a tuner. I've watched through the encoder's interface that it does eventually tune to the channel, but long after Channels has given up. I've tried with Compat mode on and off. If it matters, I'm using a Google 4K streamer. Here's the logs:

2025-07-01 19:59:39.148 - server - Name: ChromeCast 4K Priority: 1
2025-07-01 19:59:39.149 - server - Selecting random tuner
2025-07-01 19:59:39.150 - server - Reserved Tuner: Name: ChromeCast 4K Priority: 1
2025-07-01 19:59:39.151 - server - Using tuner id: 1 for stream.
2025-07-01 19:59:39.152 - uvicorn.access - 192.168.6.119:49492 - "GET /stream/2 HTTP/1.1" 307
2025-07-01 19:59:39.215 - server - Tuner: Tuning to FOODC on ChromeCast 4K
2025-07-01 19:59:39.217 - server - Tuner: Using channel configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8)
2025-07-01 19:59:39.227 - lib.adb - ADB: Connecting to device (attempt 1).
2025-07-01 19:59:39.510 - lib.adb - ADB: Connected.
2025-07-01 19:59:39.510 - lib.adb - ADB: 192.168.6.110 - settings list global
2025-07-01 19:59:39.661 - root - adb_allowed_connection_time=0, adb_enabled=1, adb_wifi_enabled=0
2025-07-01 19:59:39.661 - lib.adb - ADB: 192.168.6.110 - dumpsys display
2025-07-01 19:59:39.756 - lib.adb - ADB: 192.168.6.110 - getprop ro.build.version.release
2025-07-01 19:59:39.837 - lib.adb - ADB: Android Version: 14.0.
2025-07-01 19:59:39.837 - lib.adb - ADB: 192.168.6.110 - pm list packages -3
2025-07-01 19:59:39.940 - lib.adb - ADB: 192.168.6.110 - pidof com.fubo.firetv.screen
2025-07-01 19:59:40.031 - root - Using https://link.fubo.tv/al1%3Fv%3D1%26a%3Dplay%26t%3Dchannel%26channel_id%3D734670001 to load channel.
2025-07-01 19:59:40.031 - lib.adb - ADB: 192.168.6.110 - input keyevent KEYCODE_MEDIA_STOP
2025-07-01 19:59:40.137 - lib.adb - ADB: 192.168.6.110 - am start -W -a android.intent.action.VIEW -d 'https://link.fubo.tv/al1%3Fv%3D1%26a%3Dplay%26t%3Dchannel%26channel_id%3D734670001' 'com.fubo.firetv.screen'
2025-07-01 19:59:43.748 - server - Tuner: Waiting for playback start. Status: unknown
2025-07-01 19:59:55.140 - lib.adb - Checking for profile screen
2025-07-01 20:00:00.231 - lib.adb - Checking for profile screen
2025-07-01 20:00:05.477 - lib.adb - Checking for profile screen
2025-07-01 20:00:10.596 - server - Tuner: Could not detect playback state. Giving up after 31.39 seconds. Display was on, application (com.fubo.firetv.screen) was running.
2025-07-01 20:00:10.596 - server - Released tuner ID: 1
2025-07-01 20:00:10.596 - lib.adb - ADB: Stopping media playback.
2025-07-01 20:00:10.597 - lib.adb - ADB: 192.168.6.110 - input keyevent KEYCODE_MEDIA_STOP
2025-07-01 20:00:10.633 - server - Skipping keep alive tasks as it's currently the top or middle of the hour.
2025-07-01 20:00:10.666 - lib.adb - ADB: 192.168.6.110 - input keyevent KEYCODE_MEDIA_PAUSE```

Channels Log: 
2025/07/01 19:30:16.382550 [ERR] Could not start stream for M3U-ADBFuboPi ch42 FOODC: M3U: 901 Tuner Unreachable: Timeout after 20.03s connecting to: http://192.168.7.142:5593/stream/2 
2025/07/01 19:34:28.435291 [ERR] Could not start stream for M3U-ADBFuboPi ch44 LIFECHD: M3U: 901 Tuner Unreachable: Timeout after 20.12s connecting to: http://192.168.7.142:5593/stream/4 
2025/07/01 19:37:46.472778 [ERR] Could not start stream for M3U-ADBFuboPi ch42 FOODC: M3U: 901 Tuner Unreachable: Timeout after 20.02s connecting to: http://192.168.7.142:5593/stream/2```


Just as an UPDATE: I tried with a FireTV I had laying around, and it's the same issue. It does eventually play the channel, but too late for Channels

I'm using the Fubo app with ADB Tuner with my ONN 4k. The app is a little slow.
here is what i use for METV.
https://link.fubo.tv/al1?v=1&a=play&t=channel&channel_id=122696
Use compatibility mode and pick the FUBO App option.
I would suggest watching the feed on the hdmi encoder so you can see what is happening.

Oh! There’s a FUBO option? Or do you mean selecting it as the package name? I’ve done the latter, but am unaware of the former.

Watching via the tuner shows that it does eventually load the channel, but it’s well after the timeout for Channels.

You want to select the package in ADB Tuner.

1 Like

Have ADB setup with a 4x hdmi encoder and 4 ONN boxes with a Fubo account. Works very well with 1 exception.

My wife is team NBC (Today, NBC Nightly News, Daytime Talk shows). For some reason, NBC will about 1 in 3 to 1 in 5 times when launching just come up with the NBC home page on Fubo (see below screen shot). I thought it was just 1 of the tuners, so I enabled the tuner priority in ADB and put that one last, but have since seen this same dynamic with Tuners 1-3 as well.

Here's what I see when it doesn't tune in the "live" version:


Backing out and relaunching usually solves the problem which is fine for live tv watching, but for recording purposes that doesn't work.

I don't see any errors in the logs, anyone have any suggestions on how to fix?

Also, I do have OTA access, but have periodic "hiccups" in the tuner just on NBC, not other networks. Signal strength is great, I've even introduced a spitter to see if the signal was too strong (use a Televes with built in pre-amp and 5G filter), but still see the hiccups.

Here's the NBC entry in ADB as well.

Thanks for any assistance.

Jay

1 Like

I have been wondering if it is possible that the "Keep Device Awake" option in ADBTuner may occasionally cause my OliveTin ADBTuner Device Alerter to show a device as disconnected. Or, perhaps something else may be causing this error.

This happens once every few days, each time to a different device.

{"name": "LinkPi4",
"device_ip_address": "192.168.1.214",
"device_connected": false,
"streaming_endpoint": "http://192.168.1.161/live/stream3",
"streaming_endpoint_connected": true},

Every time it happens, I check the ADBTuner GUI and it shows all tuners Connected and available:

As you probably know, OliveTin is passing through the exact JSON response from ADBTuner, so I'd imagine there is at least a temporary disconnection or other issue.

Could these be Wi-Fi dropouts? Or, is it possible that device is actively being used for a capture and is being falsely reported as not connected?

At the time when the disconnect was reported, it seems that there was some sort of operation happening on that tuner. All tuners show this same series of entries in the log. Though, I have no idea what these entries mean.

2025-07-11 16:09:30.520 - lib.adb - ADB: Connected.
2025-07-11 16:09:30.520 - lib.adb - ADB: 192.168.1.214 - settings list global
2025-07-11 16:09:30.595 - root - adb_allowed_connection_time=0, adb_enabled=1, adb_wifi_enabled=0
2025-07-11 16:09:30.595 - lib.adb - ADB: 192.168.1.214 - dumpsys display
2025-07-11 16:09:30.662 - lib.adb - ADB: 192.168.1.214 - getprop ro.build.version.release
2025-07-11 16:09:30.719 - lib.adb - ADB: Android Version: 12.0.
2025-07-11 16:09:30.737 - httpx - HTTP Request: GET http://192.168.1.161/live/stream3 "HTTP/1.1 301 Moved Permanently"
2025-07-11 16:09:30.739 - lib.adb - ADB: Connecting to device (attempt 1).
2025-07-11 16:09:30.829 - lib.adb - ADB: Connected.

Something else which is odd to me is that the timestamps from the ADBTuner log are off by 12 hours. This error happened at 4:09 AM. The log shows 16:09, which is 4:09 PM, a time we haven't even reached currently.

Since it's been a few months with no major issues, I have merged the experimental branch and pushed new docker images. As of today, :latest, :stable, and :experimental are all the same image.

Please let me know if you run into any issues. The major changes are a more reliable way to detect when playback devices disconnect and the new (optional) /configurations section.


When the status page (/up) is loaded, ADBTuner opens a connection to each device and gets the Android version to confirm the connection is working. This is what you are seeing in the log output.

I added a "[Health Check]" prefix to these log entries in the current version so it's more obvious that these commands are running as part of a health check. It should look similar to this now:

adbtuner-1  | 2025-07-12 12:15:51.118 - server - Device 1: Starting health check.
adbtuner-1  | 2025-07-12 12:15:51.121 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - Connecting to device (attempt 1).
adbtuner-1  | 2025-07-12 12:15:51.268 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - Connected.
adbtuner-1  | 2025-07-12 12:15:51.268 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - settings list global
adbtuner-1  | 2025-07-12 12:15:51.327 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - adb_allowed_connection_time=0, adb_enabled=1, adb_wifi_enabled=0
adbtuner-1  | 2025-07-12 12:15:51.327 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - dumpsys display
adbtuner-1  | 2025-07-12 12:15:51.373 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - getprop ro.build.version.release
adbtuner-1  | 2025-07-12 12:15:51.406 - lib.adb - [Health Check] ADB: 192.168.xx.xxx - Android Version: 12.0.
adbtuner-1  | 2025-07-12 12:15:51.421 - httpx - HTTP Request: GET http://192.168.xx/xxx/ "HTTP/1.1 301 Moved Permanently"
adbtuner-1  | 2025-07-12 12:15:51.421 - server - Device 1: Health check complete.

It should not be a problem if a health check, keep alive command, and/or video playback occurs simultaneously.

During tuning operations, ADBTuner will try to connect to the Android device up to 5 times which might hide an intermittent networking issue. The status page does not do this. I may change the behavior to match in the future, but for now I'm going to leave it as-is. If you run into this issue again, perhaps you can DM me a full log file and I will look into it further.

Docker containers use UTC time by default. You can change this by setting the TZ environment variable.
For example, if you are using Docker Compose you can add the following to your configuration file:

    environment:
      - TZ=America/New_York

A list of valid timezones is available here:
https://manpages.ubuntu.com/manpages/focal/en/man3/DateTime::TimeZone::Catalog.3pm.html

Are you still running into this issue? Last I checked, Fubo didn't need "Compatibility Mode." I don't know that it will fix your issue, but you might want to try disabling that.

@turtletank Thank you very much! I appreciate your detailed explanations, and continued work and support on this amazing project. I plan to update my ADBTuner image today. If I run into any issues, or have a recurrence of my previous concern. I can let you know and send you log files. Fortunately, in spite of the occasional notifications of disconnects, I have not had any failed recordings.

@turtletank thanks for the update , now the stream closes much faster after stop , great work.
I have been testing Stream Master with adbtuner and Tvheadend and it works even better now with the last update. Channel zap in Kodi from TVh is now down to 5-6 s

I updated to the newly released version today and found none of my channels worked.
Everything worked fine on the previous 'latest' docker image.

The error message is Tuner: Channel configuration not found for channel ID X. Exiting.
(X is the 1 digit sequential channel number for each of the 8 ADBTuner channels.)
I 'fixed' the issue by switching each channel to Compatibility Mode.
My setup is 2 versions of Firesticks - Android 9 and 11 on YoutubeTV.

1 Like

I just did the update and now channels are failing to tune with 404 Not Found. I'm trying to roll back but couldn't find prior version so using legacy-testing which seems to be working.

@dfrap @Rockies

Thank you for reporting this.

I think you might both be dealing with the same issue. A database migration should have automatically run during the upgrade to add configurations to each channel, but it seems in your cases it did not.

I need to figure out why this happened, but in the meantime this can be fixed by editing and saving all of the channels in the web interface, choosing "Deep Links" or "Compatibility Mode" in the configuration section as needed. It's important that you save each channel even if you made no changes.

I pushed a small update just now that will attempt to fail safely if a configuration is not set for a specific channel. It won't update your channel configuration, but it will use "Compatibility Mode" if you had previously used that setting on a specific channel, otherwise it will use "Deep Links."

If you run into any more issues please DM me a full log file so I can look into it further. Thanks!

I did notice that when I edited a channel and then saved it the channel would start working. Problem is I have probably around 150 channels and I had family members breathing down my neck. So I thought maybe if I exported the channels then did an import with DELETE that would fix it but it did not. So I switched to legacy-testing container and that seems to have helped but I have not validated everything. So much for the idea of sneaking in an update between family viewings. I will do some further testing early tomorrow morning before anyone starts watching. I did also notice some of the YTTV base channels that I have using for a long time did not have an issue. But recently I have added more YTTV channels for MGM+ and StarZ which were definitely not working. Something to look at when I am having my early morning coffee tomorrow.

When looking through the ADB Tuner interface, i noticed that the default setting under configurati9on was set to deep link recommended. If you have channels that use compatibility mode, you have to go in and make the change and hit save.
I use the setting when using the Fubo app.
If you use YTTV, all should be good as long as a valid subscription exists.