Streaming de chaînes TNT sur un réseau local » Historique » Version 2
« Précédent -
Version 2/20
(diff) -
Suivant » -
Version actuelle
Julien Aubé, 03/09/2011 23:32
Streaming de chaînes TNT sur un réseau local¶
Cette page explique l'une des installations possible pour diffuser les chaînes de la TNT sur un réseau local, en multicast.
Matériel¶
Il faut:
- Un PC, relativement puissant, sous Linux. J'ai choisi un AMD Fusion E350, avec 8Go de RAM.
- Autant de tuners TV que de multiplex à diffuser. Sur Cahors, il y a 4 multiplex, j'ai choisi 2 cartes TV double-tuner : Terratec Cinergy T DualRC ( http://www.terratec.net/fr/produkte/Cinergy_T_Stick_Dual_RC_102264.html )
- Un amplificateur TV muni de autant de sorties que de tuners TV, si possible placé au plus près de l'antenne. Un simple dérivateur dégrade le signal, et les cartes TV n'aiment pas.
- Je conseille de faire toute l'installation en connecteurs de type "F" (filetés, comme pour le satellite). J'ai simplement utilisé des convertisseurs au niveau de la prise murale, et des cartes TV. La raison, c'est que ces connecteurs sont moins sujets aux vibrations et aux perturbations transitoires.
- Au niveau réseau , un switch capable de faire de l'IGMP-Snooping (sinon vous avez le risque d'inonder le réseau).
Driver des cartes TV¶
Il vous faut arriver à la situation suivante:
/dev/dvb/adapter0/demux0 /dvr0 /frontend0 /net0 /adapter1/demux0 /dvr0 /frontend0 /net0 /adapter2/demux0 /dvr0 /frontend0 /net0 /adapter3/demux0 /dvr0 /frontend0 /net0
Dans le cas des cartes USB de type Terratec Cinergy T DualRC , le driver est dvb_usb_af9015 .
Ce driver nécessite un firmware, et après plusieurs essais, le firmware (http://otit.fi/~crope/v4l-dvb/af9015/af9015_firmware_cutter/firmware_files/ ) qui marche le mieux est le 4.65 , à placer dans /lib/firmware/<kernel-version>/dvb-usb-af9015.fw .
Attention, souvent la distribution écrase ce fichier et place une version différente du firmware, ça crée des bugs bizarres.
Dans /etc/modprobe.d/dvb/cof j'ai placé les options suivantes:
options dvb_usb_af9015 remote=-1 options dvb_usb disable-rc-polling=1 options usbcore autosuspend=-1
Ceci désactive la télécommande (qui ne marche pas sur ces adaptateurs de toute façon) et évite de flooder les logs, mais aussi désactive la suspension USB , qui fait planter la carte et nécessite un redémarrage à froid.
Une fois que ça marche, j'ai ceci dans les logs:
[ 14.632591] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in cold state, will try to load a firmware [ 14.694155] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw' [ 14.762381] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in warm state. [ 14.762638] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. [ 14.763897] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC) [ 14.827810] af9013: firmware version:4.65.0.0 [ 14.834356] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)... [ 14.846115] mxl5007t 1-00c0: creating new instance [ 14.849933] mxl5007t_get_chip_id: unknown rev (3f) [ 14.850017] mxl5007t_get_chip_id: MxL5007T detected @ 1-00c0 [ 14.852144] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. [ 14.852906] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC) [ 15.501354] af9013: found a 'Afatech AF9013 DVB-T' in warm state. [ 15.505639] af9013: firmware version:4.65.0.0 [ 15.521986] DVB: registering adapter 1 frontend 0 (Afatech AF9013 DVB-T)... [ 15.522339] mxl5007t 2-00c0: creating new instance [ 15.525602] mxl5007t_get_chip_id: unknown rev (3f) [ 15.525687] mxl5007t_get_chip_id: MxL5007T detected @ 2-00c0 [ 15.528612] dvb-usb: TerraTec Cinergy T Stick Dual RC successfully initialized and connected. [ 15.974156] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in cold state, will try to load a firmware [ 15.984388] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw' [ 16.051462] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in warm state. [ 16.051719] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. [ 16.052967] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC) [ 16.060942] af9013: firmware version:4.65.0.0 [ 16.067817] DVB: registering adapter 2 frontend 0 (Afatech AF9013 DVB-T)... [ 16.068222] mxl5007t 3-00c0: creating new instance [ 16.071530] mxl5007t_get_chip_id: unknown rev (3f) [ 16.071615] mxl5007t_get_chip_id: MxL5007T detected @ 3-00c0 [ 16.073434] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. [ 16.074030] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC) [ 16.717317] af9013: found a 'Afatech AF9013 DVB-T' in warm state. [ 16.721354] af9013: firmware version:4.65.0.0 [ 16.737449] DVB: registering adapter 3 frontend 0 (Afatech AF9013 DVB-T)... [ 16.737808] mxl5007t 4-00c0: creating new instance [ 16.741072] mxl5007t_get_chip_id: unknown rev (3f) [ 16.741157] mxl5007t_get_chip_id: MxL5007T detected @ 4-00c0 [ 16.743857] dvb-usb: TerraTec Cinergy T Stick Dual RC successfully initialized and connected.
Software¶
Chaînes TV¶
Il vous faudra connaître les chaînes TV qui vous sont accessibles.
Pour cela, l'utilitaire a utiliser est scan :
scan -a 0 /usr/local/share/dvb/dvb-t/fr-Cahors
(Bien sur il faut remplacer le fichier par celui de votre zone géographique)
Ceci va vous lister la liste des chaînes sur chaque multiplex.
Mumudvb¶
J'ai commencé par utiliser mumudvb. Il est plus simple d'utilisation et supporte l'igmp-snooping, mais malheureusement je l'ai trouvé moins stable dans le temps: Une erreur dans le flux TV (ce qui arrive de temps en temps) le fait planter sèchement. J'ai malgré tout inséré les fichiers de configuration que j'ai utilisé en attachement de cet article.
(Attention, ces fichiers ne diffusent pas en multicast - ils sont configurés pour l'unicast)
mumudvb_card0.conf:
#------------ TUNING ------------- #The DVB/ATSC card we want to use card=0 autoconf_unicast_start_port=1320 port_http=4242 freq=818 unicast=1 autoconfiguration=2 dvr_buffer_size=16 multicast_ttl=0 sap=0
mumudvb_card1.conf:
#------------ TUNING ------------- #The DVB/ATSC card we want to use card=1 autoconf_unicast_start_port=1310 port_http=4241 freq=786 unicast=1 autoconfiguration=2 dvr_buffer_size=16 multicast_ttl=0 sap=0
mumudvb_card2.conf:
#------------ TUNING ------------- #The DVB/ATSC card we want to use card=2 autoconf_unicast_start_port=1300 port_http=4240 freq=490 unicast=1 autoconfiguration=2 dvr_buffer_size=16 multicast_ttl=0 sap=0
mumudvb_card3.conf:
#------------ TUNING ------------- #The DVB/ATSC card we want to use card=3 autoconf_unicast_start_port=1330 port_http=4243 freq=698 unicast=1 autoconfiguration=2 dvr_buffer_size=16 multicast_ttl=0 sap=0
Le fichier de playlist pour VLC associé TV.m3u:
#EXTM3U #EXTINF:-1,France 2 #EXTVLCOPT:http-caching=5000 http://tavernier:4240/bynumber/1 #EXTINF:-1,France 5 #EXTVLCOPT:http-caching=5000 http://tavernier:4240/bynumber/2 #EXTINF:-1,France O #EXTVLCOPT:http-caching=5000 http://tavernier:4240/bynumber/3 #EXTINF:-1,LCP #EXTVLCOPT:http-caching=5000 http://tavernier:4240/bynumber/4 #EXTINF:-1,France 3 #EXTVLCOPT:http-caching=5000 http://tavernier:4240/bynumber/5 #EXTINF:-1,TF1 #EXTVLCOPT:http-caching=5000 http://tavernier:4241/bynumber/1 #EXTINF:-1,NRJ12 #EXTVLCOPT:http-caching=5000 http://tavernier:4241/bynumber/2 #EXTINF:-1,TMC #EXTVLCOPT:http-caching=5000 http://tavernier:4241/bynumber/3 #EXTINF:-1,ARTE #EXTVLCOPT:http-caching=5000 http://tavernier:4241/bynumber/4 #EXTINF:-1,M6 #EXTVLCOPT:http-caching=5000 http://tavernier:4242/bynumber/1 #EXTINF:-1,W9 #EXTVLCOPT:http-caching=5000 http://tavernier:4242/bynumber/2 #EXTINF:-1,NT1 #EXTVLCOPT:http-caching=5000 http://tavernier:4242/bynumber/3 #EXTINF:-1,Direct 8 #EXTVLCOPT:http-caching=5000 http://tavernier:4243/bynumber/1 #EXTINF:-1,BFM TV #EXTVLCOPT:http-caching=5000 http://tavernier:4243/bynumber/2 #EXTINF:-1,i>TELE #EXTVLCOPT:http-caching=5000 http://tavernier:4243/bynumber/3 #EXTINF:-1,DirectStar #EXTVLCOPT:http-caching=5000 http://tavernier:4243/bynumber/4 #EXTINF:-1,Gulli #EXTVLCOPT:http-caching=5000 http://tavernier:4243/bynumber/5 #EXTINF:-1,France 4 #EXTVLCOPT:http-caching=5000 http://tavernier:4243/bynumber/6
DVBlast¶
DVBlast est un logiciel écrit par les auteurs de VLC. Il a moins de fonctionnalités que mumudvb et est plus compliqué à configurer.
Néanmoins, il est très stable, surtout face aux erreurs des flux DVB.
Il ne gère pas malheureusement pas l'IGMP, ce qui explique que j'ai utilisé une configuration spéciale:
Pour éviter de flooder mon réseau, j'ai monté une interface dummy0 en inscrivant dummy dans /etc/modules .
Ensuite, cette interface est montée et mise en place pour accepter le multicast:
ifconfig dummy0 multicast up
Ainsi le trafic ne sort pas de la machine, ce qui est mon objectif pour le moment.
Pour enlever cette restriction, il suffit dans les fichiers ci-dessous de retirer la partie %dummy0 de chaque ligne: Ceci active le multicast sur l'interface par défaut.
Voici la configuration que j'ai utilisé. Ces données sont à modifier en fonction de votre émetteur:
<IP>[:<port>][/udp] <always on> <SID> [<PID>,]*
Ici, l'IPv6 est en format standard, et désigne l'interface de sortie dummy0 .
Le flag always_on est mis.
Le SID est celui de la chaine, trouvé via scan -a 0 /usr/local/share/dvb/dvb-t/fr-Cahors.
/etc/dvblast/dvblast.0.conf:
[ff12::1%dummy0]:2000 1 257 [ff12::1%dummy0]:2001 1 260 [ff12::1%dummy0]:2002 1 261 [ff12::1%dummy0]:2003 1 262 [ff12::1%dummy0]:2004 1 302
/etc/dvblast/dvblast.1.conf:
[ff12::1%dummy0]:3000 1 513 [ff12::1%dummy0]:3001 1 515 [ff12::1%dummy0]:3002 1 516 [ff12::1%dummy0]:3003 1 517 [ff12::1%dummy0]:3004 1 518 [ff12::1%dummy0]:3005 1 519
/etc/dvblast/dvblast.2.conf:
[ff12::1%dummy0]:4000 1 1537 [ff12::1%dummy0]:4001 1 1538 [ff12::1%dummy0]:4005 1 1542 [ff12::1%dummy0]:4006 1 1543
/etc/dvblast/dvblast.3.conf:
[ff12::1%dummy0]:5000 1 1025 [ff12::1%dummy0]:5001 1 1026 [ff12::1%dummy0]:5002 1 1027
Voici le fichier de démarrage, situé dans /etc/init.d/dvblast .
C'est là ou sont précisé les fréquences de travail de chaque récepteur.
#! /bin/sh ### BEGIN INIT INFO # Provides: dvblast # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts DVBlast daemons. # Description: DVBlast is a DVB streamer. ### END INIT INFO run_dvblast() { rm -f /tmp/dvblast.$1.sock dvblast -e -qq -t0 -r /tmp/dvblast.$1.sock -a $1 -f $2 -c /etc/dvblast/dvblast.$1.conf >/tmp/dvblast.$1.log 2>&1 & sleep 0.5s } . /lib/lsb/init-functions test -f /usr/bin/dvblast || exit 0 case "$1" in start) ifconfig dummy0 multicast up run_dvblast 0 490167000 run_dvblast 1 698167000 run_dvblast 2 786167000 run_dvblast 3 818167000 ;; stop) killall dvblast rm -f /tmp/dvblast.[0-3].sock ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: /etc/init.d/dvblast {start|stop|restart}" exit 1 esac exit 0
Voici le fichier de playlist VLC. Actuellement je fait tourner VLC sur la même machine que celle qui diffuse: Il est donc là aussi nécessaire d'enlever le %dummy0 dans le cas d'une diffusion réseau.
#EXTM3U #EXTINF:-1,France 2 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:2000 #EXTINF:-1,France 5 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:2001 #EXTINF:-1,France O #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:2002 #EXTINF:-1,LCP #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:2003 #EXTINF:-1,France 3 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:2004 #EXTINF:-1,TF1 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:4000 #EXTINF:-1,NRJ12 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:4001 #EXTINF:-1,TMC #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:4005 #EXTINF:-1,ARTE #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:4006 #EXTINF:-1,M6 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:5000 #EXTINF:-1,W9 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:5001 #EXTINF:-1,NT1 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:5002 #EXTINF:-1,Direct 8 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:3000 #EXTINF:-1,BFM TV #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:3001 #EXTINF:-1,i>TELE #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:3002 #EXTINF:-1,DirectStar #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:3003 #EXTINF:-1,Gulli #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:3004 #EXTINF:-1,France 4 #EXTVLCOPT:http-caching=5000 rtp://[ff12::1%dummy0]:3005
Les chaînes en HD ne sont pas diffusées.
La bande passante utilisés est de environ 10Mbps lorsque toute les chaînes sont actives.
Conclusion¶
Cette configuration est très stable et fonctionne depuis plus d'une semaine sans plantage, ce qui n'était pas le cas de mumudvb.
J'y vois 2 principaux problèmes:
- Manque de souplesse, en particulier sur les fréquences des émetteurs, et sur les chaînes à diffuser (Parfois les SID changent).
- A l'heure actuelle l'envoi multicast est inconditionnel. Au niveau du switch, il faudrait trouver un moyen de faire une sorte d'IGMP-Snooping en IPv6 (je crois que ça s'appelle MLD). Mais comment faire comprendre ça au switch ? Est-ce que ça se gère au niveau du PC d'envoi ? Le but est d'éviter de flooder tous les ports avec toutes les chaines systématiquement. (A travailler - Mon switch Netgear GS716T ne gère pas le MLD. A tenter avec le BDCOM S2548GX ? )