Projet

Général

Profil

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

Julien Aubé, 29/09/2011 18:15

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