Monday, December 16, 2019

Installing Mythtv on a Raspberry PI 4

How I installed Mythtv on my RPI 4

The purpose of this blog is to create a repeatable set of instructions so I can duplicate my basic installation of Raspbian Buster and mythtv on a Raspberry PI 4 so I can start my tests with the same baseline every time.

The hardware is:
  • Raspberry Pi 4 with 4GB DRAM from Canakit as a starter kit.
  • StarTech.com SATA to USB Cable - USB 3.0 to 2.5” SATA III Hard Drive Adapter
  • Samsung 860 QVO 1TB Solid State Drive (MZ-76Q1T0) V-NAND, SATA 6Gb/s
  • SiliconDust HDHomeRun Connect Quatro tuner
The kit had a microSD card, HDMI cable, powers supply, and a case with fan.

  1. It helps keep things stable with your system if you set your AP/router to automatically assign the same IP to a device each time it boots. Having the HDHR Quatro and the RPI 4 always have their same IP each time they boot solves a lot of problems before they happen.
  2. Download the Raspbian Buster with Desktop. (2020-02-13-raspbian-buster.zip)
  3. Use balenaEtcher to flash the zip onto the microSD
  4. Install the MicroSD into the RPI 4
  5. Install the SATA SSD into the SATA to USB Cable and plug the cable into a USB3 slot
  6. Plug in a HDMI TV and Keyboard/mouse
  7. Turn on the RPI 4
  8. The boot process walks through setup of region, language, Screen overscan, WiFi, and updates. I ignored the WiFi since I'm using wired LAN.
  9. Reboot
  10. Since my TV is 4K UHD and I want only 1080P HD because of the Mythtv recording types for OTA 1080i and 720P, it works better for me to resize the screen using Preferences -> Screen Configuration and set the screen to 1920x1080 60P.
  11. Just in case, there are issues with some USB3 SATA converters which adversely affect disk performance on Pi4. See https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=245931&hilit=uas
  12. For me this came down to adding the text usb-storage.quirks=aaaa:bbbb:u  to my /boot/cmdline.txt at the beginning of the line of parameters. The link above tells you how to find your specific aaaa:bbbb.
  13. From the Mythtv Forum I used a script to setup the rootfs on the SATA SSD for speed and reliability using a script found in this post pi-SDtoHD-helper.sh. The boot partition is still on the microSD card.
  14. Unmount the SSD if it was mounted.
  15.  Run the script: sudo ./pi-SDtoHD-helper.sh -d /dev/sda
  16.  Reboot and note the rootfs is on the SSD using lsblk.
  17. Since by default the screen will blank every so often you need to install the Screen Saver just so you can disable it.
  18. So I did: sudo apt install xscreensaver.  I needed to reboot at this point for Screensaver to work properly.
  19. To install mythtv you need to refer to the Mythtv wiki for Raspberry PI wiki for Raspberry_Pi
  20. Using sudo raspi-config I setup the gpu memory split to 320. While in raspi-config I also set the interface option of SSH to be enabled and the Boot option of Wait for Network since I'm using a networked tuner and sometimes do maintenance with ssh.  Now reboot.
  21. EDIT: Setting audio is still a work in progress. What I've documented below works for Stereo and 5.1 under some conditions. If I don't create the .asoundrc file I have to select audio device ALSA:hw:CARD=ALSA,DEV=2 to get 5.1 working with Digital Audio Capabilities E-AC-3 being the only one checked.
  22. Since I'm on a RPI 4 I only had to setup the .asoundrc file in the Digital Audio with ALSA section by cutting and pasting into $HOME/.asoundrc from the wiki text.
  23. Follow the instruction in the Mythtv wiki for Mythtv Light MythTV Light
  24. I used mythtv v30 so I: sudo nano /etc/apt/sources.list and added the line for version 30 for Buster.
  25. I did the wget instruction listed next.
  26. Next I did the sudo apt update and sudo apt install mythtv-light
  27. At this point the mythtv frontend is installed so now I want all the stuff needed for the backend. There is a helper script on the forum that will do all this. Look at: mythbackend-helper
  28.  So I did  ./pi-mythbackend-helper.sh   (Script has sudo commands when needed so run as 'pi')
  29. After the script ends you need to reboot and do the mythtv-setup work.
  30. I needed to disable the CEC remote stuff and add that option to some commands in the application menu.
  31. So in Application Menu (Raspberry Icon) look for Sound and Video -> Mythtv Frontend, then right click on it to bring up the properties.  Add -O libCECEnabled=0 to the end of the command line in Desktop Entry tab.
  32. In Application Menu (Raspberry Icon) look for Preferences -> Mythtv Backend Setup, then right click on it to bring up the properties.  Add -O libCECEnabled=0 to the end of the command line in Desktop Entry tab.  Also remove the @env@ from the start of the command line.
At this point I'm ready to setup the backend.  My first setup will be for OTA EPG Guide Video source using SiliconDust HDHR tuners. Then I'll add a section on using a Video source for XMLTV EPG guides.

Mythtv-setup for HDHR tuners with OTA EPG Program Guide


  1. Run the mythtv-setup from the Application menu and start with the General settings
  2. In Host Address Backend Setup, set Security PIN (required) to "0000"
  3. In Capture cards I created 4 new tuners, all set for HDHomeRun Networked Tuner. I selected the same Tuner IP address for all 4 since my HDHR is a Quatro and has 4 tuners. If you only have one HDHR box, then you'll only see one HDHR Tuner IP to select.
  4. On the first tuner I set Record Options -> Use HD HomeRun for active EIT scan to selected, but set it to Unselected for the other 3 tuners. This helps balance the EPG scanning vs. the locked tuners for other applications.
  5. In Video Source, I created 1 new source named OTA and for Grabber I selected Transmitted guide only (EIT)
  6. In Input connections, I edited the first input. I selected MPEG2TS in Input name list. In Display Name I put HDHR1.  In Video Source I selected OTA and then scanned for channels.
  7. Once the Scan was complete I inserted all, exited and saved.
  8. I setup the other 3 Input connections but did not run scan for them. They should be set the same except for the Display name where I used HDHR2-4.
  9. In Channel Editor I made some channels not visible and saved.
  10. In Storage Groups I set the Default to /srv/mythtv/recordings and DB Backups to /srv/mythtv/db_backups
  11. Since I'm running the setup as user 'pi' it complained on exit about file permissions on some test files. So I did sudo chmod 777 /srv/mythtv/recordings  and sudo chmod 777 /srv/mythtv/db_backups
  12. Start mythtv-backend by: sudo systemctl start mythtv-backend
  13. Now you can run mythtv frontend from the Applications Menu
  14. Once in the frontend I went to setup and changed:
    1. In Setup Wizard -> Audio Configuration I selected ALSA:mythtv:CARD=ALSA
    2. I also selected Dobly Digital, etc and 5.1 Speakers.
    3. In Video I selected OpenMax Normal
  15. At this point video and audio will work from the tuners. My optional settings are:
    1. In General -> Shutdown/Reboot Settings -> Customize exit menu options I chose "Show quit"
    2. In Theme Chooser I chose Mythbuntu 30.1
    3. In Video -> Playback -> General Playback -> Automatically mark a recording as watched to selected
    4. In Video -> Playback -> General Playback -> Action on playback exit to Always prompt (excluding Live TV)
    5. In Video -> Playback Groups -> Default Group -> Skip ahead to 60 and Skip back to 15.
  16. I don't run Commercial flagging since that doesn't work well for my usually recorded programs so I edit the default recording rules to not post process commercial flagging.
  17. Since I use a bluetooth remote instead of a CEC enabled remote I need to pair that remote by clicking on the bluetooth icon in the menu bar at the top right.

Change to using an EPG from Schedules Direct via XMLTV json.

With the RPI 4 in the state as setup above I started this sequence of instructions to switch from OTA to Schedules Direct for my EPG.

  1. Switch to user 'mythtv' by: sudo su mythtv
  2. Follow the help on the mythtv xmltv wiki page at  https://www.mythtv.org/wiki/XMLTV#Setup_with_tv_grab_zz_sdjson_sqlite
  3. Run the commands: 
    1. tv_grab_zz_sdjson_sqlite --manage-lineups --config-file $HOME/.mythtv/SD.xmltv
    2. Enter login info for Schedules Direct
    3. Enter 4 to initialize the database
    4. Take the defaults and exit.
  4. Run the command:
    1. tv_grab_zz_sdjson_sqlite --configure --config-file $HOME/.mythtv/SD.xmltv
      • Answer yes to the lineup you want to use and no to the others, then take the defaults and exit
    2. Run the commands:
      1. tv_grab_zz_sdjson_sqlite --days 0 --config-file $HOME/.mythtv/SD.xmltv
      2. tv_grab_zz_sdjson_sqlite --manage-lineups --config-file $HOME/.mythtv/SD.xmltv
      3. Accept the default for my lineup and select option 5, 1, then 5.
      4. Now go through and pick yes or no on the channels you want data on.
      5. You may have to do the option 5 again if you missed a channel or selected wrong,
      6. exit
    3. Switch back to user 'pi' by :exit
    4. Stop Mythtv backend by: sudo systemctl stop mythtv-backend
    5. Run the mythtv-setup from the Applications Menu
    6. In General -> Job Queue (Backend-Specific) -> I deselected Allow commercial Jobs and Allow transcoding jobs. (not needed for me)
    7. In General -> Program Schedule Downloading Options -> Automatically update program listings -> Guide Data Program execution start/end I set them to 2 and 5
    8. In General -> Program Schedule Downloading Options -> Automatically update program listings -> Run guide data program at time suggested by the grabber I deselected.
    9. On Capture cards deselect the "Use HD HomeRun for Active EIT scan" in Recording Options for any tuner you had it enabled on.
    10. In Video Sources Delete all video sources. Then add a New video source.
    11. In the Video Source make the Video source name match what was done in XMLTV setup which is "SD"
    12. Select Listing grabber to be Multinational (Schedules Direct JSON web services with SQLite...
    13. Save and exit.
    14. In Input Connections go through each and select Video Source "SD" and only do the scan in the first Input Connection.
    15. In Channel Editor you may need to revisit any changes done before as the rescan will have undone them.
    16. Exit
    17. Restart mythtv-backend with: sudo systemctl start mythtv-backend
    18. The next step may not be necessary because on my RPi4 starting the mythtv-backend.service triggers the mythfilldatabase to run.  So you may want to wait for 5 minutes to see if the EPG fills automatcially.
    19. Switch back to user 'mythtv' and run "mythfilldatabase"
    20. Once mythfilldatabase completes, exit back to user 'pi'
    21. Run the mythfrontend from the Application Menu and see how the guide has changed.  18 days of data.