AndroidHDMI for Channels (ah4c): A virtual channel tuner using HDMI Encoder(s) + streaming stick(s)

Interesting, but very limited in terms of devices that would support channel changing this way. DTV Ospreys and Geminis being two of the few.

So can you change channels via a curl command to a URL? If so, I have implemented something like that before.

Do have a link for the source code for this HA plugin? I'd like to take a look at it.

@Jubeejb I found the source code. I'm guessing this would not be too hard to implement. Channel changes would be done this way:

curl -X POST \
  -H "Authorization: Bearer YOUR_HA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entity_id":"media_player.your_android_tv","media_content_id":702,"media_content_type":"channel"}' \
  http://HOME_ASSISTANT_IP:8123/api/services/media_player/play_media

In the above example, the channel would be changed to 702. In the script that 702 would be a variable, with its value passed by M3U.

You'd definitely be missing out on some cool features of ah4c not having ADB enabled, but to me, what you're asking looks do-able.

Your M3U would look like this:

#EXTM3U

#EXTINF:-1 channel-id="265" channel-number="265",A&E
http://{{ .IPADDRESS }}/play/tuner/265

#EXTINF:-1 channel-id="361" channel-number="361",AccuWeather
http://{{ .IPADDRESS }}/play/tuner/361

#EXTINF:-1 channel-id="254" channel-number="254",AMC
http://{{ .IPADDRESS }}/play/tuner/254

#EXTINF:-1 channel-id="282" channel-number="282",Animal Planet
http://{{ .IPADDRESS }}/play/tuner/282

#EXTINF:-1 channel-id="340" channel-number="340",AXS TV
http://{{ .IPADDRESS }}/play/tuner/340

#EXTINF:-1 channel-id="293" channel-number="293",BabyFirst HD
http://{{ .IPADDRESS }}/play/tuner/293

#EXTINF:-1 channel-id="264" channel-number="264",BBC America
http://{{ .IPADDRESS }}/play/tuner/264

#EXTINF:-1 channel-id="329" channel-number="329",BET
http://{{ .IPADDRESS }}/play/tuner/329

#EXTINF:-1 channel-id="353" channel-number="353",Bloomberg TV
http://{{ .IPADDRESS }}/play/tuner/353

#EXTINF:-1 channel-id="298" channel-number="298",Boomerang
http://{{ .IPADDRESS }}/play/tuner/298

#EXTINF:-1 channel-id="237" channel-number="237",Bravo
http://{{ .IPADDRESS }}/play/tuner/237

#EXTINF:-1 channel-id="296" channel-number="296",Cartoon Network East
http://{{ .IPADDRESS }}/play/tuner/296

#EXTINF:-1 channel-id="341" channel-number="341",CleoTV
http://{{ .IPADDRESS }}/play/tuner/341

#EXTINF:-1 channel-id="327" channel-number="327",CMT
http://{{ .IPADDRESS }}/play/tuner/327

#EXTINF:-1 channel-id="355" channel-number="355",CNBC
http://{{ .IPADDRESS }}/play/tuner/355

#EXTINF:-1 channel-id="202" channel-number="202",CNN
http://{{ .IPADDRESS }}/play/tuner/202

#EXTINF:-1 channel-id="419" channel-number="419",CNN En EspaƱol
http://{{ .IPADDRESS }}/play/tuner/419

#EXTINF:-1 channel-id="358" channel-number="358",CNNi
http://{{ .IPADDRESS }}/play/tuner/358

#EXTINF:-1 channel-id="249" channel-number="249",Comedy Central
http://{{ .IPADDRESS }}/play/tuner/249

#EXTINF:-1 channel-id="350" channel-number="350",C-SPAN
http://{{ .IPADDRESS }}/play/tuner/350

#EXTINF:-1 channel-id="351" channel-number="351",C-SPAN2
http://{{ .IPADDRESS }}/play/tuner/351

#EXTINF:-1 channel-id="369" channel-number="369",Daystar
http://{{ .IPADDRESS }}/play/tuner/369

#EXTINF:-1 channel-id="278" channel-number="278",Discovery
http://{{ .IPADDRESS }}/play/tuner/278

#EXTINF:-1 channel-id="290" channel-number="290",Disney Channel
http://{{ .IPADDRESS }}/play/tuner/290

#EXTINF:-1 channel-id="289" channel-number="289",Disney Junior
http://{{ .IPADDRESS }}/play/tuner/289

#EXTINF:-1 channel-id="292" channel-number="292",Disney XD
http://{{ .IPADDRESS }}/play/tuner/292

#EXTINF:-1 channel-id="236" channel-number="236",E!
http://{{ .IPADDRESS }}/play/tuner/236

#EXTINF:-1 channel-id="267" channel-number="267",EarthxTV
http://{{ .IPADDRESS }}/play/tuner/267

#EXTINF:-1 channel-id="206" channel-number="206",ESPN
http://{{ .IPADDRESS }}/play/tuner/206

#EXTINF:-1 channel-id="209" channel-number="209",ESPN2
http://{{ .IPADDRESS }}/play/tuner/209

#EXTINF:-1 channel-id="314" channel-number="314",Family Movie Classics (FMC)
http://{{ .IPADDRESS }}/play/tuner/314

#EXTINF:-1 channel-id="231" channel-number="231",Food Network
http://{{ .IPADDRESS }}/play/tuner/231

#EXTINF:-1 channel-id="359" channel-number="359",FOX Business Network
http://{{ .IPADDRESS }}/play/tuner/359

#EXTINF:-1 channel-id="360" channel-number="360",FOX News Channel
http://{{ .IPADDRESS }}/play/tuner/360

#EXTINF:-1 channel-id="219" channel-number="219",FOX Sports 1
http://{{ .IPADDRESS }}/play/tuner/219

#EXTINF:-1 channel-id="363" channel-number="363",FOX Weather
http://{{ .IPADDRESS }}/play/tuner/363

#EXTINF:-1 channel-id="311" channel-number="311",Freeform
http://{{ .IPADDRESS }}/play/tuner/311

#EXTINF:-1 channel-id="248" channel-number="248",FX
http://{{ .IPADDRESS }}/play/tuner/248

#EXTINF:-1 channel-id="259" channel-number="259",FXX
http://{{ .IPADDRESS }}/play/tuner/259

#EXTINF:-1 channel-id="404" channel-number="404",Galavisión
http://{{ .IPADDRESS }}/play/tuner/404

#EXTINF:-1 channel-id="312" channel-number="312",Hallmark Channel
http://{{ .IPADDRESS }}/play/tuner/312

#EXTINF:-1 channel-id="565" channel-number="565",Hallmark Movies & Mysteries
http://{{ .IPADDRESS }}/play/tuner/565

#EXTINF:-1 channel-id="229" channel-number="229",HGTV
http://{{ .IPADDRESS }}/play/tuner/229

#EXTINF:-1 channel-id="204" channel-number="204",HLN
http://{{ .IPADDRESS }}/play/tuner/204

#EXTINF:-1 channel-id="240" channel-number="240",HSN
http://{{ .IPADDRESS }}/play/tuner/240

#EXTINF:-1 channel-id="333" channel-number="333",IFC
http://{{ .IPADDRESS }}/play/tuner/333

#EXTINF:-1 channel-id="285" channel-number="285",Investigation Discovery
http://{{ .IPADDRESS }}/play/tuner/285

#EXTINF:-1 channel-id="305" channel-number="305",ION
http://{{ .IPADDRESS }}/play/tuner/305

#EXTINF:-1 channel-id="252" channel-number="252",Lifetime
http://{{ .IPADDRESS }}/play/tuner/252

#EXTINF:-1 channel-id="281" channel-number="281",MotorTrend
http://{{ .IPADDRESS }}/play/tuner/281

#EXTINF:-1 channel-id="356" channel-number="356",MSNBC
http://{{ .IPADDRESS }}/play/tuner/356

#EXTINF:-1 channel-id="331" channel-number="331",MTV
http://{{ .IPADDRESS }}/play/tuner/331

#EXTINF:-1 channel-id="332" channel-number="332",MTV2
http://{{ .IPADDRESS }}/play/tuner/332

#EXTINF:-1 channel-id="276" channel-number="276",National Geographic Channel
http://{{ .IPADDRESS }}/play/tuner/276

#EXTINF:-1 channel-id="349" channel-number="349",Newsmax
http://{{ .IPADDRESS }}/play/tuner/349

#EXTINF:-1 channel-id="299" channel-number="299",Nickelodeon
http://{{ .IPADDRESS }}/play/tuner/299

#EXTINF:-1 channel-id="274" channel-number="274",Ovation
http://{{ .IPADDRESS }}/play/tuner/274

#EXTINF:-1 channel-id="241" channel-number="241",Paramount Network
http://{{ .IPADDRESS }}/play/tuner/241

#EXTINF:-1 channel-id="288" channel-number="288",PBS Kids
http://{{ .IPADDRESS }}/play/tuner/288

#EXTINF:-1 channel-id="275" channel-number="275",QVC
http://{{ .IPADDRESS }}/play/tuner/275

#EXTINF:-1 channel-id="315" channel-number="315",QVC2
http://{{ .IPADDRESS }}/play/tuner/315

#EXTINF:-1 channel-id="318" channel-number="318",QVC3
http://{{ .IPADDRESS }}/play/tuner/318

#EXTINF:-1 channel-id="238" channel-number="238",Reelz
http://{{ .IPADDRESS }}/play/tuner/238

#EXTINF:-1 channel-id="384" channel-number="384",Revolt
http://{{ .IPADDRESS }}/play/tuner/384

#EXTINF:-1 channel-id="345" channel-number="345",RFD-TV
http://{{ .IPADDRESS }}/play/tuner/345

#EXTINF:-1 channel-id="320" channel-number="320",Scientology Network
http://{{ .IPADDRESS }}/play/tuner/320

#EXTINF:-1 channel-id="226" channel-number="226",Shop LC
http://{{ .IPADDRESS }}/play/tuner/226

#EXTINF:-1 channel-id="239" channel-number="239",SundanceTV
http://{{ .IPADDRESS }}/play/tuner/239

#EXTINF:-1 channel-id="244" channel-number="244",Syfy
http://{{ .IPADDRESS }}/play/tuner/244

#EXTINF:-1 channel-id="247" channel-number="247",TBS
http://{{ .IPADDRESS }}/play/tuner/247

#EXTINF:-1 channel-id="256" channel-number="256",TCM
http://{{ .IPADDRESS }}/play/tuner/256

#EXTINF:-1 channel-id="303" channel-number="303",TeenNick
http://{{ .IPADDRESS }}/play/tuner/303

#EXTINF:-1 channel-id="347" channel-number="347",The First
http://{{ .IPADDRESS }}/play/tuner/347

#EXTINF:-1 channel-id="269" channel-number="269",The HISTORY Channel
http://{{ .IPADDRESS }}/play/tuner/269

#EXTINF:-1 channel-id="342" channel-number="342",TheGrio
http://{{ .IPADDRESS }}/play/tuner/342

#EXTINF:-1 channel-id="280" channel-number="280",TLC
http://{{ .IPADDRESS }}/play/tuner/280

#EXTINF:-1 channel-id="245" channel-number="245",TNT
http://{{ .IPADDRESS }}/play/tuner/245

#EXTINF:-1 channel-id="246" channel-number="246",truTV
http://{{ .IPADDRESS }}/play/tuner/246

#EXTINF:-1 channel-id="304" channel-number="304",TV Land
http://{{ .IPADDRESS }}/play/tuner/304

#EXTINF:-1 channel-id="242" channel-number="242",USA Network
http://{{ .IPADDRESS }}/play/tuner/242

#EXTINF:-1 channel-id="335" channel-number="335",VH1
http://{{ .IPADDRESS }}/play/tuner/335

#EXTINF:-1 channel-id="271" channel-number="271",VICE
http://{{ .IPADDRESS }}/play/tuner/271

#EXTINF:-1 channel-id="260" channel-number="260",WE tv
http://{{ .IPADDRESS }}/play/tuner/260
1 Like

So, in answer to your original question, you'd use this Project One-Click Action to create an M3U that would contain just the channels you subscribe to:

Screenshot 2026-09-24 at 10-16-45 OliveTin - Organizr V2

Then you'd just need to create a simple set of scripts for the channel changes, featuring the curl command in my previous post. We'll add them as scripts/gemini/dtvgemini

It's a bummer that DTV has locked out ADB access on the Gemini series with recent updates.

Wait what!? They haven't. The Gemini Air and Osprey use the same FW. ADB is still there.

1 Like

Not according to multiple posts on Reddit -- but this appears to apply only to the Gemini.

Gemini == Osprey it's the same device rebranded. Can you share the posts. I'm on Reddit and I see nothing. I have a stack of 10 lol so I need to know if I have to work on a solution to get these working.

1 Like

I thought I was looking at posts about the Gemini Air, and this one primarily, but cross-checking the model number, I see this post is about the Gemini set top box -- so despite a reasonably convincing looking post (particularly "phase 4"), we know this can't be correct:

https://www.reddit.com/r/DirectvStream/comments/1lkslq7/recent_update_to_c71kw400_disables_use_of_apps/

Sorry to raise your alarm bells. This seemed to match up with what @Jubeejb posted in the ADBTuner thread about losing ADB access to his Gemini, but perhaps that's incorrect info as well.

EDIT: It's possible what this Reddit user was reporting only applies to those who no longer have DTV subscriptions.

This is a bit old. Gemini Air runs ATV14 and the older Gemini C71KW-400 runs ATV 11 but I have not seen anything like that. Also per my conversations with DTV the Air is done and they are just giving out "Ospreys" I recently got one under a promotion (so 11) it's in my living room.

Maybe he an Air if thats the case there have been bugs lately with DTV boxes as a whole. I don't know what @Jubeejb is running. It'd be helpful to know what DTV box they have. There is also a Gemini V2 in beta right now and some have been offered to test those. Perhaps they are lucky enough to have one of those boxes. If that is the case I would say take a look at my FastChannels PR and hope @KineticMan can merge it because FastChannels will blow an Osprey out of the water if that PR is merged!!! My test image was so fast to tune last night and the channel numbers were perfect.

I know pretty sweet right? The FastChannels ah4c bridge for DTV (and a number of other decent providers) is the new rock star for encoder or Capture Card connected streaming sticks!

It's absolutely incredible. I just hope we can get that channel numbers thing sorted out, but I seem to have. I just hope it's mergeable. I don't know if you want to take a look at my PR and see if you have any ideas because I know you've worked with fastchannels before. I also scraped the Gracenote data from them as well so every channel will get a proper ID.

1 Like

What you did would be ideal, to get the DTV channel numbers "correct" right in FastChannels. So, I'll take a look, but most importantly @KineticMan is going to need a bit of time to make sure it doesn't conflict with other work he's done on channel numbers.

2 Likes

Of course. Hopefully it doesn't!

Hello the device I’m using is C71KW-400 I bought it on the Walmart site for $58.00. .

I don’t have the source side but the plugin is well documented on how to use and what it can do. Searching Home Assistant AndroidTV remote would most likely get you the documentation.

When I first enabled ADB on the device it worked fine. Than after rebooting the device a few times the device would no longer stream content. To start streaming content I had to disable ADB.

Like I said, I have 11 of these and have not run into that. And they're fully up to date, so it must be something else.

Also, a lot of us have this exact model of device. Some of us also have 8 to 10 and use them with channels, and I don't think any of us would run into anything like that.

Could you maybe share what your about page looks like? I want to see the firmware version, build number, Direct TV app build number, etc. you're on just to see if maybe there's a newer release that you got and I don't have. How long has it been like this?

1 Like

As I said in another post, I found the source code.

I don’t have an about page but I’ll provide whatever info I can get. I’m not at the house right now but I do know that based on the label the device was manufactured in 2019.

The About page is how you tap the build number to enable developer options in the first place.