I think ™️ I solved this!! Opus 5 cracked it in a handful of prompts!!! Heavy APK decompilation from the boxes helped.
What's actually causing it
It's not the network. It's not the encoders. It's the DirecTV client.
There's a UI inactivity timer in the app set to 5 minutes. If nothing touches the box for 5 minutes it fires an event that dismisses the UI, and on these boxes that event also tells the player to restart playback. That restart is the blue flash.
The important part is it's a debounce. Every button press resets the 5 minute countdown. So if anything sends input to the box, the timer starts over.
Why it only seems to happen to me
The big one is that we tune these over ADB instead of with a real remote. That's the whole difference.
When you fire an am start deeplink at the box, the app sees that as another app handing it an intent. It flags playback as terminated by a third party app launch and arms itself to resume playback when you come back. That's a normal feature, it's there so you can jump into Netflix and come back and your TV is still on. A remote never does this because a remote isn't another app. So every tune we do arms that resume path.
Then the second half. Nothing touches the box for 5 minutes. If you're using a remote you're hitting buttons constantly and the timer never gets there. We tune and walk away, so it counts all the way down and then "resumes" a stream that was already playing. That's the flash.
You need both. A regular person with a remote never arms the first one, so they can leave the TV on all day and never see this.
There's a third thing too. This whole feature sits behind a server side feature flag, and the flag system they use supports percentage rollouts and target groups. So it can be switched on for some boxes and off for others with the same app version. That's probably why it's only me and why it seems to come and go on its own.
This also explains something that drove me crazy for weeks. Any time I got into ws-scrcpy to watch a box and figure out what was happening, it wouldn't happen. Because I was pressing keys while I was watching. The act of looking at it prevented it.
The fix
Send a harmless keyevent every few minutes. That's it. For ADBT:
"timed_keep_active_commands": [
{
"run_every_minutes": 3,
"commands": [
"input keyevent 211"
]
}
]
Some notes on that:
It has to be under 5 minutes. I'm using 3 which gives some margin in case one gets missed.
Use keycode 211. That's KEYCODE_ZENKAKU_HANKAKU, a Japanese IME key that doesn't do anything on a US TV app.
One keyevent is not enough. I thought a single press after the tune would be enough and it isn't. All it does is restart the 5 minute countdown from whenever the key lands. So if you fire one at 60 seconds you've only pushed the flash out by 60 seconds, from 5:00 to 6:00. You didn't stop it, you moved it.
It has to be on a repeat under 5 minutes or it will always catch up with you eventually.
Other stuff that is NOT the problem
I burned a month on this so save anyone else the trouble. None of this had anything to do with it:
- router (I swapped to a completely different router, same exact 300 second behavior)
- public IP (unplugged my WAN for 2 hours to force a new one, no change)
- DNS (tried every provider. the boxes hardcode Google DNS anyway and ignore whatever you set)
- encoder firmware (tried 3 different LinkPi builds)
- switches, cables
- HDMI CEC and EDID
- factory resetting the boxes
- new DirecTV account
One more thing
This looks like it got introduced in an app update. I pulled apart a December 2025 APK I had sitting around and the code that restarts playback isn't in it. The 5 minute timer is there but it only dismissed the UI, it didn't touch playback. So something changed after that.
The keyevent workaround doesn't care about any of that. It just never lets the timer get to 5 minutes.
Edit / Correction
It's not the actual deep link that is the mechanism. It's the sleep and then the eventual wake and unattended tune that is the mechanism that causes the issue, combined with the server-side flag that gets set at random on a box. The box doesn't realize it's being watched actively by a person, and after five minutes of what it deems as inactivity, it retunes to the last channel that was being watched, which happens to be the channel you just tuned to, which is the whole issue.