Projet

Général

Profil

Streaming de chaînes TNT sur un réseau local » Historique » Version 3

Julien Aubé, 08/09/2011 12:37

1 1 Julien Aubé
h1. Streaming de chaînes TNT sur un réseau local
2 1 Julien Aubé
3 3 Julien Aubé
Cette page explique l'une des installations possible pour diffuser les chaînes de la TNT sur un réseau local, en multicast ou en HTTP.
4 1 Julien Aubé
5 3 Julien Aubé
*Note*: J'ai ajouté la possibilité de streamer via HTTP car la plupart des points d'accès sans fil 802.11b/g on un comportement délicat en 
6 3 Julien Aubé
cas de trames multicast: Ils réduisent la vitesse de connexion à 1Mbps.
7 3 Julien Aubé
8 3 Julien Aubé
Ceci est bien sur rédhibitoire pour un flux DVB.
9 3 Julien Aubé
10 3 Julien Aubé
Les chaînes en HD ne sont pas diffusées.
11 3 Julien Aubé
12 3 Julien Aubé
La bande passante utilisés est de environ 10Mbps lorsque toute les chaînes sont actives. 
13 3 Julien Aubé
14 3 Julien Aubé
15 3 Julien Aubé
*Historique*
16 3 Julien Aubé
17 3 Julien Aubé
- Repassé en IPv4 pour la diffusion: Les switchs ne gèrent pas l'IPv6 et MLD, les set-top-box non plus.
18 3 Julien Aubé
- Ajouté _minisapserver_ pour le stream en multicast
19 3 Julien Aubé
- Utilisation d'_iproute2_ plutôt que _ifconfig_
20 3 Julien Aubé
- Ajout du convertisseur de stream _udpxy_
21 3 Julien Aubé
22 1 Julien Aubé
h2. Matériel
23 1 Julien Aubé
24 1 Julien Aubé
Il faut:
25 1 Julien Aubé
26 1 Julien Aubé
* Un PC, relativement puissant, sous Linux. J'ai choisi un AMD Fusion E350, avec 8Go de RAM.
27 1 Julien Aubé
* 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 )
28 1 Julien Aubé
* 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.
29 1 Julien Aubé
* 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.
30 3 Julien Aubé
* Au niveau réseau , un switch capable de faire de l'IGMP-Snooping (éventuellement) (sinon vous avez le risque d'inonder le réseau).
31 1 Julien Aubé
32 1 Julien Aubé
h2. Driver des cartes TV
33 1 Julien Aubé
34 1 Julien Aubé
Il vous faut arriver à la situation suivante:
35 1 Julien Aubé
<pre>
36 1 Julien Aubé
 /dev/dvb/adapter0/demux0
37 1 Julien Aubé
                  /dvr0
38 1 Julien Aubé
                  /frontend0
39 1 Julien Aubé
                  /net0
40 1 Julien Aubé
         /adapter1/demux0
41 1 Julien Aubé
                  /dvr0
42 1 Julien Aubé
                  /frontend0
43 1 Julien Aubé
                  /net0
44 1 Julien Aubé
         /adapter2/demux0
45 1 Julien Aubé
                  /dvr0
46 1 Julien Aubé
                  /frontend0
47 1 Julien Aubé
                  /net0
48 1 Julien Aubé
         /adapter3/demux0
49 1 Julien Aubé
                  /dvr0
50 1 Julien Aubé
                  /frontend0
51 1 Julien Aubé
                  /net0
52 1 Julien Aubé
</pre>
53 1 Julien Aubé
54 1 Julien Aubé
Dans le cas des cartes USB de type Terratec Cinergy T DualRC  , le driver est _dvb_usb_af9015_ .
55 1 Julien Aubé
56 1 Julien Aubé
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 . 
57 1 Julien Aubé
Attention, souvent la distribution *écrase* ce fichier et place une version différente du firmware, ça crée des bugs bizarres.
58 1 Julien Aubé
59 1 Julien Aubé
Dans /etc/modprobe.d/dvb/cof j'ai placé les options suivantes:
60 1 Julien Aubé
<pre>
61 1 Julien Aubé
options dvb_usb_af9015  remote=-1
62 1 Julien Aubé
options dvb_usb         disable-rc-polling=1
63 1 Julien Aubé
options usbcore         autosuspend=-1
64 1 Julien Aubé
</pre>
65 1 Julien Aubé
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.
66 1 Julien Aubé
67 1 Julien Aubé
Une fois que ça marche, j'ai ceci dans les logs:
68 1 Julien Aubé
69 1 Julien Aubé
<pre>
70 1 Julien Aubé
[   14.632591] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in cold state, will try to load a firmware
71 1 Julien Aubé
[   14.694155] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw'
72 1 Julien Aubé
[   14.762381] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in warm state.
73 1 Julien Aubé
[   14.762638] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
74 1 Julien Aubé
[   14.763897] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC)
75 1 Julien Aubé
[   14.827810] af9013: firmware version:4.65.0.0
76 1 Julien Aubé
[   14.834356] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...
77 1 Julien Aubé
[   14.846115] mxl5007t 1-00c0: creating new instance
78 1 Julien Aubé
[   14.849933] mxl5007t_get_chip_id: unknown rev (3f)
79 1 Julien Aubé
[   14.850017] mxl5007t_get_chip_id: MxL5007T detected @ 1-00c0
80 1 Julien Aubé
[   14.852144] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
81 1 Julien Aubé
[   14.852906] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC)
82 1 Julien Aubé
[   15.501354] af9013: found a 'Afatech AF9013 DVB-T' in warm state.
83 1 Julien Aubé
[   15.505639] af9013: firmware version:4.65.0.0
84 1 Julien Aubé
[   15.521986] DVB: registering adapter 1 frontend 0 (Afatech AF9013 DVB-T)...
85 1 Julien Aubé
[   15.522339] mxl5007t 2-00c0: creating new instance
86 1 Julien Aubé
[   15.525602] mxl5007t_get_chip_id: unknown rev (3f)
87 1 Julien Aubé
[   15.525687] mxl5007t_get_chip_id: MxL5007T detected @ 2-00c0
88 1 Julien Aubé
[   15.528612] dvb-usb: TerraTec Cinergy T Stick Dual RC successfully initialized and connected.
89 1 Julien Aubé
[   15.974156] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in cold state, will try to load a firmware
90 1 Julien Aubé
[   15.984388] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw'
91 1 Julien Aubé
[   16.051462] dvb-usb: found a 'TerraTec Cinergy T Stick Dual RC' in warm state.
92 1 Julien Aubé
[   16.051719] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
93 1 Julien Aubé
[   16.052967] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC)
94 1 Julien Aubé
[   16.060942] af9013: firmware version:4.65.0.0
95 1 Julien Aubé
[   16.067817] DVB: registering adapter 2 frontend 0 (Afatech AF9013 DVB-T)...
96 1 Julien Aubé
[   16.068222] mxl5007t 3-00c0: creating new instance
97 1 Julien Aubé
[   16.071530] mxl5007t_get_chip_id: unknown rev (3f)
98 1 Julien Aubé
[   16.071615] mxl5007t_get_chip_id: MxL5007T detected @ 3-00c0
99 1 Julien Aubé
[   16.073434] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
100 1 Julien Aubé
[   16.074030] DVB: registering new adapter (TerraTec Cinergy T Stick Dual RC)
101 1 Julien Aubé
[   16.717317] af9013: found a 'Afatech AF9013 DVB-T' in warm state.
102 1 Julien Aubé
[   16.721354] af9013: firmware version:4.65.0.0
103 1 Julien Aubé
[   16.737449] DVB: registering adapter 3 frontend 0 (Afatech AF9013 DVB-T)...
104 1 Julien Aubé
[   16.737808] mxl5007t 4-00c0: creating new instance
105 1 Julien Aubé
[   16.741072] mxl5007t_get_chip_id: unknown rev (3f)
106 1 Julien Aubé
[   16.741157] mxl5007t_get_chip_id: MxL5007T detected @ 4-00c0
107 1 Julien Aubé
[   16.743857] dvb-usb: TerraTec Cinergy T Stick Dual RC successfully initialized and connected.
108 1 Julien Aubé
</pre>
109 1 Julien Aubé
110 1 Julien Aubé
h2. Software
111 1 Julien Aubé
112 1 Julien Aubé
h3. Chaînes TV
113 1 Julien Aubé
114 1 Julien Aubé
Il vous faudra connaître les chaînes TV qui vous sont accessibles.
115 1 Julien Aubé
Pour cela, l'utilitaire a utiliser est _scan_ :
116 1 Julien Aubé
117 1 Julien Aubé
<pre>scan -a 0 /usr/local/share/dvb/dvb-t/fr-Cahors</pre>
118 1 Julien Aubé
119 1 Julien Aubé
(Bien sur il faut remplacer le fichier par celui de votre zone géographique)
120 1 Julien Aubé
121 1 Julien Aubé
Ceci va vous lister la liste des chaînes sur chaque multiplex.
122 1 Julien Aubé
123 1 Julien Aubé
h3. Mumudvb
124 1 Julien Aubé
125 1 Julien Aubé
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.
126 1 Julien Aubé
(Attention, ces fichiers ne diffusent pas en multicast - ils sont configurés pour l'unicast)
127 2 Julien Aubé
128 2 Julien Aubé
mumudvb_card0.conf:
129 2 Julien Aubé
<pre>
130 2 Julien Aubé
#------------ TUNING -------------
131 2 Julien Aubé
#The DVB/ATSC card we want to use
132 2 Julien Aubé
card=0
133 2 Julien Aubé
autoconf_unicast_start_port=1320
134 2 Julien Aubé
port_http=4242
135 2 Julien Aubé
freq=818
136 2 Julien Aubé
unicast=1
137 2 Julien Aubé
autoconfiguration=2
138 2 Julien Aubé
dvr_buffer_size=16
139 2 Julien Aubé
multicast_ttl=0
140 2 Julien Aubé
sap=0
141 2 Julien Aubé
</pre>
142 2 Julien Aubé
143 2 Julien Aubé
mumudvb_card1.conf:
144 2 Julien Aubé
<pre>
145 2 Julien Aubé
#------------ TUNING -------------
146 2 Julien Aubé
#The DVB/ATSC card we want to use
147 2 Julien Aubé
card=1
148 2 Julien Aubé
autoconf_unicast_start_port=1310
149 2 Julien Aubé
port_http=4241
150 2 Julien Aubé
freq=786
151 2 Julien Aubé
unicast=1
152 2 Julien Aubé
autoconfiguration=2
153 2 Julien Aubé
dvr_buffer_size=16
154 2 Julien Aubé
multicast_ttl=0
155 2 Julien Aubé
sap=0
156 2 Julien Aubé
</pre>
157 2 Julien Aubé
158 2 Julien Aubé
mumudvb_card2.conf:
159 2 Julien Aubé
<pre>
160 2 Julien Aubé
#------------ TUNING -------------
161 2 Julien Aubé
#The DVB/ATSC card we want to use
162 2 Julien Aubé
card=2
163 2 Julien Aubé
autoconf_unicast_start_port=1300
164 2 Julien Aubé
port_http=4240
165 2 Julien Aubé
freq=490
166 2 Julien Aubé
unicast=1
167 2 Julien Aubé
autoconfiguration=2
168 2 Julien Aubé
dvr_buffer_size=16
169 2 Julien Aubé
multicast_ttl=0
170 2 Julien Aubé
sap=0
171 2 Julien Aubé
</pre>
172 2 Julien Aubé
173 2 Julien Aubé
mumudvb_card3.conf:
174 2 Julien Aubé
<pre>
175 2 Julien Aubé
#------------ TUNING -------------
176 2 Julien Aubé
#The DVB/ATSC card we want to use
177 2 Julien Aubé
card=3
178 2 Julien Aubé
autoconf_unicast_start_port=1330
179 2 Julien Aubé
port_http=4243
180 2 Julien Aubé
freq=698
181 2 Julien Aubé
unicast=1
182 2 Julien Aubé
autoconfiguration=2
183 2 Julien Aubé
dvr_buffer_size=16
184 2 Julien Aubé
multicast_ttl=0
185 2 Julien Aubé
sap=0
186 2 Julien Aubé
</pre>
187 2 Julien Aubé
188 2 Julien Aubé
Le fichier de playlist pour VLC associé _TV.m3u_:
189 2 Julien Aubé
<pre>
190 2 Julien Aubé
#EXTM3U
191 2 Julien Aubé
#EXTINF:-1,France 2
192 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
193 2 Julien Aubé
http://tavernier:4240/bynumber/1
194 2 Julien Aubé
#EXTINF:-1,France 5
195 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
196 2 Julien Aubé
http://tavernier:4240/bynumber/2
197 2 Julien Aubé
#EXTINF:-1,France O
198 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
199 2 Julien Aubé
http://tavernier:4240/bynumber/3
200 2 Julien Aubé
#EXTINF:-1,LCP
201 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
202 2 Julien Aubé
http://tavernier:4240/bynumber/4
203 2 Julien Aubé
#EXTINF:-1,France 3
204 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
205 2 Julien Aubé
http://tavernier:4240/bynumber/5
206 2 Julien Aubé
#EXTINF:-1,TF1
207 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
208 2 Julien Aubé
http://tavernier:4241/bynumber/1
209 2 Julien Aubé
#EXTINF:-1,NRJ12
210 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
211 2 Julien Aubé
http://tavernier:4241/bynumber/2
212 2 Julien Aubé
#EXTINF:-1,TMC
213 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
214 2 Julien Aubé
http://tavernier:4241/bynumber/3
215 2 Julien Aubé
#EXTINF:-1,ARTE
216 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
217 2 Julien Aubé
http://tavernier:4241/bynumber/4
218 2 Julien Aubé
#EXTINF:-1,M6
219 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
220 2 Julien Aubé
http://tavernier:4242/bynumber/1
221 2 Julien Aubé
#EXTINF:-1,W9
222 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
223 2 Julien Aubé
http://tavernier:4242/bynumber/2
224 2 Julien Aubé
#EXTINF:-1,NT1
225 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
226 2 Julien Aubé
http://tavernier:4242/bynumber/3
227 2 Julien Aubé
#EXTINF:-1,Direct 8
228 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
229 2 Julien Aubé
http://tavernier:4243/bynumber/1
230 2 Julien Aubé
#EXTINF:-1,BFM TV
231 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
232 2 Julien Aubé
http://tavernier:4243/bynumber/2
233 2 Julien Aubé
#EXTINF:-1,i>TELE
234 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
235 2 Julien Aubé
http://tavernier:4243/bynumber/3
236 2 Julien Aubé
#EXTINF:-1,DirectStar
237 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
238 2 Julien Aubé
http://tavernier:4243/bynumber/4
239 2 Julien Aubé
#EXTINF:-1,Gulli
240 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
241 2 Julien Aubé
http://tavernier:4243/bynumber/5
242 2 Julien Aubé
#EXTINF:-1,France 4
243 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
244 2 Julien Aubé
http://tavernier:4243/bynumber/6
245 2 Julien Aubé
</pre>
246 2 Julien Aubé
247 2 Julien Aubé
h3. DVBlast
248 2 Julien Aubé
249 2 Julien Aubé
DVBlast est un logiciel écrit par les auteurs de VLC. Il a moins de fonctionnalités que mumudvb et est plus compliqué à configurer. 
250 2 Julien Aubé
251 2 Julien Aubé
Néanmoins, il est très stable, surtout face aux erreurs des flux DVB.
252 1 Julien Aubé
253 2 Julien Aubé
Il ne gère pas malheureusement pas l'IGMP, ce qui explique que j'ai utilisé une configuration spéciale:
254 1 Julien Aubé
255 3 Julien Aubé
Pour éviter de flooder le réseau, j'ai monté une interface *dummy0* en inscrivant _dummy_ dans _/etc/modules_ .
256 1 Julien Aubé
Ensuite, cette interface est montée et mise en place pour accepter le multicast:
257 1 Julien Aubé
258 3 Julien Aubé
<pre>
259 3 Julien Aubé
ip link set dummy0 multicast on
260 3 Julien Aubé
ip addr add 10.0.0.100 dev dummy0
261 3 Julien Aubé
ip link set dummy0 up
262 3 Julien Aubé
ip route add 225.1.0.0/16 dev dummy0
263 3 Julien Aubé
</pre>
264 2 Julien Aubé
265 2 Julien Aubé
266 3 Julien Aubé
Ainsi le trafic multicast ne sort pas de la machine, ce qui est mon objectif pour le moment.
267 2 Julien Aubé
268 3 Julien Aubé
Pour diffuser en multicast sur le réseau local, il suffit de commenter les lignes ci-dessus dans le script de démarrage.
269 3 Julien Aubé
270 1 Julien Aubé
Voici la configuration que j'ai utilisé. Ces données sont à modifier en fonction de votre émetteur:
271 1 Julien Aubé
272 1 Julien Aubé
<pre>
273 1 Julien Aubé
  <IP>[:<port>][/udp]	<always on>	<SID>	[<PID>,]*
274 1 Julien Aubé
</pre>
275 1 Julien Aubé
276 1 Julien Aubé
Le flag always_on est mis.
277 1 Julien Aubé
278 1 Julien Aubé
Le SID est celui de la chaine, trouvé via _scan -a 0 /usr/local/share/dvb/dvb-t/fr-Cahors_.
279 1 Julien Aubé
280 1 Julien Aubé
/etc/dvblast/dvblast.0.conf:
281 1 Julien Aubé
<pre>
282 3 Julien Aubé
; France 2
283 3 Julien Aubé
225.1.1.1:2000  1 257
284 3 Julien Aubé
; France 5
285 3 Julien Aubé
225.1.1.2:2000  1 260
286 3 Julien Aubé
; France O
287 3 Julien Aubé
225.1.1.3:2000  1 261
288 3 Julien Aubé
; LCP
289 3 Julien Aubé
225.1.1.4:2000  1 262
290 3 Julien Aubé
; France 3
291 3 Julien Aubé
225.1.1.5:2000  1 302
292 1 Julien Aubé
</pre>
293 1 Julien Aubé
294 1 Julien Aubé
/etc/dvblast/dvblast.1.conf:
295 1 Julien Aubé
<pre>
296 3 Julien Aubé
; Direct 8
297 3 Julien Aubé
225.1.4.1:2000  1 513
298 3 Julien Aubé
; BFM TV
299 3 Julien Aubé
225.1.4.2:2000  1 515
300 3 Julien Aubé
; i>TELE
301 3 Julien Aubé
225.1.4.3:2000  1 516
302 3 Julien Aubé
; DirectStar
303 3 Julien Aubé
225.1.4.4:2000  1 517
304 3 Julien Aubé
; Gulli
305 3 Julien Aubé
225.1.4.5:2000  1 518
306 3 Julien Aubé
; France 4
307 3 Julien Aubé
225.1.4.6:2000  1 519
308 2 Julien Aubé
</pre>
309 2 Julien Aubé
310 2 Julien Aubé
/etc/dvblast/dvblast.2.conf:
311 2 Julien Aubé
<pre>
312 3 Julien Aubé
; TF1
313 3 Julien Aubé
225.1.2.1:2000  1 1537
314 3 Julien Aubé
; NRJ12
315 3 Julien Aubé
225.1.2.2:2000  1 1538
316 3 Julien Aubé
; TMC
317 3 Julien Aubé
225.1.2.3:2000  1 1542
318 3 Julien Aubé
; ARTE
319 3 Julien Aubé
225.1.2.4:2000  1 1543
320 2 Julien Aubé
</pre>
321 2 Julien Aubé
322 2 Julien Aubé
/etc/dvblast/dvblast.3.conf:
323 2 Julien Aubé
<pre>
324 3 Julien Aubé
; M6
325 3 Julien Aubé
225.1.3.1:2000 1 1025
326 3 Julien Aubé
; W9
327 3 Julien Aubé
225.1.3.2:2000  1 1026
328 3 Julien Aubé
; NT1
329 3 Julien Aubé
225.1.3.3:2000  1 1027
330 2 Julien Aubé
</pre>
331 2 Julien Aubé
332 2 Julien Aubé
Voici le fichier de démarrage, situé dans _/etc/init.d/dvblast_ .
333 2 Julien Aubé
C'est là ou sont précisé les fréquences de travail de chaque récepteur.
334 2 Julien Aubé
335 2 Julien Aubé
<pre>
336 2 Julien Aubé
#! /bin/sh
337 2 Julien Aubé
### BEGIN INIT INFO
338 2 Julien Aubé
# Provides:          dvblast
339 2 Julien Aubé
# Required-Start:    $remote_fs $syslog
340 2 Julien Aubé
# Required-Stop:     $remote_fs $syslog
341 2 Julien Aubé
# Default-Start:     2 3 4 5
342 2 Julien Aubé
# Default-Stop:      0 1 6
343 2 Julien Aubé
# Short-Description: Starts DVBlast daemons.
344 2 Julien Aubé
# Description:       DVBlast is a DVB streamer.
345 2 Julien Aubé
### END INIT INFO
346 2 Julien Aubé
347 2 Julien Aubé
run_dvblast()
348 2 Julien Aubé
{
349 2 Julien Aubé
	rm -f /tmp/dvblast.$1.sock
350 2 Julien Aubé
	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 &
351 2 Julien Aubé
	sleep 0.5s
352 2 Julien Aubé
}
353 2 Julien Aubé
354 1 Julien Aubé
. /lib/lsb/init-functions
355 1 Julien Aubé
356 1 Julien Aubé
test -f /usr/bin/dvblast || exit 0
357 1 Julien Aubé
358 1 Julien Aubé
case "$1" in
359 2 Julien Aubé
	start)
360 1 Julien Aubé
		run_dvblast 0 490167000
361 1 Julien Aubé
		run_dvblast 1 698167000
362 1 Julien Aubé
		run_dvblast 2 786167000
363 1 Julien Aubé
		run_dvblast 3 818167000
364 1 Julien Aubé
		;;
365 1 Julien Aubé
	stop)
366 1 Julien Aubé
		killall dvblast
367 1 Julien Aubé
		rm -f /tmp/dvblast.[0-3].sock
368 1 Julien Aubé
		;;
369 1 Julien Aubé
	restart)
370 1 Julien Aubé
		$0 stop
371 1 Julien Aubé
		sleep 1
372 1 Julien Aubé
		$0 start
373 1 Julien Aubé
		;;
374 1 Julien Aubé
	*)
375 1 Julien Aubé
		echo "Usage: /etc/init.d/dvblast {start|stop|restart}"
376 1 Julien Aubé
	exit 1
377 1 Julien Aubé
esac
378 1 Julien Aubé
379 1 Julien Aubé
exit 0
380 1 Julien Aubé
</pre>
381 1 Julien Aubé
382 3 Julien Aubé
Dans cette configuration, il est possible, plutôt que de créer un fichier de playlist VLC, d'installer et de faire tourner un serveur SAP.
383 3 Julien Aubé
384 3 Julien Aubé
Il faut installer le programme _minisapserver_ , l'activer dans _/etc/defaults/minisapserver_, 
385 3 Julien Aubé
et faire un fichier de configuration: _/etc/sap.conf_
386 3 Julien Aubé
387 1 Julien Aubé
<pre>
388 3 Julien Aubé
# sap.cfg - Configuration file of the mini SAP server
389 3 Julien Aubé
390 3 Julien Aubé
# Global miniSAPserver options
391 3 Julien Aubé
[global]
392 3 Julien Aubé
393 3 Julien Aubé
# Number of seconds between announces. 5 is default. Internet announces better use 30.
394 3 Julien Aubé
sap_delay=20
395 3 Julien Aubé
396 3 Julien Aubé
# The network interface on which to stream.
397 3 Julien Aubé
interface=eth1
398 3 Julien Aubé
399 3 Julien Aubé
[program]
400 3 Julien Aubé
type=rtp
401 3 Julien Aubé
name=TF1
402 3 Julien Aubé
user=videolan
403 3 Julien Aubé
machine=OB_Network
404 3 Julien Aubé
site=http://obnet.org
405 3 Julien Aubé
address=225.1.2.1
406 3 Julien Aubé
port=2000
407 3 Julien Aubé
408 3 Julien Aubé
[program]
409 3 Julien Aubé
type=rtp
410 3 Julien Aubé
name=France 2
411 3 Julien Aubé
user=videolan
412 3 Julien Aubé
machine=OB_Network
413 3 Julien Aubé
site=http://obnet.org
414 3 Julien Aubé
address=225.1.1.1
415 3 Julien Aubé
port=2000
416 3 Julien Aubé
417 3 Julien Aubé
[program]
418 3 Julien Aubé
type=rtp
419 3 Julien Aubé
name=France 3
420 3 Julien Aubé
user=videolan
421 3 Julien Aubé
machine=OB_Network
422 3 Julien Aubé
site=http://obnet.org
423 3 Julien Aubé
address=225.1.1.5
424 3 Julien Aubé
port=2000
425 3 Julien Aubé
426 3 Julien Aubé
[program]
427 3 Julien Aubé
type=rtp
428 3 Julien Aubé
name=France 4
429 3 Julien Aubé
user=videolan
430 3 Julien Aubé
machine=OB_Network
431 3 Julien Aubé
site=http://obnet.org
432 3 Julien Aubé
address=225.1.4.6
433 3 Julien Aubé
port=2000
434 3 Julien Aubé
435 3 Julien Aubé
[program]
436 3 Julien Aubé
type=rtp
437 3 Julien Aubé
name=France 5
438 3 Julien Aubé
user=videolan
439 3 Julien Aubé
machine=OB_Network
440 3 Julien Aubé
site=http://obnet.org
441 3 Julien Aubé
address=225.1.1.2
442 3 Julien Aubé
port=2000
443 3 Julien Aubé
444 3 Julien Aubé
[program]
445 3 Julien Aubé
type=rtp
446 3 Julien Aubé
name=France O
447 3 Julien Aubé
user=videolan
448 3 Julien Aubé
machine=OB_Network
449 3 Julien Aubé
site=http://obnet.org
450 3 Julien Aubé
address=225.1.1.3
451 3 Julien Aubé
port=2000
452 3 Julien Aubé
453 3 Julien Aubé
[program]
454 3 Julien Aubé
type=rtp
455 3 Julien Aubé
name=Arte
456 3 Julien Aubé
user=videolan
457 3 Julien Aubé
machine=OB_Network
458 3 Julien Aubé
site=http://obnet.org
459 3 Julien Aubé
address=225.1.2.4
460 3 Julien Aubé
port=2000
461 3 Julien Aubé
462 3 Julien Aubé
[program]
463 3 Julien Aubé
type=rtp
464 3 Julien Aubé
name=M6
465 3 Julien Aubé
user=videolan
466 3 Julien Aubé
machine=OB_Network
467 3 Julien Aubé
site=http://obnet.org
468 3 Julien Aubé
address=225.1.3.1
469 3 Julien Aubé
port=2000
470 3 Julien Aubé
471 3 Julien Aubé
[program]
472 3 Julien Aubé
type=rtp
473 3 Julien Aubé
name=W9
474 3 Julien Aubé
user=videolan
475 3 Julien Aubé
machine=OB_Network
476 3 Julien Aubé
site=http://obnet.org
477 3 Julien Aubé
address=225.1.3.2
478 3 Julien Aubé
port=2000
479 3 Julien Aubé
480 3 Julien Aubé
[program]
481 3 Julien Aubé
type=rtp
482 3 Julien Aubé
name=NRJ12
483 3 Julien Aubé
user=videolan
484 3 Julien Aubé
machine=OB_Network
485 3 Julien Aubé
site=http://obnet.org
486 3 Julien Aubé
address=225.1.2.2
487 3 Julien Aubé
port=2000
488 3 Julien Aubé
489 3 Julien Aubé
[program]
490 3 Julien Aubé
type=rtp
491 3 Julien Aubé
name=TMC
492 3 Julien Aubé
user=videolan
493 3 Julien Aubé
machine=OB_Network
494 3 Julien Aubé
site=http://obnet.org
495 3 Julien Aubé
address=225.1.2.3
496 3 Julien Aubé
port=2000
497 3 Julien Aubé
498 3 Julien Aubé
[program]
499 3 Julien Aubé
type=rtp
500 3 Julien Aubé
name=Direct 8
501 3 Julien Aubé
user=videolan
502 3 Julien Aubé
machine=OB_Network
503 3 Julien Aubé
site=http://obnet.org
504 3 Julien Aubé
address=225.1.4.1
505 3 Julien Aubé
port=2000
506 3 Julien Aubé
507 3 Julien Aubé
[program]
508 3 Julien Aubé
type=rtp
509 3 Julien Aubé
name=NT1
510 3 Julien Aubé
user=videolan
511 3 Julien Aubé
machine=OB_Network
512 3 Julien Aubé
site=http://obnet.org
513 3 Julien Aubé
address=225.1.3.3
514 3 Julien Aubé
port=2000
515 3 Julien Aubé
516 3 Julien Aubé
[program]
517 3 Julien Aubé
type=rtp
518 3 Julien Aubé
name=DirectStar
519 3 Julien Aubé
user=videolan
520 3 Julien Aubé
machine=OB_Network
521 3 Julien Aubé
site=http://obnet.org
522 3 Julien Aubé
address=225.1.4.4
523 3 Julien Aubé
port=2000
524 3 Julien Aubé
525 3 Julien Aubé
[program]
526 3 Julien Aubé
type=rtp
527 3 Julien Aubé
name=LCP
528 3 Julien Aubé
user=videolan
529 3 Julien Aubé
machine=OB_Network
530 3 Julien Aubé
site=http://obnet.org
531 3 Julien Aubé
address=225.1.1.4
532 3 Julien Aubé
port=2000
533 3 Julien Aubé
534 3 Julien Aubé
535 3 Julien Aubé
[program]
536 3 Julien Aubé
type=rtp
537 3 Julien Aubé
name=BFM TV
538 3 Julien Aubé
user=videolan
539 3 Julien Aubé
machine=OB_Network
540 3 Julien Aubé
site=http://obnet.org
541 3 Julien Aubé
address=225.1.4.2
542 3 Julien Aubé
port=2000
543 3 Julien Aubé
544 3 Julien Aubé
[program]
545 3 Julien Aubé
type=rtp
546 3 Julien Aubé
name=i>TELE
547 3 Julien Aubé
user=videolan
548 3 Julien Aubé
machine=OB_Network
549 3 Julien Aubé
site=http://obnet.org
550 3 Julien Aubé
address=225.1.4.3
551 3 Julien Aubé
port=2000
552 3 Julien Aubé
553 3 Julien Aubé
[program]
554 3 Julien Aubé
type=rtp
555 3 Julien Aubé
name=Gulli
556 3 Julien Aubé
user=videolan
557 3 Julien Aubé
machine=OB_Network
558 3 Julien Aubé
site=http://obnet.org
559 3 Julien Aubé
address=225.1.4.5
560 3 Julien Aubé
port=2000
561 3 Julien Aubé
</pre>
562 3 Julien Aubé
563 3 Julien Aubé
h2. Streaming HTTP
564 3 Julien Aubé
565 3 Julien Aubé
Comme indiqué en introduction, le streaming direct en multicast présente des inconvénients:
566 3 Julien Aubé
567 3 Julien Aubé
- Flood constant de tous les ports si le switch ne supporte pas correctement l'IGMP-Proxying 
568 3 Julien Aubé
- Mise à genoux des points d'accès wifi
569 3 Julien Aubé
570 3 Julien Aubé
J'ai donc modifié la configuration comme suis:
571 3 Julien Aubé
572 3 Julien Aubé
h3. Déroutage du trafic multicast sur une interface dummy
573 3 Julien Aubé
574 3 Julien Aubé
Comme DVBlast ne sais pas envoyer du trafic ailleurs que sur une IP multicast, j'ai crée une interface _dummy0_ en ajoutant le module _dummy_ dans _/etc/modules_.
575 3 Julien Aubé
576 3 Julien Aubé
J'ai ensuite ajouter les lignes suivantes dans la section _start_ du fichier /etc/init.d/dvblast, avant le lancement des instances de dvblast:
577 3 Julien Aubé
578 3 Julien Aubé
<pre>
579 3 Julien Aubé
#### Partie à commenter pour envoyer le flux en multicast sur l'interface par défaut
580 3 Julien Aubé
ip link set dummy0 multicast on
581 3 Julien Aubé
ip addr add 10.0.0.100 dev dummy0
582 3 Julien Aubé
ip link set dummy0 up
583 3 Julien Aubé
ip route add 225.1.0.0/16 dev dummy0
584 3 Julien Aubé
######################################################
585 3 Julien Aubé
</pre>
586 3 Julien Aubé
587 3 Julien Aubé
h3. Installation de udproxy
588 3 Julien Aubé
589 3 Julien Aubé
*udpxy* est un petit programme (à installer depuis les sources http://sourceforge.net/projects/udpxy/ car il n'est pas packagé) qui écoute un flux multicast et le met à disposition via une socket HTTP en écoute sur un serveur. Ainsi les chaines sont streamés "à la demande", en unicast.
590 3 Julien Aubé
591 3 Julien Aubé
Il n'y a pas de fichier de configuration: J'ai simplement ajouté dans la section _start_ de _/etc/init.d/dvblast_ la ligne suivante:
592 3 Julien Aubé
<pre>udpxy -R 10 -B 1Mb -c 50 -m dummy0 -p 4022 -a eth1</pre>
593 3 Julien Aubé
594 3 Julien Aubé
595 3 Julien Aubé
Par contre, l'annonce SAP par _minisapserver_ ne sert plus à rien, il faut créer un fichier de playlist adapté:
596 3 Julien Aubé
597 3 Julien Aubé
<pre>
598 1 Julien Aubé
#EXTM3U
599 3 Julien Aubé
#EXTINF:-1,TF1
600 3 Julien Aubé
#EXTVLCOPT:http-caching=5000
601 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.2.1:2000
602 3 Julien Aubé
603 1 Julien Aubé
#EXTINF:-1,France 2
604 1 Julien Aubé
#EXTVLCOPT:http-caching=5000
605 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.1.1:2000
606 3 Julien Aubé
607 3 Julien Aubé
#EXTINF:-1,France 3
608 3 Julien Aubé
#EXTVLCOPT:http-caching=5000
609 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.1.5:2000
610 3 Julien Aubé
611 3 Julien Aubé
#EXTINF:-1,France 4
612 3 Julien Aubé
#EXTVLCOPT:http-caching=5000
613 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.4.6:2000
614 3 Julien Aubé
615 1 Julien Aubé
#EXTINF:-1,France 5
616 1 Julien Aubé
#EXTVLCOPT:http-caching=5000
617 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.1.2:2000
618 3 Julien Aubé
619 1 Julien Aubé
#EXTINF:-1,France O
620 1 Julien Aubé
#EXTVLCOPT:http-caching=5000
621 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.1.3:2000
622 3 Julien Aubé
623 3 Julien Aubé
#EXTINF:-1,ARTE
624 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
625 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.2.4:2000
626 3 Julien Aubé
627 3 Julien Aubé
#EXTINF:-1,M6
628 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
629 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.3.1:5000
630 3 Julien Aubé
631 3 Julien Aubé
#EXTINF:-1,W9
632 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
633 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.3.2:2000
634 3 Julien Aubé
635 2 Julien Aubé
#EXTINF:-1,NRJ12
636 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
637 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.2.2:2000
638 3 Julien Aubé
639 2 Julien Aubé
#EXTINF:-1,TMC
640 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
641 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.2.3:2000
642 3 Julien Aubé
643 3 Julien Aubé
#EXTINF:-1,Direct 8
644 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
645 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.4.1:2000
646 3 Julien Aubé
647 2 Julien Aubé
#EXTINF:-1,NT1
648 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
649 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.3.3:2000
650 3 Julien Aubé
651 3 Julien Aubé
#EXTINF:-1,DirectStar
652 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
653 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.4.4:2000
654 3 Julien Aubé
655 3 Julien Aubé
#EXTINF:-1,LCP
656 3 Julien Aubé
#EXTVLCOPT:http-caching=5000
657 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.1.4:2000
658 3 Julien Aubé
659 2 Julien Aubé
#EXTINF:-1,BFM TV
660 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
661 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.4.2:2000
662 3 Julien Aubé
663 2 Julien Aubé
#EXTINF:-1,i>TELE
664 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
665 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.4.3:2000
666 3 Julien Aubé
667 2 Julien Aubé
#EXTINF:-1,Gulli
668 2 Julien Aubé
#EXTVLCOPT:http-caching=5000
669 3 Julien Aubé
http://192.168.1.100:4022/udp/225.1.4.5:2000
670 2 Julien Aubé
</pre>
671 2 Julien Aubé
672 2 Julien Aubé
h2. Conclusion
673 2 Julien Aubé
674 2 Julien Aubé
Cette configuration est très stable et fonctionne depuis plus d'une semaine sans plantage, ce qui n'était pas le cas de mumudvb. 
675 1 Julien Aubé
676 1 Julien Aubé
J'y vois 2 principaux problèmes:
677 1 Julien Aubé
678 3 Julien Aubé
* Manque de souplesse, en particulier sur les fréquences des émetteurs, et sur les chaînes à diffuser (Parfois les SID changent)
679 3 Julien Aubé
680 3 Julien Aubé
* 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 ? )
681 3 Julien Aubé
682 3 Julien Aubé
*update* : Il semble que pour qu'un système envoie, en IPv4, une annonce IGMP pour les groupes multicast concernés, il est indispensable que le programme emmeteur ajoute, dans le corp du programme, une socket en écoute et fasse un appel IOCTL à IP_ADD_MEMBERSHIP. _mumudvb_ effectue cette opération, mais pas _dvblast_.
683 3 Julien Aubé
684 3 Julien Aubé
Ceci pourrait résoudre le problème du groupage multicast avec dvblast. 
685 3 Julien Aubé
686 3 Julien Aubé
Néanmoins, sur le switch Netgear GS716T le problème reste que en cas d'activation de l'option "Unknow Multicast frame filtering", les trames d'annonces IPv6 sont filtrées avec, sans possibilité de les insérer dans une liste blanche: Une investigation plus poussée semble nécessaire.