<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christophe Nowicki &#187; MuMuDVB</title>
	<atom:link href="http://www.csquad.org/tag/mumudvb/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.csquad.org</link>
	<description>Just for fun</description>
	<lastBuildDate>Fri, 14 Jan 2011 08:32:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Diffuser des flux TV sur réseau local avec MuMuDVB</title>
		<link>http://www.csquad.org/2009/07/12/diffuser-des-flux-tv-sur-reseau-local-avec-mumudvb/</link>
		<comments>http://www.csquad.org/2009/07/12/diffuser-des-flux-tv-sur-reseau-local-avec-mumudvb/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 21:22:27 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Freevo]]></category>
		<category><![CDATA[MuMuDVB]]></category>
		<category><![CDATA[TNT]]></category>
		<category><![CDATA[TV]]></category>
		<category><![CDATA[VLC]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=220</guid>
		<description><![CDATA[Je viens d&#8217;ajouter la diffusion des flux TV à mon installation domotique.
L&#8217;objectif est de pouvoir visionner la télévision sur l&#8217;ensemble des équipements de la maison.
Pour cela, j&#8217;ai mis en place un serveur de diffusion.
Celui-ci distribue la vidéo en Multicast à l&#8217;aide du programme MuMuDVB.
Préambule
Je sens qu&#8217;après la lecture de la courte description, vous allez me [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens d&#8217;ajouter la diffusion des flux TV à mon <a href="/installation-domotique/">installation domotique</a>.<br />
L&#8217;objectif est de pouvoir visionner la télévision sur l&#8217;ensemble des équipements de la maison.<br />
Pour cela, j&#8217;ai mis en place un serveur de diffusion.<br />
Celui-ci distribue la vidéo en <a href="http://fr.wikipedia.org/wiki/Multicast">Multicast</a> à l&#8217;aide du programme <a href="http://mumudvb.braice.net/mumudvbwiki/index.php/Main_Page">MuMuDVB</a>.</p>
<h3>Préambule</h3>
<p>Je sens qu&#8217;après la lecture de la courte description, vous allez me dire : </p>
<p><em>&#8220;Mais tu ne connais pas le <a href="http://www.free.fr/assistance/294-freebox-multiposte-presentation-du-service-multiposte.html">multiposte</a> chez Free???&#8221;.<br />
</em></p>
<p>É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&#8217;existant : </p>
<ul>
<li>la limitation à deux postes (et encore si vous avez un bon débit) ; </li>
<li>l&#8217;empiètement sur la bande passante des autres services ;</li>
<li>l&#8217;absence de chaînes culturelles^W comme TF1 et M6.</li>
</ul>
<h3>Matériel nécessaire</h3>
<p>Vous avez besoin :</p>
<ul>
<li>d&#8217;un poste client avec <a href="http://www.videolan.org/vlc/">vlc</a> ou <a href="http://www.mplayerhq.hu/">mplayer</a> ;</li>
<li>d&#8217;un serveur de diffusion (sous Debian GNU/Linux de préférence <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )  avec <a href="http://mumudvb.braice.net/mumudvbwiki/index.php/Main_Page">MuMuDVB</a> ;</li>
<li>d&#8217;un réseau local ;</li>
<li>d&#8217;une carte tuner TV numérique (DVB-T, DVB-S, DVB-C) ; </li>
</ul>
<p>Pour ma part, j&#8217;ai pris une carte tuner <a href="http://linuxtv.org/wiki/index.php/Hauppauge_WinTV-NOVA-T-500">Hauppauge WinTV NOVA T-500</a> chez <a href="http://www.materiel.net/">Materiel.net</a>.</p>
<h3>Les limitations en fonction de la technologie de diffusion </h3>
<p>Vous avez le choix parmi les technologies de réceptions suivantes :</p>
<ul>
<li>DVB-T (Télévision numérique terrestre ou TNT) ;</li>
<li>DVB-S (Satellite) ;</li>
<li>DVB-C (Câble).</li>
</ul>
<p>Les émetteurs diffusent plusieurs chaînes sur une fréquence (4 à 6).<br />
Un tuner DVB, ne peut capter qu&#8217;une seule fréquence, cela veut donc dire qu&#8217;avec ma carte <em>Hauppauge WinTV NOVA T-500</em>, je peux diffuser au maximum 8 à 12 chaînes.<br />
Il faut donc ajouter d&#8217;autres cartes / tuner en fonction du nombre de chaînes que vous voulez diffuser.</p>
<h3>Installation de mumudvb</h3>
<p>Pour les versions &#8220;sid&#8221; et &#8220;squeeze&#8221; de Debian,  le paquet est directement disponible via apt.<br />
Pour la version stable,  vous pouvez télécharger le paquet sur <a href="http://mumudvb.braice.net/mumudvbwiki/index.php/T%C3%A9l%C3%A9chargement">le site du projet</a> ou &#8220;back-porter&#8221; la version sid/squeeze.</p>
<h3>Installation de la carte tuner DVB-T</h3>
<p>Ma carte est reconnue sans problème,  il faut simplement télécharger le firmware, le copier dans le répertoire <em>/lib/firmware</em> et charger le module <strong>dvb_usb_dib0700</strong>.<br />
Vous devez ensuite avoir les différents tuner dans le répertoire : <em>/dev/dvb</em><br />
<code>$ ls /dev/dvb<br />
adapter0  adapter1</code></p>
<h3>Recherche des fréquences</h3>
<p>Pour trouver les fréquences des chaînes de télévision, il faut installer le paquet <em>dvb-apps</em>.<br />
Celui-ci contient les fréquences des différents transpondeurs dans le répertoire <em>/usr/share/dvb</em>.<br />
Dans le cas de mon émetteur, je trouve les informations dans le fichier : <em>/usr/share/dvb/dvb-t/fr-Paris</em> :<br />
<code># Paris - France - various DVB-T transmitters<br />
# contributed by Alexis de Lattre<br />
# Paris - Tour Eiffel      : 21 24 27 29 32 35<br />
# Paris Est - Chennevières : 35 51 54 57 60 63<br />
# Paris Nord - Sannois     : 35 51 54 57 60 63<br />
# Paris Sud - Villebon     : 35 51 56 57 60 63<br />
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy<br />
T 474166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE<br />
T 498166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE<br />
T 522166000 8MHz 2/3 NONE QAM64 8k 1/32 NONE<br />
</code></p>
<h3>Configuration de MumuDVB</h3>
<p>Pour la configuration de MumuDVB, nous allons nous créer un répertoire spécial <em>/etc/mumudvb</em> et faire un fichier de configuration par carte.<br />
Voici le contenu de mon fichier <em>/etc/mumudvb/card0.conf</em> :<br />
<code><br />
autoconfiguration=2<br />
freq=474166<br />
</code><br />
Celui-ci contient la fréquence issue du fichier <em>fr-Paris</em> et une directive pour dire à MumuDVB de se débrouiller <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Vous pouvez ensuite tester cette configuration en ligne de commande à l&#8217;aide d&#8217;un compte utilisateur qui fait parti du groupe vidéo :<br />
<code><br />
$ id<br />
$ mumudvb -d -c /etc/mumudvb/card0.conf<br />
</code></p>
<p>Les images sont diffusées sur le réseau, nous pouvons passer à la phase la plus dur du projet : le visionage <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Visionage avec VLC</h3>
<table>
<tr>
<td>
<a href="http://www.csquad.org/wp-content/uploads/2009/07/vlc_mumudvb_sap.png"><img src="http://www.csquad.org/wp-content/uploads/2009/07/vlc_mumudvb_sap-300x170.png" alt="vlc_mumudvb_sap" title="vlc_mumudvb_sap" width="300" height="170" class="alignnone size-medium wp-image-234" /></a>
</td>
<td valign="top">
Mumudvb prend en charge le protocole <a href="http://www.faqs.org/rfcs/rfc2974.html">Session Announcement Protocol (SAP)</a>.<br />
Il suffit donc de lancer VLC, afficher la liste de lecture, et activer la découverte de service SAP.
</td>
</tr>
</table>
<h3>Configuration de Freevo</h3>
<p>Pour afficher les chaînes dans Freevo, il  faut les définir  dans le fichier de configuration <em>local_config.py</em> de cette manière :<br />
<code><br />
TV_VIDEO_GROUPS[0].group_type = 'udp'<br />
TV_CHANNELS = [<br />
    ( 'C2.telepoche.com', 'France 2', '@239.100.1.1:1234' ),<br />
    ( 'C3.telepoche.com', 'France 3', '@239.100.1.5:1234' ),<br />
    ( 'C28.telepoche.com', 'France 4', '@239.100.0.5:1234' ),<br />
    ( 'C7.telepoche.com', 'France 5',  '@239.100.1.2:1234'),<br />
    ( 'C5.telepoche.com', 'ARTE',  '@239.100.1.4:1234' ),<br />
    ( 'C167.telepoche.com', 'Direct 8',  '@239.100.0.0:1234' ),<br />
    ( 'C195.telepoche.com', 'Gulli',  '@239.100.0.4:1234' ),<br />
    ( 'C194.telepoche.com', 'BFM TV',  '@239.100.0.1:1234'),<br />
    ( 'C170.telepoche.com', 'LCP',  '@239.100.1.3:1234')<br />
]<br />
</code><br />
Le <em>group_type</em> udp, n&#8217;est pas pris en compte par le plugin mplayer de Freevo, il faut donc modifier le fichier <em>/usr/lib/python2.5/site-packages/freevo/tv/plugins/mplayer.py</em>, vers la ligne 134, pour l&#8217;ajouter :<br />
<code><br />
            elif vg.group_type == 'udp':<br />
                self.fc.chanSet(tuner_channel, True, app='mplayer')<br />
                tvcmd = ''<br />
                args += ('"udp://%s" %s' % (tuner_channel, config.MPLAYER_ARGS['udp']),)<br />
</code><br />
Vous pouvez, modifier les options de mplayer à l&#8217;aide de la variable <em>MPLAYER_ARGS</em> :<br />
<code><br />
MPLAYER_ARGS = { 'dvd'    : '-cache 8192',<br />
                  ...<br />
                 'udp'   :  '-cache 1024 -vf pp=md -fs',<br />
                 'default': '-cache 5000'<br />
                 ....<br />
                 }</code></p>
<p>Comme cela, vous pouvez afficher la télévision sur Freevo. Par contre, la qualité de l&#8217;image est inférieure à celle de VLC, mais je n&#8217;ai pas encore trouver la source du problème.  </p>
<h3>Charge réseau et processeur</h3>
<table>
<tr>
<td>
<a href="http://www.csquad.org/wp-content/uploads/2009/07/iftop_mumudvb.png"><img src="http://www.csquad.org/wp-content/uploads/2009/07/iftop_mumudvb-300x243.png" alt="iftop_mumudvb" title="iftop_mumudvb" width="300" height="243" class="alignnone size-medium wp-image-242" /></a>
</td>
<td valign="top">
<p>Au niveau de la charge réseau, une chaîne nécessite de 2 à 5Mb, cela signifie qu&#8217;avec une interface réseau à 100Mb, il est possible de diffuser plus de 20 chaînes.</p>
<p>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&#8217;après le Wiki de Mumudvb il est possible de faire fonctionner sur un <a href="http://en.wikipedia.org/wiki/NSLU2">NSLU2</a> avec un dongle TNT USB.</p>
</td>
</tr>
</table>
<p>Par contre, si vous voulez transcoder le flux vous allez avoir besoin d&#8217;une ou de plusieurs bonnes machines.</p>
<h3>Affichage d&#8217;une Mosaic de chaînes</h3>
<table>
<tr>
<td>
<a href="http://www.csquad.org/wp-content/uploads/2009/07/vlc_mosaic_mumudvb.png"><img src="http://www.csquad.org/wp-content/uploads/2009/07/vlc_mosaic_mumudvb-300x267.png" alt="vlc_mosaic_mumudvb" title="vlc_mosaic_mumudvb" width="300" height="267" class="alignnone size-medium wp-image-239" /></a></td>
<td valign="top">
<p>Si vous voulez, une Mosaic, il est possible d&#8217;assembler les flux udp avec VLC.<br />
La procédure est décrite sur le wiki de VLC : <a href="http://wiki.videolan.org/Mosaic">Mosaic &#8211; VideoLAN Wiki</a>.</p>
</td>
</tr>
</table>
<h3>Attention : pont réseau + OpenVPN + Mutlicast = Crash</h3>
<p>
Il faut faire attention, si vous utilisez des ponts réseaux (Bridge) avec <a href="http://openvpn.net/">OpenVPN</a>.</p>
<p>Dans ce cas très précis, OpenVPN s&#8217;amuse à chiffrer l&#8217;ensemble des paquets qui arrivent dans le bridge.<br />
Si votre machine n&#8217;est pas suffisamment puissante, alors OpenVPN va planter au bout de quelques minutes : </p>
<p><code>Sun Jul 12 22:46:25 2009 us=801259 MULTI: packet dropped due to output saturation (multi_add_mbuf)</code></p>
<p>La meilleure chose à faire est donc de bloquer le flux <em>multicast</em> au niveau du bridge avec <a href="http://ebtables.sourceforge.net/">ebtables</a>.</p>
<h3>Des éléphants dans le salon</h3>
<p>Si votre réseau Ethernet supporte les <a href="http://en.wikipedia.org/wiki/Jumbo_frame">Jumbo Frames</a>.<br />
Il suffit de modifier la taille  des paquets distribués par Mumudvb dans le fichier <em>mumudvb.h</em> :<br />
<code>$ fgrep MAX_UDP_SIZE /usr/src/mumudvb/src/mumudvb.h<br />
#define MAX_UDP_SIZE (TS_PACKET_SIZE*46)</code><br />
Après avoir recompilé le programme, vous pouvez vérifier que cela fonctionne avec Tcpdump :<br />
<code># tcpdump -i bond0 port 1234<br />
13:30:59.830361 IP loutre.csquad.lan.1234 > 239.202.204.200.1234: UDP, length 8648</code><br />
Le principal avantage des Jumbo Frames est de réduire le nombre de paquets sur le réseau.  </p>
<h3>Conclusion</h3>
<p>Les principaux avantages du passage de mon système de télévision en numérique et l&#8217;adaptation du standard <a href="http://en.wikipedia.org/wiki/DVB">DVB</a> sont :</p>
<ul>
<li>la possibilité de diffuser le flux sur plusieurs postes ;</li>
<li>il n&#8217;y a plus de limite pour l&#8217;enregistrement du flux ;</li>
<li>la possibilité de modifier le flux (transcodage, mosaic, etc..) ; </li>
<li>la possibilité d&#8217;avoir la télévision sur des appareils mobiles ; </li>
<li>au niveau du câblage domotique, la diffusion la télévision via le Wifi et/ou l&#8217;Ethernet.</li>
</ul>
<p>Je vais faire d&#8217;autres articles sur le sujet, pour expliquer comment j&#8217;ai réussi à diffuser le flux TV sur ma <a href="http://en.wikipedia.org/wiki/PlayStation_Portable">PlayStation Portable (PSP)</a> et mon <a href="http://en.wikipedia.org/wiki/Nokia_770">Nokia 770</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/07/12/diffuser-des-flux-tv-sur-reseau-local-avec-mumudvb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

