Gateway KO
Mon blog, n’est pas très disponible en ce moment, la Gateway est KO :-(
Ce sont les petites joies de l’auto-hébergement ;-)
Mon blog, n’est pas très disponible en ce moment, la Gateway est KO :-(
Ce sont les petites joies de l’auto-hébergement ;-)
Je viens d’ajouter la diffusion des flux TV à mon installation domotique.
L’objectif est de pouvoir visionner la télévision sur l’ensemble des équipements de la maison.
Pour cela, j’ai mis en place un serveur de diffusion.
Celui-ci distribue la vidéo en Multicast à l’aide du programme MuMuDVB.
Je sens qu’après la lecture de la courte description, vous allez me dire :
“Mais tu ne connais pas le multiposte chez Free???”.
Évidemment, je connais le service de Free, mais mon objectif est de fournir le même type de service pour contourner les limitations de l’existant :
Vous avez besoin :
Pour ma part, j’ai pris une carte tuner Hauppauge WinTV NOVA T-500 chez Materiel.net.
Vous avez le choix parmi les technologies de réceptions suivantes :
Les émetteurs diffusent plusieurs chaînes sur une fréquence (4 à 6).
Un tuner DVB, ne peut capter qu’une seule fréquence, cela veut donc dire qu’avec ma carte Hauppauge WinTV NOVA T-500, je peux diffuser au maximum 8 à 12 chaînes.
Il faut donc ajouter d’autres cartes / tuner en fonction du nombre de chaînes que vous voulez diffuser.
Pour les versions “sid” et “squeeze” de Debian, le paquet est directement disponible via apt.
Pour la version stable, vous pouvez télécharger le paquet sur le site du projet ou “back-porter” la version sid/squeeze.
Ma carte est reconnue sans problème, il faut simplement télécharger le firmware, le copier dans le répertoire /lib/firmware et charger le module dvb_usb_dib0700.
Vous devez ensuite avoir les différents tuner dans le répertoire : /dev/dvb
$ ls /dev/dvb
adapter0 adapter1
Pour trouver les fréquences des chaînes de télévision, il faut installer le paquet dvb-apps.
Celui-ci contient les fréquences des différents transpondeurs dans le répertoire /usr/share/dvb.
Dans le cas de mon émetteur, je trouve les informations dans le fichier : /usr/share/dvb/dvb-t/fr-Paris :
# Paris - France - various DVB-T transmitters
# contributed by Alexis de Lattre
# Paris - Tour Eiffel : 21 24 27 29 32 35
# Paris Est - Chennevières : 35 51 54 57 60 63
# Paris Nord - Sannois : 35 51 54 57 60 63
# Paris Sud - Villebon : 35 51 56 57 60 63
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
T 474166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE
T 498166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE
T 522166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE
Pour la configuration de MumuDVB, nous allons nous créer un répertoire spécial /etc/mumudvb et faire un fichier de configuration par carte.
Voici le contenu de mon fichier /etc/mumudvb/card0.conf :
autoconfiguration=2
freq=474166
Celui-ci contient la fréquence issue du fichier fr-Paris et une directive pour dire à MumuDVB de se débrouiller ;-)
Vous pouvez ensuite tester cette configuration en ligne de commande à l’aide d’un compte utilisateur qui fait parti du groupe vidéo :
$ id
$ mumudvb -d -c /etc/mumudvb/card0.conf
Les images sont diffusées sur le réseau, nous pouvons passer à la phase la plus dur du projet : le visionage ;-)
![]() |
Mumudvb prend en charge le protocole Session Announcement Protocol (SAP). Il suffit donc de lancer VLC, afficher la liste de lecture, et activer la découverte de service SAP. |
Pour afficher les chaînes dans Freevo, il faut les définir dans le fichier de configuration local_config.py de cette manière :
TV_VIDEO_GROUPS[0].group_type = 'udp'
TV_CHANNELS = [
( 'C2.telepoche.com', 'France 2', '@239.100.1.1:1234' ),
( 'C3.telepoche.com', 'France 3', '@239.100.1.5:1234' ),
( 'C28.telepoche.com', 'France 4', '@239.100.0.5:1234' ),
( 'C7.telepoche.com', 'France 5', '@239.100.1.2:1234'),
( 'C5.telepoche.com', 'ARTE', '@239.100.1.4:1234' ),
( 'C167.telepoche.com', 'Direct 8', '@239.100.0.0:1234' ),
( 'C195.telepoche.com', 'Gulli', '@239.100.0.4:1234' ),
( 'C194.telepoche.com', 'BFM TV', '@239.100.0.1:1234'),
( 'C170.telepoche.com', 'LCP', '@239.100.1.3:1234')
]
Le group_type udp, n’est pas pris en compte par le plugin mplayer de Freevo, il faut donc modifier le fichier /usr/lib/python2.5/site-packages/freevo/tv/plugins/mplayer.py, vers la ligne 134, pour l’ajouter :
elif vg.group_type == 'udp':
self.fc.chanSet(tuner_channel, True, app='mplayer')
tvcmd = ''
args += ('"udp://%s" %s' % (tuner_channel, config.MPLAYER_ARGS['udp']),)
Vous pouvez, modifier les options de mplayer à l’aide de la variable MPLAYER_ARGS :
MPLAYER_ARGS = { 'dvd' : '-cache 8192',
...
'udp' : '-cache 1024 -vf pp=md -fs',
'default': '-cache 5000'
....
}
Comme cela, vous pouvez afficher la télévision sur Freevo. Par contre, la qualité de l’image est inférieure à celle de VLC, mais je n’ai pas encore trouver la source du problème.
![]() |
Au niveau de la charge réseau, une chaîne nécessite de 2 à 5Mb, cela signifie qu’avec une interface réseau à 100Mb, il est possible de diffuser plus de 20 chaînes. Pour la charge processeur, celle-ci est quasiment inexistante, si vous vous contentez de diffuser les flux sur le réseau la quantité de puissance processeurs nécessaire est très faible, d’après le Wiki de Mumudvb il est possible de faire fonctionner sur un NSLU2 avec un dongle TNT USB. |
Par contre, si vous voulez transcoder le flux vous allez avoir besoin d’une ou de plusieurs bonnes machines.
![]() |
Si vous voulez, une Mosaic, il est possible d’assembler les flux udp avec VLC. |
Il faut faire attention, si vous utilisez des ponts réseaux (Bridge) avec OpenVPN.
Dans ce cas très précis, OpenVPN s’amuse à chiffrer l’ensemble des paquets qui arrivent dans le bridge.
Si votre machine n’est pas suffisamment puissante, alors OpenVPN va planter au bout de quelques minutes :
Sun Jul 12 22:46:25 2009 us=801259 MULTI: packet dropped due to output saturation (multi_add_mbuf)
La meilleure chose à faire est donc de bloquer le flux multicast au niveau du bridge avec ebtables.
Si votre réseau Ethernet supporte les Jumbo Frames.
Il suffit de modifier la taille des paquets distribués par Mumudvb dans le fichier mumudvb.h :
$ fgrep MAX_UDP_SIZE /usr/src/mumudvb/src/mumudvb.h
#define MAX_UDP_SIZE (TS_PACKET_SIZE*46)
Après avoir recompilé le programme, vous pouvez vérifier que cela fonctionne avec Tcpdump :
# tcpdump -i bond0 port 1234
13:30:59.830361 IP loutre.csquad.lan.1234 > 239.202.204.200.1234: UDP, length 8648
Le principal avantage des Jumbo Frames est de réduire le nombre de paquets sur le réseau.
Les principaux avantages du passage de mon système de télévision en numérique et l’adaptation du standard DVB sont :
Je vais faire d’autres articles sur le sujet, pour expliquer comment j’ai réussi à diffuser le flux TV sur ma PlayStation Portable (PSP) et mon Nokia 770.
Powered by WordPress