MythTV

Construction de la page en cours

MythTV est un logiciel libre et open source distribué sous GPL v2 pour Linux et OSX, transformant un ordinateur en magnétoscope numérique et en centre de divertissement multimédia.

C'est un système qui permet de programmer l'enregistrement d'émissions de télévision à l'aide d'un guide électronique des programmes (EPG), et de regrouper des fonctions telles que la navigation sur le Web, la lecture de DVD, le visionnement de photos numériques et un lecteur audio numérique. Les fonctionnalités de timeshifting (pause du direct ou retour arrière) sont également de la partie.

Je l'utilise depuis la version 0.18 (fev 2005) avec succès.

Cette suite logiciel s'installe sur une ou plusieurs machine(s) équipé(és) de cartes d'acquisitions analogique ou numérique (type DVB-{T,C,S} en PCI ou USB) pour enregistrer les émissions de TV. Le démon en charge de réaliser ces opérations est appelé “backend”. Plusieurs “backend” peuvent se répartir des tâches lourdes telles que des transcodes de vidéos ou d'exécuter des opérations de détection de publicités. Le stockage peut également être reparti entre les différentes instances.

L'interface graphique, appelée “frontend”, est conçues pour s'afficher sur une télévision et être pilotée avec une télécommande ou un smartphone.

La communication entre les différents éléments s'effectue via un protocole réseau spécifique. Plusieurs “frontends” peuvent fonctionner en même temps interrogeant le même “master backend”.

MythTV est écrit en C++ avec Qt5 et utilise une base de donnée Mysql pour stocker le paramétrage et données.

Architecture Mythtv avec des backend et frontend

L'IHM du “frontend” permet la navigation dans les enregistrements ainsi que leurs visionnages, le parcours des photos et l'écoute de la musique. L'écran d'accueil propose ces différentes actions :

Ecran d'accueil

L'écran de parcours des enregistrements offre un classement par émissions et par catégories :

Vue des enregistrements

Je le pilote à l'aide d'une télécommande IR couplé avec un récepteur sur port série, ça marche très bien 8-) :

Récepteur infrarouge

  Télécommande Hauppauge

MythTV est capable d'exploiter différents type de cartes tuner compatibles V4L-DVB. Une fois les cartes reconnues et ajoutées dans MythTV, il faut leurs associer un guide des programmes pour connaitre les heures de diffusion des programmes et par conséquent les enregistrer. En branchant plusieurs cartes tuner, MythTV est en mesure d'enregistrer des émissions sur des chaines différentes : une par tuner (ou presque, voir le multirec ci dessous).

J'ai utilisé plusieurs modèles de carte tuner :

PVR 350
  • Réception : Analogique hertzien
  • Tuner : 1
  • Connectique : PCI
Carte Hauppauge PVR 350
Nova-T-500
  • Réception : Numérique hertzien (DVB-T)
  • Tuners : 2
  • Connectique : PCI
Carte Hauppauge NOVA-T-500
SATELCO EasyWatch
  • Réception : Numérique câble (DVB-C)
  • Tuner : 1
  • Connectique : PCI
Carte SATELCO EasyWatch PCI DVB-C
Pinnacle PCTV 2000e
  • Réception : Numérique hertzien (DVB-T)
  • Tuners : 2
  • Connectique : USB 2.0
Dongle USB Pinnacle PCTV 2000e

Le nombre de minutes avant et après l'heure de début et de fin d'une émission peut être paramétré pour que l'enregistrement commence en avance ou s'arrête en retard. Cela permet de prendre en compte les aléas des pubs. Dans mon cas, j'ai paramétré une avance de 10 min et 15 min de surplus.

Caractéristiques des flux vidéos

Le débit d'enregistrement est d'environ 1,6 Go / h pour une chaine HD.

Voici les propriétés d'un flux vidéo :

Input #0, mpegts, from 'Grey s Anatomy - 2017-05-24, 21-36 - Les fantomes du passe.mpg':
  Duration: 00:52:27.03, start: 32135.888533, bitrate: 3969 kb/s
  Program 1 
    Stream #0:0[0x78]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 24.67 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x82](fra): Audio: eac3 ([135][0][0][0] / 0x0087), 48000 Hz, stereo, fltp, 128 kb/s
    Stream #0:2[0x83](qaa): Audio: eac3 ([135][0][0][0] / 0x0087), 48000 Hz, stereo, fltp, 128 kb/s
    Stream #0:3[0x84](qad): Audio: eac3 ([135][0][0][0] / 0x0087), 48000 Hz, stereo, fltp, 96 kb/s
    Stream #0:4[0x96](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)
    Stream #0:5[0x97](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:6[0xaa]: Unknown: none ([5][0][0][0] / 0x0005)

Multirec

Une des forces de MythTV est sa fonctionnalité multirec : celle ci permet l'enregistrement de plusieurs chaines sur un même tuner tant que ces chaines sont sur le même transpondeur DVB. En pratique, cela permet d'enregistrer M6 et 6ter en n'utilisant qu'un seul tuner et TMC sur un second. Très pratique est flexible !

Ce fonctionnement est possible car lorsqu'une application demande à un tuner de se caler sur fréquence, le flux DVB retourné contient toute les chaines associées à cette fréquence, charge à l'application de filtrer sur les bons PID. Il suffit ainsi de récupérer plusieurs flux simultanément.

Voici la liste des chaînes ainsi que le transpondeur auxquels elles sont associées :

Chaine Transpondeur
C8 R2 - NTN
BFM TV
i>TELE
D17
Gulli
TF1 R6 - SMR6
NRJ12
TMC
NT1
LCP
HD1 R7 - MHD7
Chérie 25
L'Equipe 21
RMC Découverte
NUMERO 23
(Suite)
Chaine Transpondeur
France 2 R1 - SGR1
France 4
France Ô
F3 Pays de la Loire
Telenantes
M6 R4 - Multi 4
W9
Arte
France 5
6ter

Cette liste permet de savoir quelles sont les chaînes qui peuvent être enregistrées en même temps sur un seul tuner.

Frontend

Le frontend s'installe avec le paquet suivant :

sudo apt-get install mythtv-frontend

X11 Autologin

Pour que la session graphique se lance automatiquement au démarrage, plusieurs solutions sont disponibles : utiliser un gestionnaire de login graphique type lightdm, xdm, gdm… ou le faire à la main. J'ai, bien sûr, choisi la dernière solution 8-). Cela consiste à démarrer xinit avec le user voulu, c'est un lanceur X exécutant le script ~/.xinitrc qui lance les différentes applications que l'on souhaite. Celui-ci doit être bloquant : tant qu'il ne rend pas la main, X tourne. J'ai choisi le gestionnaire de fenêtre openbox pour sa légèretée.

Pour commencer, supprimer le(s) gestionnaire(s) de login :

sudo apt-get remove --purge lightdm xdm gdm

Créer un service systemd, celui ci sera en charge de lancer xinit avec le user mythtv au boot :

/etc/systemd/system/xinit-login.service
[Unit]
After=systemd-user-sessions.service
 
[Service]
ExecStart=/bin/su mythtv -l -c /usr/bin/xinit -- VT08
ExecStop=/usr/bin/pkill openbox
 
[Install]
WantedBy=multi-user.target

Prendre en compte le service

sudo systemctl daemon-reload

Le fichier ~/.xinitrc est un script shell contenant tout les programmes à lancer :

  • chargement de la configuration utilisateur de la carte NVidia
  • gestion du fond d'écran et de l'économiseur d'écran
  • lancement du mapper des touches de télécommande
  • démarrage du frontend mythtv
  • exécution du gestionnaire de fenêtre openbox

J'ai repris celui que j'ai mis en place pour le boot PXE :

~/.xinitrc
# fait disparaitre le curseur
unclutter -idle 0.1 -root -regex -notclass 'Iceweasel|XTerm|Gcalctool|Gthumb' &
 
# charge la configuration utilisateur du driver de carte graphique
nvidia-settings -l
 
# désactive l'extinction automatique de l'écran pour l'économie d'énergie
xset -dpms
 
# écran de veille
xscreensaver &
 
# fond d'écran
xloadimage -onroot -center ~/bg.png
 
# mapping des touches de la télécommande
(sleep 30 ; irexec -d ) &
 
# ftrontend mythtv
mythfrontend --logpath /var/log/mythtv &
 
# gestionnaire de fenêtre
openbox

Installer les packages nécessaires :

sudo apt-get install -y openbox xloadimage unclutter xscreensaver-gl lirc

L'activer :

sudo systemctl enable xinit-login.service

Le démarrer :

sudo systemctl start xinit-login.service