Data et TV sur un seul reseau et sur tous les postes

Démarré par foobar, 15 Octobre 2011 à 18:24:06

« précédent - suivant »

0 Membres et 2 Invités sur ce sujet

Bonjour,

Je voudrais partager sur ce forum la solution que j'ai retenue pour distribuer le réseau TV à tous les postes (ordinateurs et TV Ip) chez moi, sans limitations et sans devoir procéder à un double câblage Ethernet.

Au début je pensais que le problème pouvait être résolu avec un switch évolué sur lequel envoyer le flux multicast TV (voir discussion http://www.k-net.fr/forum/index.php?topic=15.0 ) : des ACL (listes de contrôle d'accès) pour sécuriser le réseau de l'extérieur et l'activation du IGMP Snooping pour s'assurer que seulement les postes qui demandent un flux TV le reçoivent, ceci pour éviter que le flux multicast qui peut arriver à 10 – 20 mbit/s (si on regarde plusieurs chaines simultanément) soit aussi transmis sur la borne Wifi.

(http://178.250.215.74/APIgmpProxy/Fig1.png)
Fig 1

Ceci ne marche pas, car la possibilité de sécuriser le port du switch ou on connecte le flux TV du CPE est trop limité, et la quantité de broadcast qui passent d'un réseau à l'autre est très importante avec des plantages du CPE. En plus, je n'ai jamais réussi à avoir plus de 2 postes qui reçoivent simultanément le flux multicast (sauf s'ils regardent la même chaine), comme s'il existait une limitation coté SIEA. A ceci s'ajoute une limitation aux nombre d'adresses Mac qui peuvent recevoir le flux TV. En faisant des tests, je suis arrivé à la conclusion que si on coupe et on redémarre le CPE on peut surmonter cette limitation du nombre d'adresse mac différents (comme si cette limitation était due au CPE), mais bref, le minimum qu'on puisse dire est que cette solution n'était pas fiable.

Cette limitation est indépendante de la connexion au réseau LAN ou internet. En effet, j'ai constaté la même limitation en mettant simplement un switch simple en aval de la prise TV. Apres le redémarrage du CPE, seulement les 2/3 premiers postes peuvent s'abonner au flux multicast, les autres sont ignorés. Par contre, un seul client peut voir autant de chaines simultanés qu'il le désire (vérifié en mettant un seul PC avec plusieurs sessions de VLC en parallèle).

(http://178.250.215.74/APIgmpProxy/Fig2.png)
Fig 2

Donc, la seule solution est celle de mettre un router (capable de router les flux multicast – et seulement ceux-ci) entre le port TV du CPE et le réseau interne. Il s'agit de router les paquets UDP à destination de 224.0.0.0/4 et le protocole IGMP qui contrôle les abonnements / désabonnements. Une possibilité aurait été celle de mettre un petit boitier linux (Alix2d de pcengines.ch comme dit par Snipe Foo) et faire tourner IgmpProxy, mais dans mon cas, j'avais déjà un serveur de fichiers / serveur web toujours allumé qui aurait pu faire l'affaire.

Donc, la première chose a été l'achat d'une carte Ethernet (à 13 CHF http://prodimex.ch/pInfos.aspx?CODE=TEGPCITXR ) que j'ai installé dans le PC de mon serveur de fichiers. J'ai branché la sortie TV du CPE sur la deuxième interface réseau de mon serveur.

(http://178.250.215.74/APIgmpProxy/Fig3.png)
Fig 3

Ensuite j'ai cherché une implémentation d'un router IGMP freeware pour Windows, sans succès. Mais je me suis rendu compte que c'est assez simple à faire soi-même car il s'agit, tout simplement de
1)   Prendre tous les paquets UDP à destination de 224.0.0.0/4  reçus sur l'interface TV du 'serveur' et les envoyer vers le réseau LAN (flux multicast)
2)   Prendre tous les paquets IGMP 'query' reçus sur l'interface TV du 'serveur' et les envoyer vers l'interface LAN du serveur
3)   Prendre tous les paquets IGMP 'membership request' et 'leave' reçus sur l'interface LAN du 'serveur' et les envoyer vers l'interface TV du serveur
Naturellement, étant un router,  il faut garder une table des abonnements actifs et réécrire les adresses source/destination correctement pour chaque paquet et recalculer les checksum. A part ces détails, pas d'autres difficultés, et ... Ça marche !

Vous pouvez voir une démonstration de cette solution sur cette vidéo:
http://www.youtube.com/watch?v=1DeE3R_Fu_E
La vidéo montre 3 PCs qui demandent indépendamment plusieurs chaines simultanément.

Résultat:
1)   Coté CPE, le réseau SIEA voit seulement un poste (l'adresse MAC de la carte à 13 CHF) et un seul poste TV – qui demande plusieurs chaines.
2)   Je peux voir toute chaine à partir de n'importe quel poste
3)   Chaque poste peut voir une ou plusieurs chaines
4)   Chaque poste a aussi accès complet à internet avec le réseau 100 mbit/s
5)   Un seul câblage dans la maison
6)   Le réseau LAN est complètement masqué, invisible et protégé.
7)   J'arrive à voir sans problème 4 - 5 chaines différentes simultanément, sur des postes différents. La limitation est dans la vitesse de mon router 'serveur' (un vieux PC) et vu que l'interface TV du CPE est simplement du fastethernet 100 mbit/s, il y a une limite théorique max de 7-8 chaines HD simultanés.

(http://178.250.215.74/APIgmpProxy/Fig4-AGMP-Proxy-Image.png)
Fig 4 router

Cerise sur le gâteau : avec le switch 'manageable' (j'ai un Netgear GS108Tv2), en activant le IGMP snooping, les flux multicasts TV sont envoyé uniquement vers les ports du switch ou il y a un poste qui a demandé le flux. Avec ce router, aucun problème avec le réseau Wi-Fi qui ne reçoit pas les flux TV. Le switch peut être configuré pour permettre ou interdire les requêtes IGMP entrantes pour chaque port. Il est donc possible d'empêcher le flux multicast d'arriver sur le Wi-Fi ou sur certain postes sur lesquels on ne veut pas qu'il soit possible de recevoir la télé.

(http://178.250.215.74/APIgmpProxy/Fig5-IGMPSnooping.png)
Fig 5 Switch

S'il y a intérêt, mon logiciel est à disposition a cette adresse: http://178.250.215.74/APIgmpProxy/ApIgmpProxySetup.zip . Il a été testé sur windows 7 et XP, il utilise la librairie winpcap et le .net framework 4. Pour l'installer il faut :
1)   Installer la librairie winpcap à telecharger sur : http://www.winpcap.org/install/default.htm (la version testee est la 4.1.2)
2)   Installer la deuxième carte reseau et la connecter au port TV du CPE. Même si y il a un serveur DHCP sur le reseau IPTV de la SIEA, je conseille de mettre une adresse IP fixe (arbitraire) car le « lease DHCP » est valable uniquement une heure et ceci déconnecte l'interface TV du serveur toutes les heures et necessite un redemarrage du router. Aussi ne pas oublier de activer le firewall sur l'interface TV du serveur et de désactiver tous sauf 'Internet Protocol version 4' dans les propriétés de la connexion réseau.
(http://178.250.215.74/APIgmpProxy/Fig6-Network.png)
Fig 6
3)   Installer mon logiciel. Attention, il nécessite le .NET Framework 4.0 et l'installation va vous rediriger sur le site Microsoft pour le télécharger s'il n'est pas déjà installé.
4)   Le démarrer et le configurer en choisissant correctement les 2 interfaces IPTV et LAN. Pour voir les chaines du réseau SIEA, mettre 225.1.0.0 / 0.0.3.255 dans les 'allowed multicast group' address / mask. Ceci permettra seulement le routage des flux 255.1.y.xxx (avec y = 0,1,2,3) qui correspondent aux adresses multicast du réseau télé.
5)   Laisser les timeout à leur valeur par défaut. Le 'Multicast subscription timeout' est le temps sans nouvelles d'un client coté LAN après lequel le router annule une souscription coté réseau IPTV. Le 'router restart timeout' est le temps après lequel le router redémarre s'il ne reçoit pas de paquet IGMP Query coté IPTV.

Le gros désavantage de cette solution est qu'il faut un PC toujours allumé pour que le tout fonctionne. Si on l'a déjà (serveur de fichiers, serveur web, serveur home cinéma, ...) alors la solution est intéressante. Si on doit mettre un PC dédié juste pour la télé, c'est peut-être moins intéressant qu'un double câblage ad hoc.

Par contre, le router nécessite très peu de ressources. Sur mon 'vieux' PC avec un processeur Intel E7400, 2.8 GHz, 2 GB Ram qui tourne Windows XP le router nécessite moins de 2 % de CPU et 10 MB RAM pour router 3 chaines HD (3 Mbytes/s – 25 mbit/s) et donc il pourrait sans difficulté tourner dans un petit PC (même un micro PC embedded de pcengines.ch). Mes mesures montrent que les chaines HD sont encodées à 8 Mbit/s (1 Mbyte/s), les chaines définition simple à 3-4 Mbit/s (400 – 500 Kbyte/s).

(http://178.250.215.74/APIgmpProxy/Fig7-CpuUsage.png)
Fig 7

Avant de conclure, un remerciement aux membres de ce forum qui m'ont aidé avec leur posts ou en répondant à mes questions : Snipe Foo, StephaneL, fb (Equipe K-net), Steph01, felix_clerc, redge76, et ... Adrien (Grelet).

-- foobar

 :P
Chapeau bas ! Le top...

Allez Mrs du SIEA, ne m'oubliez pas, je suis trop impatient d'avoir cette fibre...
DcaMan

Hello Foobar,

J'aurais une petite question concernant tous cela.
Ne serait-il pas possible d'intégrer tout ce fonctionnement directement dans le routeur Knet ? Je pense à des Firmware DD-WRT ou Tomato avec lesquels cela semble possible ?
(http://blog.lvengine.com/articles/howto-setup-netgear-3500l-using-tomato-for-meo-fibra-service-internet-iptv)
Cela éviterait d'avoir l'équivalent d'un PC pour cela...

A+
DcaMan

Dacanam,

Malheureusement le router Netgear WDR3500 est un router qui a seulement 2 interfaces reseau avec un switch integré 4 ports. On ne peut pas router les paquets entre les 4 ports LAN du router Netgear WDR3500 ed donc on ne peut pas router les paquets entre 3 interfaces (WAN / LAN /IPTV).

Soit on met un router avec 3 interfaces (example de snipe foo deja mentionne dans mon post initial avec http://pcengines.ch/alix2d3.htm) et on adapte le logiciel, soit on met 2 routers: un qui route les paquets entre WAN et LAN, l'autre qui route les paquets entre IPTV et LAN.

-- foobar

@foobar : très intéressant comme travail, on voit qu'il y en a qui se creusent la tête !

Adrien Grelet
Equipe K-Net

Je plussoie: beau boulot!

Pas sûr que ça le fasse sur mon infra Forefront - et de toute façon j'ai un serveur TV virtuel qui fait à peu près la même chose.

Ce que j'aimerais bien savoir, c'est la qualité. Jusqu'à présent, j'ai énormément de lag, freeze, blocs... Et je me demande toujours si c'est mon mediaportal qui est en cause, ou la qualité du flux TV du SIEA.

Donc, petite question à foobar: La qualité de la TV sur les poste, c'est comment?

#6
foobar:
Pour info, le routeur 3500L est capable de faire tout ca....
J'avais plus ou moins réussi a le faire, mais comme je n'ai pas de télé et qu'a l'époque je n'étais pas très motivé pour ecrire une doc, je n'ai pas vraiment poussé plus loin.
(ou je sais je peux regarder la tele avec VLC, mais je trouve les émissions tellement pourries que ca me motive même pas... enfin vive youtube)

Ce routeur n'a pas de 1 port WAN et 4 port LAN mais un switch avec 5 ports que l'on peut assigner a n'importe quel VLAN. Regarde sur cette page il y a un joli diagramme:
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=421072&sid=97614976e3b33d652d5e2c7ede8bc195
(Ca concerne le WRT54G mais the 3500L est fait exactement pareil a part que les ports sont numérotés dans l'autre sens... C'est un SOC broadcom)

Pour faire tout ca, il faut:
Flasher en DD-WRT
Brancher le port DATA du CPE sur le port 4 du switch interne
Brancher le port CPE TV sur le port 3 du switch interne
mettre les 2 ports dans 2 VLAN séparés
Ajouter une ip dans les 2 VLAN
bidouiller avec IPTABLES pour faire le routage des paquets
Il est aussi possible d'utiliser un IGMP proxy:
http://sourceforge.net/projects/igmpproxy/
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=7170
(pour recompiler il faut utilise la toolchain sous linux. Je sais plus ou ca se trouve ...Mais tu vas bien trouver)


Voila.
Si quelqu'un se lance la dedans et  bloque sur kkchose je peux essayer de me rappeler de que j'avais fait. Mais forcement vu que j'avais rien noté....

A+
redge

@felix_clerc

J'ai fait plusieurs test avec la télé pour m'assurer de ne pas perdre des paquets UDP. Perte qui pourrait être à la source d'une vidéo dégradée ou d'un son saccadé. Pour cela j'ai capturé (avec wireshark) le flux sortant de l'interface IPTV du CPE dans un fichier pour ensuite le comparer avec celui reçus par les postes PC qui utilisent VLC.

Ma conclusion est que le réseau et le router sont très fiables car après plusieurs heures de fonctionnement, aucun paquet a été perdu. Et, en envoyant le flux capturé vers des PCs 'suffisamment  performant' (un AMD Phenom X4 920 @2.8GHz avec Geforce 8600GT, AMD X2 @2.5 GHz avec ATI  5700 HD, Intel E7400 X2 @ 2.8 GHz avec Intel Graphics Media Accelerator X4500, Mac book Pro) j'ai toujours eu une vidéo HD impeccable. Par contre, en envoyant le même flux HD vers des PCs un peu plus anciens (Athlon X2 @2.8 GHz, Pentium @ 3.2 GHz, Sempron @2.8GHs, Ancien PC portable) son et image étaient saccadés, avec plantage de VLC après quelque minute. Par contre, les flux en définition standard étaient Ok sur tous les postes.

Selon ces tests, pour voir la télé en haute définition, il faut soit une bonne carte graphique, soit un processeur musclé. Comme test, il faut vérifier que le PC puisse lire une vidéo HD encodée en full HD 1080p à partir d'un fichier saufgardé  sur un autre poste sur le réseau local (un rip d'un disque bluray par exemple) avec VLC (et pas avec Microsoft Media Player qui est plus optimisé, il demande moins de ressource mais ne supporte pas les flux multicast UDP).

Ma conclusion pour l'instant est que le flux TV de la SIEA a une bonne qualité et la ou l'image est saccadé ou VLC se plante, c'était l'hardware du PC qui était sous-dimensionné. Mais je ne suis pas catégorique car ... je ne regarde presque jamais la télévision. J'ai peut-être eu de la chance et fait tous mes test une soirée ou le réseau TV marchait parfaitement.

@redge76

Tu as parfaitement raison ! Effectivement en utilisant des VLAN on peut tout simplement avoir un router qui route les paquets entre différent VLAN avec une seule interface réseau, si on à disposition un  switch avec des ports que l'on peut assigner à n'importe quel VLAN (et le router Netgear c'est exactement ca). Et je pense que le 3500L est suffisamment performant pour faire l'affaire.

Excellente information !

-- foobar