Table des matières
Voilà quelques années déjà que j'utilise un Lecteur Kiss pour lire des vidéos et écouter de la musique. Et puis un jour, sans prévenir, celui-ci à commencer à montrer des signes de faiblesse. Parfois c'était une lecture impossible de film, un autre jour la machine qui se figeait complétement. Du coup j'ai commencer à regarder se qu'il pouvait se faire. Je me suis essentiellement axé sur l'environnement Linux, car libre et ouvert il me permettra de le faire tranquillement évolué.
Le HTPC, ou HCPC ( Home Cinema PC ) sera un simple PC qui devra répondre à :
-
Ecouter de la musique (localement ou sur le Net)
-
Visionner des films
-
Voir la télévision
-
Voir des photos
-
Jouer
-
Contrôler sa maison
Le choix du matériel est particulièrement important pour mener à bien ce projet. Certaines cartes matérielles n'étant pas reconnues de manière optimale, voir pas reconnues du tout.
Pour ce qui me concerne j'ai justement un vieux ( 4/5 ans :) Shuttle ST61G4 que j'aimerai remplacer. Celui comporte:
-
Une carte vidéo intégrée ( Radeon 9100 IGP )
-
Une carte audio intégré ( IXP150 AC'97 Audio Controller )
-
Un port ethernet ( BCM4401 100Base-T )
-
4 ports USB 2.0
-
Un port Firewire
-
Une sortie TV-Out
-
Un Slot PCI (seulement)
-
Un Slot AGP
Pour l'instant je conserve le disque dur de 120Go et le graveur DVD qui ne sont pas particulièrement silencieux. On ne peux pas dire que le shuttle le soit non plus mais ça reste tolèrable. D'autres pistes sont à suivre :
-
Boitiers Silverstone ou Zalman
-
Alimentation Zalman
-
Ventilateur Noctua
Voir le quelques exemples de config ICI .
Pour recevoir la télévison j'ai fais l'acquisition d'une carte Hauppauge WinTV-NOVA-T PCI. Celle-ci est livrée avec une télécommande qui sera utile pour le contrôle à distance des différentes fonctions.
La distribution utilisée sera la Debian parce que ... c'est comme ça :)
Une toute autre distribution aurait fait l'affaire il faudra seulement en adapter les commandes.
Dans le domaine du Home Cinema, deux projets sont souvent mis en avant : MythTV et Freevo . L'un et l'autre répondent au cahier des charges.
Pour ma part j'ai choisi Freevo. Je changerai peut être d'avis mais je trouve un peu lourd d'installer/configurer une base de données Mysql pour faire fonctionner MythTV.
L'installation se fait très simplement sous Debian
Ajouter la ligne suivante au fichier
/etc/apt/sources.list
deb http://debian.geole.info/ etch main contrib non-free
suivi d'une mise à jour de la base des packages et de l'installation de freevo
apt-get update apt-get install freevo
Video output: X11
Output Resolution: 768x576
TV Standard : secam
Channel List: franc
Le fichier de config
/etc/freevo/freevo.conf
est ainsi créé. Nous pouvons le regénérer par un :
freevo setup
Et voilà freevo est installé :) Il suffit d'exécuter
'
freevo
' pour s'en convaincre.
Les menus sont là, il est possible de visionner un film, ecouter un morceau ... mais rien n'est encore correctement configurer.
La télévision ne fonctionne pas, la télécommande et les jeux non plus ..
Voyons voir comment configurer notre carte TNT ( Hauppauge WinTV-NOVA-T PCI ).
Je précise que dans le cas présent j'utilise un noyau 2.6.21.
dmesg | grep -E "tv|cx8" cx2388x cx88-mpeg Driver Manager version 0.0.6 loaded CORE cx88[0]: subsystem: 0070:9002, board: Hauppauge Nova-T DVB-T [card=18,autodetected] tveeprom 1-0050: Hauppauge model 90003, rev C2B0, serial# 2299369 tveeprom 1-0050: MAC address is 00-0D-FE-23-15-E9 tveeprom 1-0050: tuner model is Thompson DTT75105 (idx 110, type 4) tveeprom 1-0050: TV standards ATSC/DVB Digital (eeprom 0x80) tveeprom 1-0050: audio processor is None (idx 0)Pas tro tveeprom 1-0050: decoder processor is CX882 (idx 25) tveeprom 1-0050: has no radio, has IR receiver, has no IR transmitter cx88[0]: hauppauge eeprom: model=90003 input: cx88 IR (Hauppauge Nova-T DVB-T as /class/input/input3 cx88[0]/0: found at 0000:02:07.0, rev: 5, irq: 18, latency: 64, mmio: 0xeb000000cx88[0]/0: registered device video0 [v4l2] cx88[0]/0: registered device vbi0 cx88[0]/2: cx2388x 8802 Driver Manager cx88[0]/2: found at 0000:02:07.2, rev: 5, irq: 18, latency: 64, mmio: 0xec000000cx8802_register_driver() ->registering driver type=dvb access=shared CORE cx88[0]: subsystem: 0070:9002, board: Hauppauge Nova-T DVB-T [card=18] cx88[0]/2: cx2388x based dvb card DVB: registering new adapter (cx88[0]).
Si ce n'est pas le cas
modprobe cx88_dvb echo "cx88_dvb" >> /etc/modules
Bon, tout va bien notre carte est reconnue mais celle-ci n'est pas encore paramétrée pour recevoir la TNT.
Pour recevoir les signaux TNT il lui faut les fréquences des transpondeurs que l'on peut récupérer ici : http://www.linuxtv.org/cgi-bin/viewcvs.cgi//dvb-apps/util/scan/dvb-t/
Par exemple pour Nantes:
wget -O freq.txt http://www.linuxtv.org/cgi-bin/viewcvs.cgi/dvb-apps/util/scan/dvb-t/fr-Nantes?rev=1.2
scan freq.txt > channels.conf
Testons immédiatement ...
cp channels.conf ~/.mplayer/channels.conf
mplayer dvb://TF1 -vo x11
ou encore avec xine
cp channels.conf /home/dab/.xine/channels.conf
xine
On accède à la TNT en cliquant sur 'DVB'. Pour changer de chaine il faut tourner la roulette de la souris.
XMLTV va nous permettre de récupérer les programmes TV sur le Net.
apt-get install xmltv
XMLTV fourni
des scripts qui vont 'aspirer' pour nous les programmes TV. Pour la
France il s'agit de '
tv_grab_fr
'.
tv_grab_fr fourni avec XMLTV ne fonctionne plus. En effet celui-ci prend les informations sur telepoche.com or ce site change très souvent d'aspect. Il faut donc que le 'grabber' soit régulièrement mis à jour. Une version fonctionnelle de tv_grab_fr est téléchrable ici:
wget http://www.lahiette.com/biboobox/download/tv_grab_fr
chmod +x tv_grab_fr
Maintenant on télécharge les programmes TV:
tv_grab_fr --days 1 --slow --output /tmp/TV.xml
--slow permet de télécharger plus d'informations sur les programmes (description détaillée, critiques, acteurs, durée précise )
Pour activer la TNT sous Freevo il nous faut encore ajouter ces
quelques lignes au fichier
local_conf.py
XMLTV_FILE = "/tmp/TV.xml"
VIDEO_GROUPS[0].group_type = 'dvb'
TV_CHANNELS = [('C1.telepoche.com', 'TF1', 'TF1' ),
('C2.telepoche.com', 'France 2', 'France2' ),
('C3.telepoche.com', 'France 3', 'France3' ),
('C28.telepoche.com', 'France 4', 'France4' ),
('C7.telepoche.com', 'La cinq', 'France5' ),
('C4.telepoche.com', 'Canal+', 'CANAL' ),
('C5.telepoche.com', 'Arte', 'ARTE' ),
('C6.telepoche.com', 'M6', 'M6' ),
('C38.telepoche.com', 'W9', 'W9' ),
('C167.telepoche.com', 'Direct 8', 'Direct8' ),
('C9.telepoche.com', 'TMC', 'TMC' ),
('C169.telepoche.com', 'NRJ12', 'NRJ12' ),
('C168.telepoche.com', 'NT1', 'NT1' ),
('C170.telepoche.com', 'LCP', 'LCP' ) ]
Les
infos de TV_CHANNELS correspondent bien sur au contenu du fichier
/tmp/TV.xml
.
Ca serait sympa si l'on pouvait commander tout cela à la télécommande ... c'est possible :)
Etape suivante: enregistrer les programmes TV.
Pour enregistrer directement le flux DVB MPEG2 j'ajoute cela à
local_conf.py
:
VCR_CMD = ( CONF.mencoder + ' ' +
'dvb://%(channel)s' +
' -ovc copy -oac copy ' + # Direct stream copy
' -idx ' + # Fix idx
'-endpos %(seconds)s ' + # only mencoder uses this so do it here.
'-o %(filename)s ' ) # Filled in by Freevo
Et aussi le répertoire de stockage des vidéos
TV_RECORD_DIR = '~/video/'
VIDEO_SHOW_DATA_DIR = '~/video/'
Attention à la volumétrie occupée par les vidéos (2 à 3Go par heure d'enregistrement )
Pour réduire cet espace nous pouvons après enregistrement transformer les MPEG2 en Xvid/DivX.
mencoder FICHIER_INPUT -vf scale=512:384 -oac mp3lame -lameopts cbr:br=128 -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=900:vmax_b_frames=3:vhq:v4mv:keyint=300 -ffourcc divx -o FICHIER_OUTPUT.AVI
Celle que j'utilise est livrée avec cette carte TNT:
Lors de l'appui sur une touche de la télécommande cela génère un évènement au niveau noyau qui sera ensuite transmis au daemon lircd. Pour en connaitre le canal d'émission il nous suffit d'éxécuter la commande suivante :
cat /proc/bus/input/devices
...
I: Bus=0001 Vendor=0070 Product=9002 Version=0001
N: Name="cx88 IR (Hauppauge Nova-T DVB-T"
P: Phys=pci-0000:02:07.0/ir0
S: Sysfs=/class/input/input2
H: Handlers=kbd
event2
B: EV=100003
B: KEY=100fc312 214a802 0 0 0 0 18000 41a8 4801 9e1680 0 0 10000ffc
Dans mon cas il s'agit de l' event2 .
Nous allons le signifier à
lircd
dans son fichier
/etc/lirc/hardware.conf
:
# /etc/lirc/hardware.conf # # Arguments which will be used when launching lircd LIRCD_ARGS="" #Don't start lircmd even if there seems to be a good config file #START_LIRCMD=false #Try to load appropriate kernel modules LOAD_MODULES=true # Run "lircd --driver=help" for a list of supported drivers. DRIVER=" dev/input " # If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be # automatically used instead DEVICE=" /dev/input/event2 " MODULES="" # Default configuration files for your hardware if any LIRCD_CONF="" LIRCMD_CONF=""
La télécommande transmet les informations à travers le canal 2 mais comment le daemon lircd décode-t-il celles-ci.
C'est le fichier
/etc/lirc/lircd.conf
qui lui
fourni le moyen de s'y retrouver (
# Please make this file available to others
# this config file was automatically generated
# using lirc-0.7.1pre2(any) on Sat Sep 17 01:00:56 2005
#
# contributed by
#
# brand: lircd.conf.kernel-2.6.13.1.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
name hauppauge_nova_t_uk
bits 16
eps 30
aeps 100
one 0 0
zero 0 0
pre_data_bits 16
pre_data 0x8001
gap 135803
toggle_bit 0
begin codes
Power 0x0074
Go 0x0161
TV 0x0179
Videos 0x0189
Music 0x0188
Pictures 0x016F
Guide 0x016D
Radio 0x0181
Up 0x0067
Left 0x0069
Right 0x006A
Down 0x006C
OK 0x001C
Back 0x00AE
Menu 0x008B
VolumeUp 0x0073
VolumeDown 0x0072
PreviousChannel 0x019C
Mute 0x0071
ChannelUp 0x0192
ChannelDown 0x0193
Record 0x00A7
Stop 0x0080
Replay 0x00A8
Play 0x00CF
Skip 0x00D0
PreviousTrack 0x00A5
Pause 0x0077
NextTrack 0x00A3
1 0x004F
2 0x0050
3 0x0051
4 0x004B
5 0x004C
6 0x004D
7 0x0047
8 0x0048
9 0x0049
0 0x0052
Text 0x0184
Subtitles 0x0172
Red 0x018E
Green 0x018F
Yellow 0x0190
Blue 0x0191
end codes
end remote
Pour tester le fonctionnement de la télécommande, le daemon lircd est exécuter et le programme irw est à l'écoute:
/etc/init.d/lirc start
irw
En appuyant sur les touches de la télécommande on peut controler que tout fonctionne correctement.
0000000080010067 00 Up hauppauge_nova_t_uk
000000008001006a 00 Right hauppauge_nova_t_uk
000000008001006c 00 Down hauppauge_nova_t_uk
0000000080010069 00 Left hauppauge_nova_t_uk
000000008001001c 00 OK hauppauge_nova_t_uk
0000000080010071 00 Mute hauppauge_nova_t_uk
...
La prise en compte de la télécommande par freevo est simple à mettre en place :
touch /etc/freevo/lircrc
freevo makelircrc -w
Il est maintenant possible de tester le controle de freevo par la télécommande:
ircat --config=/etc/freevo/lircrc freevo
L'appui sur une touche fait apparaitre la commande correspondante.
Lirc permet aussi le controle de souris par la télécommande :)
C'est le daemon lircmd ( LIRC Mouse Daemon ) qui est chargé de géré
cela à travers son fichier de configuration
/etc/lirc/lircmd.conf
.
Sous Debian il faut supprimer la ligne #UNCONFIGURED et ajouter les lignes suivantes au fichier lircmd.conf
#
# lircmd config file
#
PROTOCOL IntelliMouse
# ACCELERATOR start max multiplier
ACCELERATOR 2 30 5
ACTIVATE * RESERVED
MOVE_N * 2
MOVE_NE * 3
MOVE_E * 6
MOVE_SE * 9
MOVE_S * 8
MOVE_SW * 7
MOVE_W * 4
MOVE_NW * 1
MOVE_IN * CH+
MOVE_OUT * CH-
BUTTON1_TOGGLE * 5
BUTTON1_TOGGLE * RADIO
BUTTON2_TOGGLE * VOL+
BUTTON3_TOGGLE * SOURCE
BUTTON1_CLICK * TV
BUTTON1_CLICK * VOL-
BUTTON3_CLICK * MUTE
# BUTTONx_CLICK, BUTTONx_UP, BUTTONx_DOWN are also possible
Pour que le serveur X puisse prendre en compte les entrées de lircmd, le fichier /etc/X11/xorg.conf doit être modifié :
Section "InputDevice"
Identifier "LIRC Mouse"
Driver "mouse"
Option "Device" "/dev/lircm"
Option "Protocol" "IntelliMouse"
Option "SendCoreEvents"
Option "Buttons" "5"
Option "ZaxisMapping" "4 5"
EndSection
Section "ServerLayout"
...
InputDevice "LIRC Mouse"
...
EndSection
La prise en charge des webradios par Freevo se fait encore une fois à travers sont fichier de configuration local_conf.py. Les webradios sont définies dans un fichier fxd.
AUDIO_ITEMS = [ ('Quelques MP3', '~/mp3/'),
'/usr/share/freevo/fxd/webradio-french.fxd' ]
Le fichier webradio-french.fdx sera au préalable téléchargé ici : http://membres.lycos.fr/gouchi2k1/files/webradio-freevo.tar.bz2
cd /tmp wget http://membres.lycos.fr/gouchi2k1/files/webradio-freevo.tar.bz2 tar xvjf webradio-freevo.tar.bz2 cp -a Webradio/src/img/ /usr/share/freevo/fxd/ cp Webradio/src/webradio.fxd /usr/share/freevo/fxd/webradio-french.fxd



Commentaires: