Chrome HDMI for Channels (CH4C): Chrome channel tuner plus HDMI encoder

I’ve created a proof of concept that pairs Chrome channel tuning with an HDMI encoder, enabling Channels to record any URL at 1080p / 60fps.

See the GitHub README for screenshots and setup instructions

This borrows heavily from Chrome Capture for Channels and Android HDMI for Channels. If you’re familiar with CC4C, think of this as a similar idea but offloading the encode to another device. If you’re familiar with AH4C, think of this as a similar idea but using a Chrome browser as the input instead of a streaming stick.

This is a proof of concept, not a fully developed executable, so proceed at your own risk. And please do share thoughts / feedback / pull requests.

3 Likes

This sounds like something I do with the TVbro app on the android devices and adbtuner. This is the way I pipe in TNF games from twitch. Set the user agent to Chrome (Desktop) and use set the url to the twitch stream with /popout in the end and voila.

Great work @Parkside! I really like the concept of offloading the browser stream encoding to an external encoder (via a standard Windows or Linux server). My (relatively low-power N95 Windows) Channels server can handle the web-based streaming and all the other DVR-related activities in parallel without issue.

I created a fork to add support for Sling TV and Google Photo Albums support and also added some error handling and input parameter options. I was able to create a Windows exe as well. I didn't re-test your previous NFL network and Disney streaming or instant recording capabilities, but I'm hopeful they're still functional.

I think there's now an opportunity to merge the remainder of the chrome-capture-for-channels functionality in here i.e. to run using the local gpu to encode if no external encoder is specified.

3 Likes

Amazing work @dravenst ! And I agree with your concept of integrating this approach into the CC4C code base as an optional implementation.

Minor FYI, the only work I attempted on this since posting was a re-write in Deno instead of Node. Overall I really liked Deno, but I found that the puppeteer package in Deno didn't behave at all. So it's likely best to stay in Node, or any other language that has high confidence Puppeteer performance.

I would try bun

1 Like

I added support for multiple encoders now. I tested it with the Link Pi ENC1-V3 on two concurrent streams and it works pretty well. Redirecting the browser sound to the proper encoder input was a bit challenging to deal with so I'm not sure if the method will work with all the streaming sites but I did test with Sling TV.

Is this project still active? I just came across it and it would solve A LOT of my use case issues if it's fairly stable.

Have folks been using this regularly? Has anyone been using this with another encoder than the LinkPi v3?

Yes, it works great for me, even with a low power Beelink N95. The external encoder solves a lot of the performance issues and the Link PI ENC1-V3 allows two streams concurrently. I've kept the functionality aligned with the Chrome Capture For Channels project.

1 Like

That’s awesome to hear! I’ll be looking to purchase that same encoder but I’m scratching my head trying to figure out how you can have two streams with only 1 HDMI input. I suppose if it works then that’s the most important part lol

You should have a look at the GitHub repo, so you understand how this works:

2 Likes

You cannot do 2 streams on 1 HDMI you would need a usb TO HDMI Encoder to attach to the device.

1 Like

Ah, thanks both — I missed the USB adapter callout since I’ve been reviewing Parkside’s original github link. Everything is on order so excited to try this out! Appreciate the responses :slight_smile:

Great to hear you're going to try it out, let me know how it goes! The project has been working well for me. The main intermittent issue is some websites periodically log me out so I end up recording the login page. Maybe someone can figure out a clever way to automate the re-logging in process using Xfinity credentials. Otherwise the project is smooth.

And I haven't done any further development, I think @dravenst fork is on the right track and the next major step would be to merge more deeply into the latest on the Chrome Capture for Channels efforts.

2 Likes

OK, finally have had a few days to kick the tires on this setup. It’s actually pretty great!

The load times are my one big complaint, but that may be a byproduct of using an older HP laptop (about 10+ seconds to full screen playback). Once the video starts playing though it’s really smooth (I have the encoder set to 1080p 60 FPS). I haven’t tested out the USB (second) encoder yet because I only have 1 HDMI output on the laptop — this might give me the excuse I’ve been looking for to finally get a n150 mini pc.

I think I need to tweak some of the encoder settings though. The picture quality is what I would call a little “soft” for lack of a better term. Probably not something that a regular person would notice, but something I’d like to dial in a bit.

Huge thanks to @parkside and @dravenst for putting this together. I love that this exists and that it works this well!

Yeah, agreed I'd like to figure out how to improve the startup lag. I tried moving it to bun (from node) but it doesn't seem any faster. A faster server does help a bit for now. I think adding browser pooling could reduce the load times a couple seconds as well.

Is it possible to capture more than one tab at the same time? And is it possible to capture streams in 4k? Thanks in advance

Capturing in 4k is independent of this software and would be determined by hardware - the machine you run on and the encoder. If your machine outputs 4k and the encoder can capture in 4k, then yes.

Capturing more than one tab is not currently implemented. I think it might be possible, by pushing different tabs (or windows) to different DISPLAY outputs. But definitely requires new coding.

1 Like

Thanks

3 Likes

Whenever i input the information, this comes up:
Invalid channel number for URL http://192.168.1.113: 8101/chn4

What does it mean?

1 Like

I was finally able to get it to work lol, but I would like to ask you if its okay: can you install 2 ports from the same encoder and if so, can you use both ports at the same time? And if you have 2 encoders at the same time and you map the same channels on both, if encoder 1 is already being and you try to open a channel on encoder 2 and that channel is mapped on both encoder 1 and encoder 2, would that channel automatically know to open in screen number 2 seeing that screen 1 is already in use? Or is there a chance that it will try to open in encoder 1 and in some way or another mess up whats currently playing on encoder 1? Thank you!