Cartes tuners

MythTV est capable d'exploiter différents type de cartes tuner compatibles V4L-DVB (DVB-T par exemple). 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 plus, voir le multirec ci dessous).

Voici les différents modèles que j'ai utilisé :

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

Hauppauge PVR 350

11/2005 : j'ai acheté une carte Hauppauge PVR-350 afin d'utiliser sa sortie S-Vidéo pour la brancher sur la prise péritel de la TV. La PVR 350 est une carte PCI intégrant un encodeur et un décodeur matériel mpeg2 avec entrée et sortie analogiques. Il suffit de lui envoyer un flux mpeg2 directement sur le bon device et elle le décode en l'affichant sur sa sortie. Elle peut être utilisé en tant que carte graphique “traditionnelle” avec une résolution pour la TV de 720×576 mais sans accélération 3D. Seul le mode XV est disponible.

Carte Hauppauge PVR 350

Tout en conservant l'utilisation “normale” de la tour avec un bureau e16, j'ai configuré un 2e serveur X avec un driver ivtv sur le display :1 utilisant cette carte. Il affichait l'interface Mythtv.

Le choix de cette carte était guidé par le manque de stabilité de la sortie S-Vidéo des drivers libres des cartes ATI Radeon et ma non-confiance dans les drivers propriétaires des 2 marques NVidia et ATI.

Hauppauge NOVA-T-500

04/2007 : pour enregistrer des émissions de télévision sur la TNT, j'ai opté pour une carte sur port PCI : Hauppauge WinTV-NOVA-T-500.

Carte Hauppauge NOVA-T-500

Cette carte est composée de 2 tuners USB DVB-T et d'un hub USB 2.0 avec un adaptateur PCI, le tout sur un même circuit imprimé. Le noyau reconnait chacun de ses composants de manière indépendante. C'est une astuce du constructeur qui vend d'autre produit sous forme de clé USB avec ce même tuner.

Le double tuner permet d'enregistrer sur une chaine et d'en regarder une autre. Très confortable et de fait, indispensable pour la suite :).

SATELCO EasyWatch

01/2008 : suite à un déménagement, le nouvel appart était câblé et donc plus de DVB-T mais du DVB-C. J'ai fait l'acquisition de 2 cartes PCI SATELCO EasyWatch PCI DVB-C permettant de recevoir la TV numérique par le câble.

SATELCO EasyWatch PCI DVB-C

Elles sont reconnues sans problème par le noyau et Mythtv sait également la piloter.

Pinnacle PCTV 2000e

03/2010 : j'ai installé un dongle USB Pinnacle PCTV 2000e : cette carte reçoit la télévision via une antenne rateau à la norme DVB-T via un double tuner.

Le service mythbackend qui tournait sur Olive a également été déplacé sur Popeye afin qu'il prenne une place centrale dans mon infrastructure.

Dongle USB Pinnacle PCTV 2000e double tuner dvb-t

Voici les logs du noyau :

[   11.669176] dvb-usb: found a 'Pinnacle PCTV 2000e' in cold state, will try to load a firmware
[   11.750393] usb 1-1: firmware: direct-loading firmware dvb-usb-dib0700-1.20.fw
[   12.323901] dvb-usb: found a 'Pinnacle PCTV 2000e' in warm state.
[   12.324161] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   12.324425] DVB: registering new adapter (Pinnacle PCTV 2000e)
[   12.642151] usb 1-1: DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)...
[   12.851189] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   12.851493] DVB: registering new adapter (Pinnacle PCTV 2000e)
[   13.046972] usb 1-1: DVB: registering adapter 1 frontend 0 (DiBcom 7000PC)...
[   13.260600] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-1/rc/rc0/input15
[   13.261157] rc rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-1/rc/rc0
[   13.261437] dvb-usb: schedule remote query interval to 50 msecs.
[   13.261460] dvb-usb: Pinnacle PCTV 2000e successfully initialized and connected.
[   13.262131] usbcore: registered new interface driver dvb_usb_dib0700
Fin de vie

02/2018 : après 7 ans de bon et loyaux service ma carte double tuner TNT a rendu l'âme. Elle présentait déjà des signes de faiblesse depuis 2 ans car le changement de fréquence ne s'effectuait plus correctement : il fallait donner l'ordre 2 fois. A ce titre, j'avais modifié et recompilé le backend de Mythtv pour ajouter un double changement de fréquence.

La fin de vie de cette carte a provoqué des plantages du noyau avec une augmentation du nombre de process bloqué sur des ressources USB, j'ai eu un load de 164 :dead:. J'ai mis quelques temps à comprendre d'où ça venait…

Load de 164...

Hauppauge WinTV-dualHD

02/2018 : le renouveau est dans une carte USB de marque Hauppauge, modèle WinTV-dualHD. Elle est bi-tuner et compatible DVB-T, DVB-T2 (la prochaine norme de diffusion de la télévision hertzienne) et DVB-C.

Hauppauge WinTV-dualHD

Voici les logs du noyau lors de son branchement :

Feb 23 20:45:50 popeye kernel: usb 1-5.1: new high-speed USB device number 12 using xhci_hcd
Feb 23 20:45:50 popeye kernel: usb 1-5.1: New USB device found, idVendor=2040, idProduct=0265
Feb 23 20:45:50 popeye kernel: usb 1-5.1: New USB device strings: Mfr=3, Product=1, SerialNumber=2
Feb 23 20:45:50 popeye kernel: usb 1-5.1: Product: dualHD
Feb 23 20:45:50 popeye kernel: usb 1-5.1: Manufacturer: HCW
Feb 23 20:45:50 popeye kernel: usb 1-5.1: SerialNumber: 0013963409
Feb 23 20:45:50 popeye kernel: em28xx 1-5.1:1.0: New device HCW dualHD @ 480 Mbps (2040:0265, interface 0, class 0)
Feb 23 20:45:50 popeye kernel: em28xx 1-5.1:1.0: DVB interface 0 found: isoc
Feb 23 20:45:50 popeye kernel: em28xx 1-5.1:1.0: chip ID is em28174
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: EEPROM ID = 26 00 01 00, EEPROM hash = 0xefe5c2c8
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: EEPROM info:
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0:         microcode start address = 0x0004, boot configuration = 0x01
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0:         AC97 audio (5 sample rates)
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0:         500mA max power
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0:         Table at offset 0x27, strings=0x0e6a, 0x1888, 0x087e
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: Identified as Hauppauge WinTV-dualHD DVB (card=99)
Feb 23 20:45:51 popeye kernel: tveeprom: Hauppauge model 204109, rev B3I6, serial# 13963409
Feb 23 20:45:51 popeye kernel: tveeprom: tuner model is SiLabs Si2157 (idx 186, type 4)
Feb 23 20:45:51 popeye kernel: tveeprom: TV standards PAL(B/G) NTSC(M) PAL(I) SECAM(L/L') PAL(D/D1/K) ATSC/DVB Digital (eeprom 0xfc)
Feb 23 20:45:51 popeye kernel: tveeprom: audio processor is None (idx 0)
Feb 23 20:45:51 popeye kernel: tveeprom: has no radio, has IR receiver, has no IR transmitter
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: dvb set to isoc mode.
Feb 23 20:45:51 popeye kernel: usbcore: registered new interface driver em28xx
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: Binding DVB extension
Feb 23 20:45:51 popeye kernel: i2c i2c-11: Added multiplexed i2c bus 12
Feb 23 20:45:51 popeye kernel: si2168 11-0064: Silicon Labs Si2168-B40 successfully identified
Feb 23 20:45:51 popeye kernel: si2168 11-0064: firmware version: B 4.0.2
Feb 23 20:45:51 popeye kernel: si2157 12-0060: Silicon Labs Si2147/2148/2157/2158 successfully attached
Feb 23 20:45:51 popeye kernel: dvbdev: DVB: registering new adapter (1-5.1:1.0)
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: DVB: registering adapter 0 frontend 0 (Silicon Labs Si2168)...
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: DVB extension successfully initialized
Feb 23 20:45:51 popeye kernel: em28xx: Registered (Em28xx dvb Extension) extension
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: Registering input extension
Feb 23 20:45:51 popeye kernel: Registered IR keymap rc-hauppauge
Feb 23 20:45:51 popeye kernel: rc rc0: 1-5.1:1.0 IR as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/rc/rc0
Feb 23 20:45:51 popeye kernel: input: 1-5.1:1.0 IR as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/rc/rc0/input19
Feb 23 20:45:51 popeye kernel: em28xx 1-5.1:1.0: Input extension successfully initialized
Feb 23 20:45:51 popeye kernel: em28xx: Registered (Em28xx Input Extension) extension

Finalement je l'ai rendu car trop d'instabilités :

  • une fois sur 2, le signal n'est pas reçu correctement : je n'arrive pas à déterminer si c'est lié à un bug dans les drivers ou si c'est matériel :'(;
  • le 2e tuner n'est pas encore reconnu en version 4.14 du noyau, mais devrait arriver rapidement…

RTL2832

03/2018 : en remplacement de la clé précédente, j'ai testé le dongle USB utilisé dans mes expériences de réception radio pour recevoir la TNT et elle marche bien. Comme cette carte est mono tuner, à la différence des précédentes, j'en ai ajouté une 2e pour revenir au confort de pouvoir enregistrer plusieurs chaines simultanément.

RTL2832

09/2017 : à chaque fois que j'interviens autour du serveur, si je touche aux câble de l'antenne, la réception se dégrade facilement. Les connecteurs en plastique sont fragiles et trop sensibles aux mouvements. Pour régler l'ensemble, il faut manipuler les connecteurs et câbles pour trouver la position qui offre le meilleur contact. De plus, pour couronner le tout, lorsque j'approche la main du récepteur, la réception varie également…

Le récepteur utilisé est un double tuner : il faut donc un T suivi de 2 petits fils allant jusqu'aux connecteurs de la carte. Mais il y a 2 connecteurs de types différents : un “gros” comme nous avons l'habitude sur nos télés ainsi qu'un petit (format MCX).

Voici le montage initial :

Connecteur d'antenne en T très sensible aux mouvements

L'outil dvbtune permet de mesurer la qualité du signal reçu en lui donnant une fréquence sur laquelle se positionner :

dvbtune -c 0 -m -tm 8 -cr AUTO -gi 8 -f 738000000

les options importantes sont -m pour activer le monitoring et -f pour indiquer la fréquence exprimée en Hertz.

Une bonne réception produit une sortie de la forme suivante :

FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNC
Signal=27967, Verror=0, SNR=203dB, BlockErrors=0, (S|L|C|V|SY|)

Les éléments importants sont les suivants :

  • Signal : force du signal reçu. Doit être supérieur à 25000;
  • Verror : nombre d'erreur de décodage des blocs vidéos. Doit être proche de 0;
  • SNR : représente le rapport du signal sur le bruit exprimé en décibel. Doit être supérieur à 220 dB;
  • (S|L|C|V|SY|) : représente les différents type de bloc MPEG2 décodés. La présence de la lettre V indique que la vidéo est bien décodée.

Lorsque le signal est mauvais, la sortie est de la forme :

FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_SYNC
Signal=0, Verror=2097151, SNR=20dB, BlockErrors=0, (S|L|C|SY|)

J'ai remplacé les connecteurs par des fiches BNC, elles offrent un contact constant et rapide à fixer. Sur eBay, il y a tout ce genre de matériel :

Embouts de câble BNC Embouts de câble BNC
Connecteur en T BNC Connecteur en T BNC
Adaptateur MCX <=> BNC Adaptateur MCX ⇔ BNC


Une fois l'ensemble monté, j'ai refait des mesures et constaté que la réception n'est plus sensible aux mouvements du câble et que le signal est même un peu plus fort. Voici le résultat :

Connecteurs d'antenne BNC

J'ai également testé l'outil tzap pour mesurer la qualité de réception :

tzap -r "France 2(GR1 B)"
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
reading channels from file '/home/user/.tzap/channels.conf'
Version: 5.11    FE_CAN { DVB-T }
tuning to 682000000 Hz
video pid 0x0078, audio pid 0x0082
status 00 | signal 0000 | snr 0000 | ber 0002ceeb | unc 25252525 |
status 1f | signal 0000 | snr 015d | ber 00000000 | unc 25252525 | FE_HAS_LOCK
status 1f | signal 0000 | snr 016c | ber 00000000 | unc 25252525 | FE_HAS_LOCK
status 1f | signal 0000 | snr 015f | ber 00000000 | unc 25252525 | FE_HAS_LOCK
status 1f | signal 0000 | snr 016d | ber 00000000 | unc 25252525 | FE_HAS_LOCK
status 1f | signal 0000 | snr 016f | ber 00000000 | unc 25252525 | FE_HAS_LOCK
status 1f | signal 0000 | snr 0152 | ber 00000000 | unc 25252525 | FE_HAS_LOCK

La première ligne est toujours fausse, la présence d'un ber proche de 0 et de FE_HAS_LOCK indique une réception satisfaisante du signal.