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

Thanks! The new "Plus" boxes actually arrived! I picked up two batches of three delivered from separate stores. I know it's more than I'll need for my tuner stack. But, I can always return the surplus, or...keep them to upgrade a couple of my older client boxes.

I have been using @mackid1993 's "DirecTV X.X.X" config with my regular onn 4k boxes. I figured that I'd start out with that one for my newer Plus boxes. @spammedeeper , I'd love to compare with the config you are using with your onn Plus boxes. You have shared a few versions with me. But, I don't remember which was your most recent preference.

Here is my current config for DirecTV App on Onn 4K Plus. Focus is on recording, so I wake and sleep at each tuning.

{
"name": "DirecTV App - Onn 4K Plus (Recording)",
"author": "",
"version": "0",
"description": "Wake, Tune, Sleep for DirecTV App - For scheduled recordings",
"uuid": "e98a9693-0753-457f-87f2-4ab7cbf6190e",
"global_options": {
"wait_for_video_playback_detection": true,
"use_fixed_delay": false,
"fixed_delay_seconds": 0,
"check_for_and_clear_whos_watching_prompts": false,
"wait_after_post_playback_start_commands_seconds": 0
},
"pre_tune_commands": [
"input keyevent 224"
],
"tune_commands": [
"am start -S -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
],
"post_tune_commands": [
"input keyevent 3",
"input keyevent 26"
]
}

One more thing for Onn 4K Plus boxes. Compared to my Osprey boxes the audio output is much lower. On my LinkPi encoders, I boost audio +6dB for O4K+ HDMI inputs.

1 Like

My god, that's the other thing about the Osprey boxes. They are very loud. Very, very, very loud!

Do you compensate for the volume by reducing gain in the encoder settings?

No I just leave it. It honestly doesn't bother me.

Tested the ESPN Unlimited Disney+ Hulu $35 bundle to get the ESPN linear channels working in ADB with the Hulu App:

It does work! Thanks for the advise @nateg

Hulu ESPN linear channels deeplinks for anyone that was looking:

ESPN: https://www.hulu.com/watch/2c27a816-4404-4daf-90e0-5cf434e7e0c9
ESPN2: https://www.hulu.com/watch/d6115f15-959f-4e42-8cb5-7ab54b966c02
ACC: https://www.hulu.com/watch/acc-network-4a61ce1f-1bfb-4de4-b5d4-2f542217f12f
SEC: https://www.hulu.com/watch/sec-network-315c6dbe-8c86-4ad4-a7ca-06acc006859a
ESPNEWS: https://www.hulu.com/watch/espnews-dbdc4011-d408-4697-a3d8-70e0bd179fe9
ESPNU: https://www.hulu.com/watch/espnu-8a3b8267-7a37-4097-ab44-b3e0d7abed57

^ Wondering if anybody has had any luck finding these Hulu Deep Links for the ESPN App or Disney+ App?

I think the Hulu standalone app will be phased out this year, so the above Hulu deep links will probably stop working and will need either "Disney+" or "ESPN" App Deep Links.

There is one thing that is a little annoying, when the Hulu app goes idle, it asks you to select a profile on startup.

^ Updated to the latest ADB 20260228-1 and wasn't having that issue anymore, the tuners are able to move past The "Who's Watching" profile screen. I also have the "Keep Alive" and "Keep in Foreground" features at the tuner level checked for faster load times.

Note: I've also updated my fire tv's to not sleep with the "settings put system screen_off_timeout 2147460000" command, that is explained below:

https://www.reddit.com/r/fireTV/comments/1atyvqa/disabling_sleep_of_a_fire_tv_stick_4k_max/

ADB Channels using the Hulu Deeplinks

Below was some testing I did, but no longer needed. "Deep Links - Show Tuning Process" is working

"pre_tune_commands"
Added "input keyevent 66" to press "enter" when ADB opens Hulu to get past the select profile screen.

"post_tune_commands"
Modified with a double "input keyevent 4", so my fire tv presses "back twice" on exit, so the Hulu app doesn't close and launches quicker.

2 Likes

PS: When you signup for the ESPN Unlimited Disney+ Hulu bundle, you must activate Hulu in the email confirmation for the ESPN channels to work/show up in the FireTv Hulu standalone app.

Hulu

@Brando85 no worries. I don’t think the mouse house is going to give up on their live tv offering. I suspect that they would fold it in to their Disney app at some point. One would hope they would maintain deeplinking, and we would just just have to swap out hulu.com to Disney.com on these.

@nateg Yeah definitely, I was just reading that the stand alone Hulu app will shutdown sometime this year and only work under the Disney+ app

https://www.reddit.com/r/Hulu/comments/1mj3t4f/hulu_standalone_app_to_end_in_2026_content_to/

It’s brand confusion or something I guess, but Hulu has been owned by Disney for a long time. Certainly ever since there has been Hulu with live tv that has been Disney in the background. They are killing an app, that’s all. It will be Disney with live tv at some point.

A new development build (20260228-1) was released this morning with the following changes:

  • Experimental support for sending HTTP requests from within custom configurations.
  • Experimental support for application focus detection during pre-tune operations within custom configurations. Note: for now this is only available within the pre-tune section.

A few people had asked about using ADBTuner to control the Channels android app for the purposes of loading "virtual channels" which can only be accessed via a Channels client app. These changes are intended to provide a means of doing as such. @bnhf @jator

This is not well tested, but it worked for me on Android 14.

Example configuration:

{
    "name": "Channels DVR Virtual Channels",
    "author": "",
    "version": "0",
    "description": "Use Channels client app API to load virtual channels.",
    "uuid": "de1885fe-4d05-475c-be9e-7e9b7bafb503",
    "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 start -n '||TARGET_PACKAGE_NAME||/com.getchannels.android.MainActivity'",
        {
            "WAIT_FOR_FOCUS": {
                "package_name": "||TARGET_PACKAGE_NAME||"
            }
        },
        "sleep 5"
    ],
    "tune_commands": [
        {
            "HTTP": {
                "method": "POST",
                "action": "http://||TARGET_DEVICE_IP_ADDRESS||:57000/api/play/channel/||TARGET_URL_OR_IDENTIFIER||"
            }
        }
    ],
    "post_playback_start_commands": [],
    "post_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP",
        "input keyevent KEYCODE_MEDIA_PAUSE"
    ],
    "timed_keep_active_commands": []
}

The channel numbers for the "URL or Identifier" field can be obtained from the Channels admin interface at http://x.x.x.x:8089/admin/virtual-channels/
or
curl "http://192.168.86.25:8089/devices/VIRTUAL/guide" | jq '.[].Channel'

Let me know if you run into any issues.

I'm not sure what the best way to map these channels to guide data is, but there is some information about this in an older thread here:

Side note: If you are really into virtual channels like this, there are dedicated solutions for it like ErsatzTV and Tunarr that could provide similar functionality without having to tie up an Android TV device while watching. I'm sure there are pros and cons to all of the different approaches of course.

The "Who's watching" detect doesn't do this for you? I've always had success with that for Hulu. If you want to get wild you can explore the development version, which will let you put custom searches in for "who's watching?" types of screens.

Use of a compatibility mode configuration should help with apps that don't close properly.

Thanks for these @nateg I'll do some further testing, I didn't know about the "Who's watching" detect feature, sounds like that could help!

Have you tried using the "Deep Links - Default" configuration with Hulu? I think it should work just fine. You can probably use the "Keep Alive" and "Keep in Foreground" features at the tuner level for faster load times as well.

Thanks! @turtletank I tested "Deep Links - Default" but the profile screen was sometimes still showing up after going idle, will try again with the above and see what works best! :+1:

I was having problems with the Hulu app going idle and putting up the Who's watching screen. But the most recent Deep Links - Default configuration deals with that just fine. Whenever Who's Watching is up I still tune correctly.(Note: I am cautious so I use the Deep Links version that does not hide the tuning process so I can see what is going on and also I got rid of all profiles but one so no other profile choices are possible).

Running the latest 20260228-1 from today, ADB defaults are working better with Hulu. Thanks @turtletank @Stuartm @nateg for the info/feedback this morning, I switched from Sling TV so was working the bugs out. Updated my previous comment with updated setup/screenshots from today. :ok_hand:

Hi @turtletank, had another quick question:

I was doing some more testing with Fox One App and wanted to run those channels on a separate ADB tuner, so that the app stays active with another separate tuner.

Was running into some little issues going back and forth between the Hulu App and Fox One App across multiple tuners/fire tv sticks.

Is there a way to run multiple instances of ADB Tuner?

I tried this command:

Update: -p 5593:5592 Fixed the Issue:

"docker run -d --init -p 5593:5592 --name adbtuner2 -v adbtuner2_config:/app/.config turtletank99/adbtuner:development"

So that I created a new "adbtuner2" container and "adbtuner2_config" volume.

It ran without issues on a "adbtuner2_config" volume.

But when I go to start pulling the M3U channels with this new 5593 ADB instance with Channels DVR, I keep getting:

"Steaming to the tuner failed. Press play to try again.
M3U: GET: htttp://192.168.8.167:5593/stream/1:404 Not Found

My HDMI Tuner starts the Fox One channel without issues.

I tried rebuilding the database, restarting my Docker on my Mac mini and rebooting the fire tv sticks.

Trying to figure out whats causing the issue for Channels not to be able to pull in the Fox One channel on the 2nd ADB instance on port 5593?

Any suggestions would be appreciated, thank you

You don't change the port on the container-side, only on the host-side, so it'd be -p 5593:5592.

1 Like

@bnhf That was the issue! - 5593:5592 worked!!

Thank you very much! :raised_hands: