APITuner — ADB-free virtual tuner for Android TV / Google TV

Does anyone know if there's a key combination to close an app? I use NESN to watch the Red Sox Bruins. The key combination I use to launch it works only when it launches for the first time. How would I close the app after the stream ends so that next time it's called to open, it starts from the say beginning point.

Another question. If I want to share tuners, won't Channels DVR do that naturally? What's the benefit of making APITuner appear like an HD Homerun device?

Side note. This is by far more stable and reliable than ADB for me. Great work!

Closing NESN so the next tune starts clean

There isn’t a dedicated close-app shortcut. App Play key sequences assume a known screen, so the second tune misses when NESN is still sitting on the stream that just ended.

In Options:

Turn on Stop app on release. That sends Home when Channels disconnects (after Release grace, 5 seconds by default).
Keep apps running is on by default, which is why the app stays where it was. Turning that off also sends Home on release.
If this NESN channel uses a configuration, post_tune_commands run when the stream ends and take the place of that global Home. Put the exit there, for example:

input keyevent KEYCODE_HOME
or am force-stop '||TARGET_PACKAGE_NAME||'
Home only backgrounds the app. NESN often resumes the live player, so the same key sequence still lands in the wrong place. A real cold start is am force-stop, and that only kills the process when the keys backend is network ADB. The Agent, Android TV Remote, and Fire TV Remote all turn force-stop into Home.

HDHomeRun vs Channels sharing tuners

Channels only does Tuner Sharing for an HDHomeRun source: one tune of a channel is fanned out to every TV watching it, in sync. A Custom Channels M3U source does not get that. Each TV opens its own stream, which locks another stick and encoder, and the rooms drift.

Making APITuner look like an HDHomeRun is what lets Channels apply Tuner Sharing to these encoder sticks. Tuner count is the number of enabled tuners (one device plus encoder per slot). The same discovery also works for Plex, Emby, and Jellyfin. Enable it on the clients under Settings → Playback → Advanced → Tuner Sharing, and drop the M3U source if you added one earlier so Channels doesn’t use both.

Glad it’s been more reliable than ADB day to day. That’s the idea: ADB is only for the one-time Fire permission grant, not for each tune.

I don't have an HDHomeRun, so I can't confirm what you're saying about Tuner Sharing keeping streams in sync. If so, that sounds like a cool feature.

However, at least with ah4c, tuning multiple clients to the same channel does not result in two encoder ports and two streaming sticks being used. I have not found this to be true with other CDVR Custom Channel Sources either:

1 Like

slightly backwards. this is only relevant to hdhr's.
Screenshot 2026-10-04 164913
when tuner sharing is off the channels clients will go directly to an hdhr.
this is because channels has an app just for livetv from them without needing a dvr server.

so by the very nature that the server has a custom source, the clients will share since they do not know how to talk to the back end of the custom source.

I have gotten too relaxed with letting cursor do my bidding when it comes to replies, it seems to have misinterpreted the explanation I gave it. The reason I have included HDHR emulation is that it seems to reduce the amount of drift from the same stream. Where I use my setup most often is an area with 6-7 TVs that at times I want to be in sync and when I just use the same tuner via a custom channel there can be up to almost 2 seconds of drift from TV to TV but when I use channels from an HDHR emulated source there is no drift. Sorry for the confusion

2 Likes

wow, ok. I'm still not sure how this actually keeps them in sync. i'd imagine any 2 clients would get out of sync..
I just use hdmi/ethernet distribution to keep all mine in sync. but then again, I'm more fluent with wire than software. :wink:

I'm not seeing evidence of the Custom Channel not being able to share the same stream with multiple clients. I have ESPN ADBTuner channel pipped into Dispacharr that then feeds into Channels and I can watch ESPN on both my desktop via a browser and on my phone via app and it's only consuming 1 of my 5 ADBTuners. I checked Dispacharr and when testing, it only showed 1 client connecting even though I was watching on 2 devices, so that tells me Channels was splitting the same stream to both clients and not Dispatcharr doing the splitting.

Or am I misinterpreting your comment?

Already answered this

1 Like

Any chance you might update your project to work with FastChannels Passthrough? I'd love to get that up and running with APITuner since it's been much more stable than ADBTuner.

1 Like

I’ve never heard of that project but let me take a look and see what can be done.

Just a lil reading if you need it

Basically adbtuner pulls all of the DRM'd channels from http://x.x.x.x:5523/m3u/fc-player and adds it automatically with a config.

1 Like

I've started to work on this but it's going to take some time to get it shipped. I'll hopefully have something to test next week.

2 Likes

You're the man!

@waltgrace No pressure, but any progress on integrating APITuner into FastChannels using the Passthrough Channel List feature? Completely appreciate all your work.

2 Likes

Give it a shot, I don’t use Fast Channels so my testing was very basic.

I installed the updated APK. My question is, how did you configure this to work with Fast Channels. Fast Channels appears to communicate with FastChannels Player devices using ADB debugging. I don't have that set up (hence why I use APITuner).

Was there a work around to make this work?

FASTChannels only needs adb debugging to install the apk for FASTChannels player

APITuner only needs debugging if you have a firetv (or installing the apk, I guess)

I installed the FASTChannels player directly on the device via the APK.

Ok, its asking for a FASTChannels_Token in the settings. What is that as FASTChannels has no api tokens??

Honestly, I'm lost. Trying to beta test APITuner and get it to work as a bridge in FastChannels FastPlayer. Kind of lost at the moment since they're not really designed for one another yet.