Also, I wonder why these two don't have Tune ID values?
I managed to get 7 individals streams going ( 5x AppleTV, Mac and iPhone); all were playing fine.... Stopping one stream had no effect on the others but when I hit stop on 3 of the ATVs at once all but one stream stoped, as in they went to the YTTV Main screen - the actual LinkPi stream was still going so it seems that multiview is not the cause but stopping multiple streams simultaneously is cauing this behavior.
`2026-03-20 16:27:44.635 - server -
--------------------------------------------------
Tuner "LinkPi 1 - 0" is currently in use and locked.
Tune ID: 9gm5sz4qzfiquASpvkEgxG
Channel: ESPN
Lock Obtained: 2026-03-20 16:24:01 (3.73 minutes ago)
Last Seen: 2026-03-20 16:27:43 (1.64 seconds ago)
Bytes Transferred: 234294624 (223.44MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
--------------------------------------------------
Tuner "LinkPi 1 - 1" is currently in use and locked.
Tune ID: 4u5LAQvW4nSDYYXDojG23m
Channel: ESPN2
Lock Obtained: 2026-03-20 16:24:09 (3.59 minutes ago)
Last Seen: 2026-03-20 16:27:44 (0.64 seconds ago)
Bytes Transferred: 232073916 (221.32MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
--------------------------------------------------
Tuner "LinkPi 2 - 4" is currently in use and locked.
Tune ID: AJhjP53vf9SbsmS5w5uo6V
Channel: ESPNews
Lock Obtained: 2026-03-20 16:25:34 (2.18 minutes ago)
Last Seen: 2026-03-20 16:27:44 (0.64 seconds ago)
Bytes Transferred: 120219420 (114.65MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
--------------------------------------------------
Tuner "LinkPi 2 - 1" is currently in use and locked.
Tune ID: hjBzbi2C3iubupu69DHWQA
Channel: TBS
Lock Obtained: 2026-03-20 16:26:07 (1.63 minutes ago)
Last Seen: 2026-03-20 16:27:43 (1.64 seconds ago)
Bytes Transferred: 105302748 (100.42MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
--------------------------------------------------
Tuner "LinkPi 2 - 3" is currently in use and locked.
Tune ID: fLFj2i58TRazANS2uZoUt9
Channel: TNT
Lock Obtained: 2026-03-20 16:26:29 (1.26 minutes ago)
Last Seen: 2026-03-20 16:27:42 (2.64 seconds ago)
Bytes Transferred: 66376032 (63.3MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
--------------------------------------------------
Tuner "LinkPi 2 - 0" is currently in use and locked.
Tune ID: EunoSQAXfK7Gh9GHPLbJJL
Channel: ESPNUHD
Lock Obtained: 2026-03-20 16:26:39 (1.09 minutes ago)
Last Seen: 2026-03-20 16:27:44 (0.64 seconds ago)
Bytes Transferred: 74547076 (71.09MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
--------------------------------------------------
Tuner "LinkPi 2 - 2" is currently in use and locked.
Tune ID: 4hZgRPkYUbybtExSxnijy6
Channel: SEC Network
Lock Obtained: 2026-03-20 16:27:24 (0.34 minutes ago)
Last Seen: 2026-03-20 16:27:43 (1.64 seconds ago)
Bytes Transferred: 14370532 (13.7MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
2026-03-20 16:27:45.054 - tuner_management - Releasing tuner 10 as it has been inactive for 3 seconds.
2026-03-20 16:27:45.054 - tuner_management - Releasing tuner: {'lock_obtained': 1774023989, 'tuner_name': 'LinkPi 2 - 3', 'name': 'TNT', 'number': 6035, 'provider_name': 'YTTV', 'tuner_id': 10, 'channel_id': 31, 'tuning_status': 'tuned', 'request_key': 'fLFj2i58TRazANS2uZoUt9', 'target_package': 'com.google.android.youtube.tvunplugged'}
2026-03-20 16:27:45.364 - tuner_management - [Tune fLFj2i58TRazANS2uZoUt9] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:27:45.364 - lib.adb - [Tune fLFj2i58TRazANS2uZoUt9] ADB: 192.168.130.16 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:27:45.617 - lib.adb - [Tune fLFj2i58TRazANS2uZoUt9] ADB: 192.168.130.16 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:27:45.839 - tuner_management - [Tune fLFj2i58TRazANS2uZoUt9] Released tuner (10).
2026-03-20 16:27:45.839 - tuner_management - [Tune fLFj2i58TRazANS2uZoUt9] Cleanup complete. LinkPi 2 - 3 (TNT)
2026-03-20 16:27:46.853 - tuner_management - Releasing tuner 8 as it has been inactive for 3 seconds.
2026-03-20 16:27:46.853 - tuner_management - Releasing tuner: {'lock_obtained': 1774023967, 'tuner_name': 'LinkPi 2 - 1', 'name': 'TBS', 'number': 6033, 'provider_name': 'YTTV', 'tuner_id': 8, 'channel_id': 32, 'tuning_status': 'tuned', 'request_key': 'hjBzbi2C3iubupu69DHWQA', 'target_package': 'com.amazon.firetv.youtube.tv'}
2026-03-20 16:27:46.984 - tuner_management - [Tune hjBzbi2C3iubupu69DHWQA] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:27:46.984 - lib.adb - [Tune hjBzbi2C3iubupu69DHWQA] ADB: 192.168.130.14 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:27:48.029 - lib.adb - [Tune hjBzbi2C3iubupu69DHWQA] ADB: 192.168.130.14 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:27:48.960 - tuner_management - [Tune hjBzbi2C3iubupu69DHWQA] Released tuner (8).
2026-03-20 16:27:48.960 - tuner_management - [Tune hjBzbi2C3iubupu69DHWQA] Cleanup complete. LinkPi 2 - 1 (TBS)
2026-03-20 16:27:48.960 - tuner_management - Releasing tuner 9 as it has been inactive for 5 seconds.
2026-03-20 16:27:48.960 - tuner_management - Releasing tuner: {'lock_obtained': 1774024044, 'tuner_name': 'LinkPi 2 - 2', 'name': 'SEC Network', 'number': 6144, 'provider_name': 'YTTV', 'tuner_id': 9, 'channel_id': 5, 'tuning_status': 'tuned', 'request_key': '4hZgRPkYUbybtExSxnijy6', 'target_package': 'com.google.android.youtube.tvunplugged'}
2026-03-20 16:27:49.239 - tuner_management - [Tune 4hZgRPkYUbybtExSxnijy6] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:27:49.239 - lib.adb - [Tune 4hZgRPkYUbybtExSxnijy6] ADB: 192.168.130.15 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:27:49.403 - lib.adb - [Tune 4hZgRPkYUbybtExSxnijy6] ADB: 192.168.130.15 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:27:49.614 - tuner_management - [Tune 4hZgRPkYUbybtExSxnijy6] Released tuner (9).
2026-03-20 16:27:49.614 - tuner_management - [Tune 4hZgRPkYUbybtExSxnijy6] Cleanup complete. LinkPi 2 - 2 (SEC Network)
2026-03-20 16:27:49.615 - tuner_management - Releasing tuner 6 as it has been inactive for 3 seconds.
2026-03-20 16:27:49.615 - tuner_management - Releasing tuner: {'lock_obtained': 1774023849, 'tuner_name': 'LinkPi 1 - 1', 'name': 'ESPN2', 'number': 6141, 'provider_name': 'YTTV', 'tuner_id': 6, 'channel_id': 2, 'tuning_status': 'tuned', 'request_key': '4u5LAQvW4nSDYYXDojG23m', 'target_package': 'com.google.android.youtube.tvunplugged'}
2026-03-20 16:27:49.977 - tuner_management - [Tune 4u5LAQvW4nSDYYXDojG23m] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:27:49.977 - lib.adb - [Tune 4u5LAQvW4nSDYYXDojG23m] ADB: 192.168.130.13 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:27:50.058 - lib.adb - [Tune 4u5LAQvW4nSDYYXDojG23m] ADB: 192.168.130.13 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:27:50.176 - tuner_management - [Tune 4u5LAQvW4nSDYYXDojG23m] Released tuner (6).
2026-03-20 16:27:50.176 - tuner_management - [Tune 4u5LAQvW4nSDYYXDojG23m] Cleanup complete. LinkPi 1 - 1 (ESPN2)
2026-03-20 16:27:50.177 - tuner_management - Releasing tuner 11 as it has been inactive for 4 seconds.
2026-03-20 16:27:50.177 - tuner_management - Releasing tuner: {'lock_obtained': 1774023934, 'tuner_name': 'LinkPi 2 - 4', 'name': 'ESPNews', 'number': 6143, 'provider_name': 'YTTV', 'tuner_id': 11, 'channel_id': 4, 'tuning_status': 'tuned', 'request_key': 'AJhjP53vf9SbsmS5w5uo6V', 'target_package': 'com.google.android.youtube.tvunplugged'}
2026-03-20 16:27:50.590 - tuner_management - [Tune AJhjP53vf9SbsmS5w5uo6V] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:27:50.590 - lib.adb - [Tune AJhjP53vf9SbsmS5w5uo6V] ADB: 192.168.130.17 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:27:50.715 - lib.adb - [Tune AJhjP53vf9SbsmS5w5uo6V] ADB: 192.168.130.17 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:27:50.840 - tuner_management - [Tune AJhjP53vf9SbsmS5w5uo6V] Released tuner (11).
2026-03-20 16:27:50.840 - tuner_management - [Tune AJhjP53vf9SbsmS5w5uo6V] Cleanup complete. LinkPi 2 - 4 (ESPNews)
2026-03-20 16:27:50.841 - tuner_management - Releasing tuner 7 as it has been inactive for 4 seconds.
2026-03-20 16:27:50.841 - tuner_management - Releasing tuner: {'lock_obtained': 1774023999, 'tuner_name': 'LinkPi 2 - 0', 'name': 'ESPNUHD', 'number': 6142, 'provider_name': 'YTTV', 'tuner_id': 7, 'channel_id': 3, 'tuning_status': 'tuned', 'request_key': 'EunoSQAXfK7Gh9GHPLbJJL', 'target_package': 'com.google.android.youtube.tvunplugged'}
2026-03-20 16:27:51.028 - tuner_management - [Tune EunoSQAXfK7Gh9GHPLbJJL] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:27:51.028 - lib.adb - [Tune EunoSQAXfK7Gh9GHPLbJJL] ADB: 192.168.130.12 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:27:51.108 - lib.adb - [Tune EunoSQAXfK7Gh9GHPLbJJL] ADB: 192.168.130.12 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:27:51.264 - tuner_management - [Tune EunoSQAXfK7Gh9GHPLbJJL] Released tuner (7).
2026-03-20 16:27:51.264 - tuner_management - [Tune EunoSQAXfK7Gh9GHPLbJJL] Cleanup complete. LinkPi 2 - 0 (ESPNUHD)
2026-03-20 16:28:14.654 - server -
--------------------------------------------------
Tuner "LinkPi 1 - 0" is currently in use and locked.
Tune ID: 9gm5sz4qzfiquASpvkEgxG
Channel: ESPN
Lock Obtained: 2026-03-20 16:24:01 (4.23 minutes ago)
Last Seen: 2026-03-20 16:28:14 (0.65 seconds ago)
Bytes Transferred: 270415252 (257.89MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
2026-03-20 16:28:44.668 - server -
--------------------------------------------------
Tuner "LinkPi 1 - 0" is currently in use and locked.
Tune ID: 9gm5sz4qzfiquASpvkEgxG
Channel: ESPN
Lock Obtained: 2026-03-20 16:24:01 (4.73 minutes ago)
Last Seen: 2026-03-20 16:28:43 (1.67 seconds ago)
Bytes Transferred: 306480988 (292.28MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
2026-03-20 16:28:46.050 - tuner_management - Releasing tuner 4 as it has been inactive for 3 seconds.
2026-03-20 16:28:46.050 - tuner_management - Releasing tuner: {'lock_obtained': 1774023841, 'tuner_name': 'LinkPi 1 - 0', 'name': 'ESPN', 'number': 6140, 'provider_name': 'YTTV', 'tuner_id': 4, 'channel_id': 1, 'tuning_status': 'tuned', 'request_key': '9gm5sz4qzfiquASpvkEgxG', 'target_package': 'com.google.android.youtube.tvunplugged'}
2026-03-20 16:28:46.277 - tuner_management - [Tune 9gm5sz4qzfiquASpvkEgxG] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-03-20 16:28:46.277 - lib.adb - [Tune 9gm5sz4qzfiquASpvkEgxG] ADB: 192.168.130.11 - input keyevent KEYCODE_MEDIA_STOP
2026-03-20 16:28:46.448 - lib.adb - [Tune 9gm5sz4qzfiquASpvkEgxG] ADB: 192.168.130.11 - input keyevent KEYCODE_MEDIA_PAUSE
2026-03-20 16:28:46.630 - tuner_management - [Tune 9gm5sz4qzfiquASpvkEgxG] Released tuner (4).
2026-03-20 16:28:46.630 - tuner_management - [Tune 9gm5sz4qzfiquASpvkEgxG] Cleanup complete. LinkPi 1 - 0 (ESPN)
`
Well tested. This sounds like something the developer @turtletank will have to take a look at.
You might also try going back to Multiview, and removing streams one at a time, as a further confirmation that this is tied to stopping streams simultaneously.
I gave that test a try with 2 multview sessions going on 2 TVs, stopped one channel and a few seconds later 4 of the streams returned to the main YTTV screen (not on the same TV). Thanks for the suggestion @bnhf; I will wait to see if @turtletank has any advice.
I may have just found the issue, I have tested with success but need more do some more after the workday is over. In ADBTuner where you set priority per tuner I was using the same priority number for each type of streaming device, for example all the Onn 4k Plus devices were priority 1. I just changed this so they all have a unique number for priority and in my limited testing I can't re-produce the issue. Is it expected that each tunner needs a unique priority number?
I've never tried anything except using unique numbers or leaving the Priority field blank. This post suggests to me that what you were doing should work though:
But, if you're able to confirm the behavior you're describing, it sounds like a fix is needed...
Generally speaking, if one has to specify an activity, the URL isn't formatted correctly. Some apps are broken though. I get that. Can you try using https://www.nowtv.com/deeplink?... and see if that changes things? That is specifically defined as the "deeplink_hostname" within that apk.
I removed that field from the UI because it's rarely needed and if it's needed one can now create a custom configuration that hardcodes that activity. It was one less thing in the UI to confuse people.
Let me know if this changes anything. I'm not sure how this could be related, but I could have missed something. If all the tuners have the same priority one is selected at random, otherwise the one with the highest priority (lowest number) is selected from the tuners that are currently not in use.
From the logs it looks like the playback device (client) stopped streaming long enough for ADBTuner to assume it was ok to stop playback and release the tuner. I will have to setup a test case to see if I can duplicate.
I struggled with a similar issue when v 2.0 came out, after a month of recording the YoutubeTV Home Screen, I added the below environment variable to my stack and it solved the problem.
environment:
KNOWN_STREAM_DEFAULT_TIMEOUT: 10
I did some more testing last night and found that the unexpected behavior of exiting to theYTTV main screen when ending a multiview session on another TV still exists, despite adjusting the priority of tuners to be all individual. Well not conclusive it appears that it was harder to replicate with the priorities all being individual; I was able to make it happen 2 times. I tried to replicate this behavior by just ending one stream to see if the others were affected, and I could not do so. Whatever the issue is seems to happen when stopping multiple streams at one time.
When you have a chance, can you try @dvrbob's recommendation and add the following to your container's environment?
KNOWN_STREAM_DEFAULT_TIMEOUT: 10
From your logs it seems that the multiview playback client might stop streaming data for all of its active streams for a few seconds when one is stopped. After 3 seconds ADBTuner will release the tuner(s). Changing this configuration option will allow a full 10 seconds before that happens.
I'm the guy from the ah4c post that you helped me to get my Tivo Stream 4K working with adbtuner. It keeps getting stuck on this screen (that I get from View on Adbtuner). I can clear this screen by hitting "home" button in View screen, then I can get it to tune to adbtuner channels, but in a few hours it eventually drifts back to this "error syncing please visit settings" page. When I try to tune to a channel with CDVR android app, this same screen shows up and the CDVR app thinks its playing the requested channel. Any ideas?
You need to determine if this is happening during the virtual tuning process, or if it's happening when your TiVo Stream 4K is sitting idle. Doing multiple virtual tunes back-to-back, using just the TS4K, should answer that.
If this is something your TS4K is doing while sitting idle, and you're not using "keep alive", then this is not ADBTuner related.
If this is occurring during the virtual tuning process, then you need to determine which ADB command is causing it.
I can clear the "error syncing please visit settings" by hitting the Home button on adbtuner "View" button, I can then immediately tune to the channels defined by the adbtuner no problem (I did 3 in a row). I have placed com.hulu.livingroomplus into the "keep alive" field on adbtuner website yesterday after I did the same test (clear via home button, tune to several channels) and I then placed com.hulu.livingroomplus into the "keep alive" field. So it has failed after I populated the keep alive field also. So like the problem appears after sitting idle.
Disable keep alive, and see if this still happens while sitting idle. If so, this has nothing to do with ADBTuner.
It sounds like you could probably work around this though by adding an input keyevent KEYCODE_HOME to the pre-tune commands section of an ADBTuner Custom Config.
The problem exists with or without an entry in the keep alive field. I agree that all that's needed is to hit home button before trying to tune to a channel. Where is the process defined how to enter this custom config?
Search is your friend
:
https://community.getchannels.com/search?expanded=true&q=custom%20config%20topic:36822
OK, I'm trying here but its not obvious. If I go into adbtuner, I click "add new" n the configurations page. this json text then comes up:
{
"name": "New Configuration",
"author": "",
"version": "0",
"description": "Add description here.",
"uuid": "2a15823e-8528-48b1-bfb0-c0d5ae5e37d5",
"global_options": {
"wait_for_video_playback_detection": true,
"use_fixed_delay": false,
"fixed_delay_seconds": 0,
"check_for_and_clear_whos_watching_prompts": true,
"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": [],
"post_tune_commands": [
"input keyevent KEYCODE_MEDIA_STOP",
"input keyevent KEYCODE_MEDIA_PAUSE",
"input keyevent KEYCODE_HOME"
],
"source_file": "/app/app/configurations/01_default_deeplinks.json"
}
I see there us a UUID in this. I need add a pretune custom config for each channel? Sorry, went to an example on how to do this and its not sinking in. I just put in the input keyevent KEYCODE_HOME i the pretune section above and do this for each channel? Sorry..
One custom config, but each channel needs to be configured to use it.
Something like this should work:
{
"name": "TiVo Stream 4K Compatibility",
"author": "rss7",
"version": "1.0",
"description": "Added KEYCODE_HOME to pre_tune_commands.",
"uuid": "2a15823e-8528-48b1-bfb0-c0d5ae5e37d5",
"global_options": {
"wait_for_video_playback_detection": true,
"use_fixed_delay": false,
"fixed_delay_seconds": 0,
"check_for_and_clear_whos_watching_prompts": true,
"wait_after_post_playback_start_commands_seconds": 0
},
"pre_tune_commands": [
"input keyevent KEYCODE_MEDIA_STOP",
"input keyevent KEYCODE_HOME"
],
"tune_commands": [
"am start -W -a android.intent.action.VIEW -d '||TARGET_URL_OR_IDENTIFIER||' '||TARGET_PACKAGE_NAME||'"
],
"post_playback_start_commands": [],
"post_tune_commands": [
"input keyevent KEYCODE_MEDIA_STOP",
"input keyevent KEYCODE_MEDIA_PAUSE",
"input keyevent KEYCODE_HOME"
]
}
Thank You. I added the config you provided above to adbtuner, then applied it to each channel. Before I tried to tune to a channel the TS4K screen was still stuck. When I tuned to a channel I watched it get unstuck then tune to my requested channel. If I need more help I'll reach back out. Thanks as always for quick and productive response!
