TV is Working, More or Less

So I’ve gotten the TV working on the new system. It’s kind of a convoluted set up, but it works just about perfectly so far. I have coaxial cable coming into the office from the ONT in the basement, and that goes into a Ceton InfiniTV 6 Eth cable card TV tuner. The tuner is connected by ethernet to the Cisco switch and in turn to an ethernet port on the server. To my surprise, the tuner was plug and play with the switch. I was expecting to have to adjust some settings, but it worked right out of the box.

The tuner is accessed directly by a Windows 10 VM running a piece of software called cetonproxy. This makes the Ceton tuner appear to be an HDHomerun to other programs. It’s a Windows-only thing right now unfortunately, so I have 3 cores and 5GB of memory dedicated to a VM just to run this little utility. I’ve never used a container, but this seems like a good use case for one. I don’t know if it’s feasible to run Windows stuff inside a container, but I’ll have to do a little research.

After cetonproxy works its magic, the tuner is usable as an HDHomerun on everything. I initially wanted Jellyfin to handle all the TV tuning stuff, but it turned out the Jellyfin plugin for Kodi doesn’t really do live TV. It lets you watch channels, but there’s no guide or access to recordings, so it’s kind of useless in my opinion. This meant I had to use NextPVR to do my TV tuning.

I generally like NPVR, and I’ve been using it as my TV solution for about a year and a half. It does everything I need a PVR package to do, but it always felt a little bit rough around the edges to me. That’s probably because it’s developed largely by one person, and he can only do so much. It’s closed source, so no one else can contribute. I personally feel like the developer could have a much more robust package if he open-sourced it, but whatever. In the fall, he released a huge update to the program, and created a version for Linux.

After a couple false starts, I had the Linux version installed. The documentation for NPVR v5 is very sparse, and almost nonexistent for the Linux version. The web interface that’s now used to control the program seems to include fewer settings than the old set up, and the descriptions of the settings are very brief. This is something that could be vastly improved in an open source project. I’ll be researching to see if tvheadend can replace NPVR for me.

Yesterday, I recorded a bunch of shows. NPVR, and I assume most other PVR programs, record shows to a .ts file. I’m not sure what kind of encoding these files use, but it results in huge file sizes. A two hour-ish recording of the move Tangled resulted in a ~15GB file. That’s not a whole lot smaller than a similar-length Blu-Ray rip with multiple DTS and AC3 audio tracks. Handily, NPVR includes an option to automatically re-encode recordings after they finish. There is a choice between CPU and VAAPI (graphics card) encoding. Since I had the GPU set up for Jellyfin, I figured that would be the thing to use. I set it, and it didn’t work. I got some help from a rather brusque forum member. Turns out the developer omitted a line or two of code that is needed when selecting the VAAPI option. Again, something that probably wouldn’t happen in an open source project. So for now, VAAPI is useless. Additionally, either VAAPI sucks or my GPU (an RX480 4GB) does, because it can only process one of those .ts files at half speed, which means it takes 10 minutes to encode 5 minutes of video. I’m very disappointed because my RTX 2080 Super, which I know is a significantly better GPU, can plow through a 2 hour Blu-Ray rip in 20 minutes or so using NVENC. The CPU encoding option is much faster, at double speed, meaning a 5 minute video would take 2.5 minutes to encode. This uses 20 virtual cores though. I’ll have to see how it works with multiple simultaneous encoding jobs. I only have 32 cores to give, and the rest of the VMs need some too. For now though, I don’t have a choice.

Another fly in the ointment is Jellyfin and its NPVR plugin, which allows Jellyfin to use NPVR as a backend for TV services. I had it going in a test when I was using the old PCI tuner, but since I set up and then removed the tuners on Jellyfin, I can’t get it working again. There’s an update to Jellyfin out that I’ll probably install next week, so we’ll see if that fixes it. That successful test also used an older version of NPVR, which might have something to do with it. I don’t want to use the old version though. Overall, I’m satisfied. I get TV on my TVs, so I guess I can’t complain too much.

So we finally got FiOS

After a couple false starts, we got our FiOS service going on Thursday. We got the gigabit internet and lifestyle and reality custom TV package. The download speeds have been a tad disappointing at about 330 mbps, while the uploads are an excellent 700 mbps. The download is three times better than we had before, but I’d like it to at least match the upload. I’m not sure what’s causing that problem, but I’ll have to try a few things to fix it this coming week.

The TV side of things is going very well so far. The Ceton PCI tuner is working just fine for now, but I’ll still probably upgrade to the new HD Homerun Prime when it comes out. I have the Ceton card in my living room computer, connected to the TV. It runs NextPVR which contains a client for local use and a server that other devices on the network can connect to.
It’s a very powerful program, with lots of options for customization. In the living room, we just use the local NPVR client. I didn’t realize that cable TV services don’t transmit program guide data like the over-the-air service does. The Schedules Direct service is supported by NPVR, with fairly easy set up. It costs $25 per year, but, to me, that’s very reasonable for the convenience.

I was originally planning to use Emby with the NPVR plugin on the server side and the Emby Roku app on the client side. Quite frankly, it sucked. It just dumped all 1200 channels the tuner card sees into a menu with no options to sort or filter them. When I clicked a channel to watch, it didn’t work either. It’s a small caveat, but to use the live TV function of Emby, you have to pay a subscription fee of $4.99 per month, $54 per year, or $119 for life. So I had to go back to the drawing board.

I decided to try out Kodi on my Raspberry Pi server. I installed the NPVR add-on and adjusted some settings. It kind of worked. The guide was perfect, but playback was a little wonky. The audio was fine, but the video would stutter or freeze. I figured it was good enough and I could fix the problem. I ordered a new Raspberry Pi 3B+ and set it up with OSMC. OSMC is a fork of Debian with Kodi preinstalled. I installed it on the Pi, and then velcro’d the Pi to the back of the TV. After a little bit of setup, it was working perfectly. The guide looked just like NPVR, live TV worked without any catches and watching recordings was great. I’m extremely satisfied with the setup.

There’s only one small thing left to do; add a remote control. In the living room I have a Logitech K400+ couch keyboard, which is great for changing app settings, launching games and light web browsing, but it’s really clunky and unintuitive for watching TV. A regular remote control would be ideal. I remembered the new computer my dad got for Christmas 2006. It was a Dell XPS 410, which had a novel for the time TV tuner card. This meant it came with Windows XP Media Center Edition, and a remote control. The remote had every button you need, but none you don’t, with a very solid and high quality feel. To my surprise, I was able to track down two new in box examples on eBay. Set up with NPVR should be a breeze, because it has native support for these media center edition remotes. I also discovered Kodi has an MCE remote add-on, so hopefully set up should be easy there too. The first one comes tomorrow, so I’ll find out soon.

While the internet service so far is a tad disappointing, I’m totally thrilled with the TV. This setup with a cable card tuner inside an HTPC with client computers around the house is something I’ve wanted since not long after we opened that new computer over a decade ago.