====== Watching TV over the air on GNU/Linux ====== The Dutch public broadcasting authority allows us to stream public TV channels from their web site. However, those streams have some downsides: they're often laggy and low-bandwidth, but the biggest problem is that they require people to install either Widevine, Flash or Silverlight, all of which are pretty horrible security risks. (Yes, there are ways around this with ''youtube-dl'' and ''mpv'', but they may break on any occasion.) ---- \\ ==== DVB-T receivers ==== To watch those channels without having to install malware, the first thing that came to mind was DVB-T, which transmits the public TV channels as free-to-air streams. One problem: DVB-T reception requires a TV. It would be nice to watch those streams on displays already there: computer monitors connected to Debian machines. Enter the Realtek RTL2832. The GNU/Linux support of TV tuners is generally very decent, so you shouldn't worry too much about incompatibility. Firmware blobs, however, are often needed. But the RTL2832 does not require any blobs. All you need is a little antenna near a window and you're set. ---- \\ ==== Software installation ==== Watching DVB streams doesn't require a lot of special software: merely VLC and the //dvb-apps// package. sudo apt install dvb-apps vlc vlc-plugin-zvbi Scan for channels: scan /usr/share/dvb/dvb-t/nl-All -o zap -x 0 | tee channels.conf This creates a channel list in the working directory. (Needless to say, the ''nl-All'' file should only be used if you live in the Netherlands. Channge it accordingly.) On some GNU/Linux distributions, you may encounter a message like ''"ERROR: cannot parse'[CHANNEL]"''. In that case, you have to use the legacy channel lists: scan /usr/share/dvb/dvb-legacy/dvb-t/nl-All -o zap -x 0 | tee channels.conf If you have an RTL2832 on a recent kernel, scanning might fail or not return anything if you have the ''rtl2832_sdr'' module loaded. So unload it first: sudo rmmod rtl2832_sdr The output of a correct ''channels.conf'' file looks something like this: NPO1:474000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_1_2:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:7011:7012:1101 NPO2:474000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_1_2:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:7021:7022:1102 NPO3:474000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_1_2:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:7031:7032:1103 ---- \\ ==== Watching the streams ==== Once you have a list, you can simply drag the ''channels.conf'' file into a VLC window, which automatically converts it to a playlist. Press //Ctrl + Y// and save it as ''~/Videos/TV.xspf'' (or whatever), and all you have to do is click the playlist and switch channels with the ''Previous'' / ''Next'' buttons. If you're looking for a fancier GUI solution, you might want to check out [[https://launchpad.net/me-tv|MeTV]]. It can scan for channels on its own, but you can also import your ''channels.conf'' file. MeTV offers EPG viewing and MPEG stream recording (including timers). ----