<?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>Le blog de NicoLargo &#187; Open-source</title>
	<atom:link href="http://blog.nicolargo.com/category/open-source/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.nicolargo.com</link>
	<description>"Tribulations d'un blogger dans le monde des logiciels libres et du Web..."</description>
	<lastBuildDate>Sat, 04 Jul 2009 16:08:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Installation pas à pas de Xen sous Debian</title>
		<link>http://blog.nicolargo.com/2009/06/installation-pas-a-pas-de-xen-sous-debian.html</link>
		<comments>http://blog.nicolargo.com/2009/06/installation-pas-a-pas-de-xen-sous-debian.html#comments</comments>
		<pubDate>Mon, 29 Jun 2009 10:58:05 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/installation-pas-a-pas-de-xen-sous-debian.html</guid>
		<description><![CDATA[Le but de ce billet est d'installer un serveur de de virtualisation Xen (Wiki) sur un système GNU/Linux Debian. Ce dernier pourra héberger de manière virtuelle (c'est à dire sur la même machine physique) un nombre important de serveurs, mutualisant ainsi votre hardware.
Installation du serveur Xen
J'ai choisi d'héberger mon serveur de virtualisation Xen (on appelle [...]]]></description>
			<content:encoded><![CDATA[<p><font face="sans-serif"><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/xen_logo.gif" />Le but de ce billet est d'installer un serveur de de virtualisation Xen (<a href="http://fr.wikipedia.org/wiki/Xen"><small>Wiki</small></a>) sur un système GNU/Linux Debian. Ce dernier pourra héberger de manière virtuelle (c'est à dire sur la même machine physique) </font>un nombre important de serveurs, mutualisant ainsi votre hardware.<br />
<h1>Installation du serveur Xen<br /></h1>
<p>J'ai choisi d'héberger mon serveur de virtualisation Xen (on appelle cette machine le dom0 pour "domaine 0" dans le jargon Xen) sur la machine suivante:</p>
<p><b><i><small>HP Proliant DL145<br />AMD Optron 64<br />2 Go RAM<br />2 disques durs de 80 Go en RAID 1 (LVM)<br />Système d'exploitation: GNU/Linux Debian Lenny 5</small></i></b></p>
<p>J'ai effectué une installation standard à partir du CD d'installation de la Debian 5.0 en appelant ma machine virt1 et en installant comme seul et unique service le daemon OpenSSH (pour un accès à distance).</p>
<p>Ensuite, il faut procéder à l'installation de Xen et de ses utilitaires:<br />
<blockquote>aptitude install xen-hypervisor-i386 xen-linux-system-2.6.26-2-xen-686 xen-utils xen-tools xen-shell xenwatch xenstore-utils</p></blockquote>
<p>On configure ensuite le réseau de la manière à transformer notre machine dom0 en bridge. Pour cela, on édite le fichier /etc/xen/xend-config.sxp et on remplace la ligne:<br />
<blockquote><font color="#666666">(network-script network-dummy)</font><br />par <br />(network-script network-bridge)</p></blockquote>
<p>On reboot notre système pour prendre en compte le noyau supportant Xen:<br />
<blockquote>reboot</p></blockquote>
<h1>Configuration du serveur Xen</h1>
<p>Nous allons utiliser xen-tools pour administrer nos serveurs virtuels. Pour cela il faut éditer le fichier de configuration (/etc/xen-tools/xen-tools.conf) de la manière suivante (en gras les options à adapter selon votre configuration):<br />
<blockquote><b>dir = /xen</b><br />install-method = debootstrap<br />size&nbsp;&nbsp; = 4Gb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Disk image size.<br />memory = 128Mb&nbsp;&nbsp;&nbsp; # Memory size<br />swap&nbsp;&nbsp; = 128Mb&nbsp;&nbsp;&nbsp; # Swap size<br />fs&nbsp;&nbsp;&nbsp;&nbsp; = ext3&nbsp;&nbsp;&nbsp;&nbsp; # use the EXT3 filesystem for the disk image.<br />dist&nbsp;&nbsp; = etch&nbsp;&nbsp;&nbsp;&nbsp; # Default distribution to install.<br />image&nbsp; = sparse&nbsp;&nbsp; # Specify sparse vs. full disk images.<br /><b>gateway&nbsp;&nbsp; = 192.168.29.1<br />netmask&nbsp;&nbsp; = 255.255.255.0</b><br />passwd = 1<br />kernel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /boot/vmlinuz-`uname -r`<br />initrd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /boot/initrd.img-`uname -r`<br />mirror = http://ftp.lip6.fr/pub/linux/distributions/debian/<br />ext3_options&nbsp;&nbsp; = noatime,nodiratime,errors=remount-ro<br />ext2_options&nbsp;&nbsp; = noatime,nodiratime,errors=remount-ro<br />xfs_options&nbsp;&nbsp;&nbsp; = defaults<br />reiser_options = defaults<br /><b>serial_device = hvc0<br />disk_device = xvda</b></p></blockquote>
<p>On pense également à créer le répertoire qui contiendra les domaines hôtes (/xen dans ma configuration):<br />
<blockquote>mkdir /xen</p></blockquote>
<h1>Installation d'un serveur virtuel<br /></h1>
<p>Nous allons commencer par ajouter un nouveau serveur virtuel (que l'on appelle domU pour "domaine Users" dans le jargon Xen) à notre configuration. Cette action se fait de manière très simple grâce à la commande suivante (attendre quelques minutes):<br />
<blockquote># xen-create-image --hostname=servvirt1.mondomaine.com --size=10Gb --swap=512Mb --ip=192.168.29.171 --memory=256Mb --arch=i386 --role=udev<br /><font color="#666666"><small>General Information<br />--------------------<br />Hostname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; servvirt1.mondomaine.com<br />Distribution&nbsp;&nbsp; :&nbsp; etch<br />Partitions&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512Mb (swap)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10Gb&nbsp; (ext3)<br />Image type&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; sparse<br />Memory size&nbsp;&nbsp;&nbsp; :&nbsp; 256Mb<br />Kernel path&nbsp;&nbsp;&nbsp; :&nbsp; /boot/vmlinuz-2.6.26-2-xen-686<br />Initrd path&nbsp;&nbsp;&nbsp; :&nbsp; /boot/initrd.img-2.6.26-2-xen-686</p>
<p>Networking Information<br />----------------------<br />IP Address 1&nbsp;&nbsp; : 192.168.29.171 [MAC: 00:16:3E:8B:F0:9E]<br />Netmask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 255.255.255.0<br />Gateway&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 192.168.29.1</small></font></p></blockquote>
<p>Xen va alors créer un serveur virtuel disposant d'un disque de 10 Go, d'un taille de swap de 512 Mo et d'une mémoire de 256 Mb. L'adresse IP de ce nouveau serveur virtuel sera 192.168.29.171. Le mot de passe root du système vous sera demandé en fin d'installation.</p>
<p>Un fichier de configuration dédié a ce nouveau serveur a été généré: <b>/etc/xen/servvirt1.mondomaine.com.cfg</b><br />
<h1>Gestion du serveur virtuel</h1>
<h2>Démarrage du serveur virtuel</h2>
<p>Pour lancer le serveur virtuel préalablement créé, il faut saisir la commande:<br />
<blockquote>xm create <b>/etc/xen/servvirt1.mondomaine.com.cfg</b></p></blockquote>
<p>Vous pouvez alors vous connecte dessus en SSH:<br />
<blockquote>ssh root@<b>servvirt1.mondomaine.com</b></p></blockquote>
<p>Pour automatiser le démarrage de ce serveur virtuel (domU) au lancement de votre serveur hôte (dom0), il faut créer le lien suivant:<br />
<blockquote>ln -s /etc/xen/<b>servvirt1.mondomaine.com</b>.cfg /etc/xen/auto/host1.cfg</p></blockquote>
<p>Cette commande permet de séquencer le lancement des serveurs domU dans un certain ordre. Cela peut être utile si le service hébérgé sur un serveur virtuel dépend d'un autre...<br />
<h2>Autres commandes utiles à l'administration de vos serveurs virtuels</h2>
<p>Pour arrêter un serveur virtuel:<br />
<blockquote>xm shutdown <b>servvirt1.mondomaine.com</b></p></blockquote>
<p>Pour voir la liste des serveurs virtuelles lancées:<br />
<blockquote># xm list<br /><font color="#666666"><small>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp; Mem VCPUs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp; Time(s)</small></font><br /><font color="#666666"><small>Domain-0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 1765&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; r-----&nbsp;&nbsp;&nbsp; 106.7</small></font><br /><font color="#666666"><small><b>servvirt1.mondomaine.com</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; -b----&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.6</small></font></p></blockquote>
<p>Liste des serveurs virtuels créés:<br />
<blockquote># xen-list-images<br /><font color="#666666"><small>Name: <b>servvirt1.mondomaine.com</b></small></font><br /><font color="#666666"><small>Memory: 256</small></font><br /><font color="#666666"><small>IP: 192.168.29.171</small></font></p></blockquote>
<p>Occupation des ressources en temps réel:<br />
<blockquote>xentop</p></blockquote>
<p>Pour rendre prioritaire un serveur virtuel par rapport à un autre, nous allons utiliser les options du gestionnaire d'allocation des ressources ("Credit scheduler", par défaut dans la version Xen 3.0). <br />Par exemple, si nous avons deux serveurs virtuels <b>servvirt1 </b>et <b>servvirt2 </b>(domU) hébérgés sur notre serveur hôte (dom0) et que nous souhaitons donner deux fois plus de temps CPU à <b>servvirt2</b>, il suffit de saisir la commande suivante:</p>
<p>xm sched-credit -d <b>servvirt2.mondomaine.com</b> -w 512</p>
<p>PS: par défaut, un serveur virtuel à un poids de 256.</p>
<p>La liste des poids des serveurs virtuels peut être obtenue grâce à la commande:<br />
<blockquote># xm sched-credit<br /><small>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID Weight&nbsp; Cap</small><br /><small>Domain-0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp; 0</small><br /><small><b>servvirt1.mondomaine.com</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp; 0</small><br /><small><b>servvirt2.mondomaine.com</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 512 &nbsp;&nbsp; 0</small></p></blockquote>
<p>Les commandes xm sched-credit sont à lancer (par exemple dans un script shell) au démarrage du serveur hôte.<br />
<h1>Conclusion</h1>
<p>Xen et la virtualisation en général est un très bon moyen, dans cette période de crise, d'optimiser au mieux les ressources hardware disponibles. Il est bien sûr possible de créer autant de serveurs virtuels que possible sur notre serveur hôte (dans les limites de performances souhaités au niveau des domU).<br /><i><br /><small>Quelques sources utiles à la rédaction de ce billet:<br /></small></i>
<ul>
<li><i><small><a href="http://www.cl.cam.ac.uk/research/srg/netos/xen/readmes/user/user.html">http://www.cl.cam.ac.uk/</a></small></i></li>
<li><i><small><a href="http://www.howtoforge.com/virtualization-with-xen-on-debian-lenny-amd64">http://www.howtoforge.com/</a></small></i></li>
<li><i><small><a href="http://www.eecs.iu-bremen.de/wiki/index.php/Xen">http://www.eecs.iu-bremen.de/</a></small></i></li>
<li><i><small><a href="http://www.d7031.de/text/xen_with_lvm_under_etch.shtml">http://www.d7031.de/</a></small></i></li>
<li><i><small><a href="http://www.unixgarden.com/index.php/administration-systeme/problematique-de-consolidation-et-atteinte-des-objectifs-de-niveau-de-service-slo-avec-xen">http://www.unixgarden.com/</a><br /></small></i></li>
</ul>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2046">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/installation-pas-a-pas-de-xen-sous-debian.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Nagios 3.1.2 est sorti !</title>
		<link>http://blog.nicolargo.com/2009/06/nagios-3-1-2-est-sorti.html</link>
		<comments>http://blog.nicolargo.com/2009/06/nagios-3-1-2-est-sorti.html#comments</comments>
		<pubDate>Wed, 24 Jun 2009 12:05:57 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[3.1.2]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/nagios-3-1-2-est-sorti.html</guid>
		<description><![CDATA[
Pas de nouveauté mais juste le correctif pour un gros bug de la version 3.1.1 qui mettait votre CPU KO...Il est donc temps de mettre à jour son serveur en suivant cette procédure.

                       [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><font face="sans-serif"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_0021.png" width="251" height="142" /></font></div>
<p><font face="sans-serif"><br />Pas de nouveauté mais juste le correctif pour un gros bug de la version 3.1.1 qui mettait votre CPU KO...<br />Il est donc temps de mettre à jour son serveur en suivant <a href="http://blog.nicolargo.com/2008/04/comment-mettre-a-jour-son-serveur-nagios.html">cette procédure</a>.</font></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2043">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/nagios-3-1-2-est-sorti.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installation de Songbird 1.2 sous Ubuntu</title>
		<link>http://blog.nicolargo.com/2009/06/installation-de-songbird-1-2-sous-ubuntu.html</link>
		<comments>http://blog.nicolargo.com/2009/06/installation-de-songbird-1-2-sous-ubuntu.html#comments</comments>
		<pubDate>Wed, 24 Jun 2009 09:31:11 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Musique]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[songbird]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/installation-de-songbird-1-2-sous-ubuntu.html</guid>
		<description><![CDATA[La version 1.2 de Songbird vient d'être mise à disposition, voici donc une procédure pour l'installer sur votre système GNU/Linux Ubuntu. Songbird est un gestionnaire de fichiers multimédia (musique, vidéo) open-source que l'on présente souvent comme le Firefox des iTunes (une belle pression sur ses épaules...). 

Je ne vais pas rentrer dans le détail des [...]]]></description>
			<content:encoded><![CDATA[<p>La version 1.2 de Songbird vient d'être mise à disposition, voici donc une procédure pour l'installer sur votre système GNU/Linux Ubuntu. Songbird est un gestionnaire de fichiers multimédia (musique, vidéo) open-source que l'on présente souvent comme le Firefox des iTunes (une belle pression sur ses épaules...). </p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/songbird-1.1-screenshot-full.jpg" width="575" height="417" /></div>
<p>Je ne vais pas rentrer dans le détail des fonctions que propose ce logiciel, il suffit de se rendre <a href="http://getsongbird.com/features/">sur cette page</a> pour avoir ces informations. Par contre, nous allons dans ce billet nous pencher sur l'installation de la "bête" sur notre bonne vieille distribution GNUL/Linux Ubuntu. Il va falloir un tout petit peu bidouiller car cette dernière version n'est pas encore dans les repos officiels.</p>
<p>On commence par récupérer Songbird à l'adresse suivante: <a href="http://getsongbird.com/download/">http://getsongbird.com/download/</a></p>
<p>On va obtenir un fichier au format (extension) .tar.gz
<p>Il faut ensuite ouvrir un terminal et ce rendre dans le répertoire ou le fichier a été télé-chargé (/home/nicolargo/Bureau dans mon exemple):</p>
<blockquote><p>cd /home/nicolargo/Bureau</p>
</blockquote>
<p>Ensuite on décompresse l'archive:</p>
<blockquote><p>tar zxvf Songbird_1.2.0-1146_linux-i686.tar.gz</p>
</blockquote>
<p>On va obtenir un répertoire <b>Songbird</b>.</p>
<p>Il ne reste plus qu'a dés-installer (si nécessaire) les versions précédentes:</p>
<blockquote><p> sudo apt-get remove songbird</p></blockquote>
<p>Puis à copier la nouvelle version dans notre système:<br />
<blockquote>sudo mv Songbird /opt/
<p>sudo chown -R root:root /opt/Songbird</p>
<p>sudo chmod -R 755 /opt/Songbird</p>
</blockquote>
<p>Enfin, on créé un nouveau lanceur d'application personnalisé dans le tableau de bord:</p>
<ul>
<li>click droit sur la barre de menu, puis click sur "Editer les menus"</li>
<li>click sur le menu Applications / Son et vidéo</li>
<li>click sur "Nouvel élément"</li>
</ul>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_0011.png" width="477" height="229" /></div>
<ul>
<li>click sur Valider</li>
</ul>
<p>Et voili, il ne reste plus qu'à aller dans le menu Applications / Son et vidéo et cliquer sur Songbird pour lancer l'application !</p>
<p>Bonne écoute <img src="http://blog.nicolargo.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> </p>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2037">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/installation-de-songbird-1-2-sous-ubuntu.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NConf, une interface Web pour Nagios</title>
		<link>http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html</link>
		<comments>http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:17:04 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nconf]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html</guid>
		<description><![CDATA[Utilisateurs de Nagios, votre rêve va bientôt se réaliser ! Une équipe Suisse travaille sur le saint Graal de la supervision système et réseau. En effet leur projet NConf vient répondre à un besoin récurrent des utilisateurs de Nagios: l'impossibilité d'administrer son serveur via une interface Web.
Nous allons dans ce billet tester la version 1.2.5 [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/350px-Nc-logo-large.png" width="154" height="77" />Utilisateurs de Nagios, votre rêve va bientôt se réaliser ! Une équipe Suisse travaille sur le saint Graal de la supervision système et réseau. En effet leur projet NConf vient répondre à un besoin récurrent des utilisateurs de Nagios: l'impossibilité d'administrer son serveur via une interface Web.</p>
<p>Nous allons dans ce billet tester la version 1.2.5 de NConf sur un serveur Nagios 3.1. Je pars sur l'hypothèse ou le serveur Nagios a été installé en suivant mes deux premiers tutos (<a href="http://blog.nicolargo.com/2009/01/le-serveur-de-supervision-libre-part-1.html">1</a> et <a href="http://blog.nicolargo.com/2009/01/le-serveur-de-supervision-libre-part-2.html">2</a>).</p>
<p><span id="more-2031"></span><br />
<h1>Installation de NConf</h1>
<p>On commence par récupérer la dernière version disponible de NConf (la 1.2.5 au moment de l'écriture de ce billet).<br />
<blockquote>wget http://puzzle.dl.sourceforge.net/sourceforge/nconf/nconf-1.2.5-0.tgz</p></blockquote>
<p>On décompresse l'archive:<br />
<blockquote>tar zxvf nconf-1.2.5-0.tgz</p></blockquote>
<p>Puis on copie le répertoire nconf à la racine de son serveur Web et on change les droits:<br />
<blockquote>sudo mv nconf /usr/local<br />sudo chown -R www-data:www-data /usr/local/nconf</p></blockquote>
<p>Notes: les sous-répertoires suivants doivent avoir les droits en écriture pour l'utilisateur www-data:<br /> ./config <br />&nbsp;./output <br />&nbsp;./static_cfg <br />&nbsp;./temp</p>
<h1>Création de la base de donnée</h1>
<p>La prochaine étape consiste à créer une base de données dédiée ) NConf. Pour créer un base de donnée nommée nconf avec les droits pour l'utilisateur nconfuser (mot de passe: nconfpassword), il faut saisir les commandes suivantes sur son serveur MySQL:<br />
<blockquote># mysqladmin --user=root -p create nconf</p>
<p># mysql --user=root -p mysql</p>
<p>mysql&gt; GRANT ALL ON nconf.* TO nconfuser@localhost IDENTIFIED BY 'nconfpassword';</p>
<p>mysql&gt; flush privileges;</p></blockquote>
<h1>Configuration du serveur Web</h1>
<p>Pour rendre accessible le répertoire /usr/local/nconf à partir de votre serveur Web, il faut ajouter le fichier de configuration /etc/apache2/conf.d/nconf.conf dans votre configuration Apache:<br />
<blockquote>Alias /nconf /usr/local/nconf/<br />&lt;Directory "/usr/local/nconf"&gt;<br />&nbsp;&nbsp;&nbsp; Options Indexes<br />&nbsp;&nbsp;&nbsp; AllowOverride AuthConfig Options<br />&nbsp;&nbsp;&nbsp; Order allow,deny<br />&nbsp;&nbsp;&nbsp; Allow from all<br />&lt;/Directory&gt;</p></blockquote>
<p>Puis relancer Apache:<br />
<blockquote>apache2ctl restart</p></blockquote>
<p>
<h1>Configuration de NConf</h1>
<p>La fin de l'installation se fait via une interface Web. Il faut donc saisir l'URL suivante dans un navigateur:</p>
<div align="center"><b>http://adressedevotreserveur/nconf/INSTALL.php</b></div>
<p>Ce qui devrait afficher:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_001.png" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>On doit saisir les paramètres de la base de donnée préalablement créées:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_002.png" width="576" height="274" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>Le test de la BD doit être OK:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_003.png" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>On fixe les répertoires de Nconf et de Nagios (/usr/local/nagios/bin). <b>Attention</b> dans le champs NAGIOS BIN, il faut saisir le chemin complet vers le binaire de Nagios (/usr/local/nagios/bin/nagios) et pas seulement le répertoire comme je l'ai fait dans un premier temps dans cette capture d'écran...</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_004.png" width="572" height="260" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>On fixe un mot de passe (adminpassword) pour l'accès à NConf:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_005.png" width="577" height="247" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>Le programme d'installation va vérifier la configuration (tout doit être OK):</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_006.png" width="578" height="532" /></div>
<p>On clique sur le bouton <b>Finish</b>.</p>
<p>On efface les fichier suivant:<br />
<blockquote>sudo rm -r /usr/local/nconf/INSTALL /usr/local/nconf/INSTALL.php /usr/local/nconf/UPDATE /usr/local/nconf/UPDATE.php</p></blockquote>
<h1>Mise en place de la synchronisation avec Nagios</h1>
<p>Comme NConf peut être hébergé sur une machine différente du serveur Nagios, l'importation de la configuration NCOnf vers Nagios doit se faire à la main ou par un script shell. Je préfére bien entendu cette deuxième méthode. </p>
<p>Avant tout, il faut vérifier que le répertoire Nagios à les bon droits en lecture et écriture pour être modifié par l'utilisateur www-data (utilisateur avec lequel le serveur Apache est lancé). Le plus simple est d'ajouter www-data au groupe nagiosgrp:<br />
<blockquote># vigr<br />nagiosgrp:x:1002:nagios,www-data</p></blockquote>
<p>puis de mettre les bons droits au répertoire etc:<br />
<blockquote>chown -R nagios:<b>nagiosgrp</b> /usr/local/nagios/etc<br />chmod 770 /usr/local/nagios/etc</p></blockquote>
<p>J'ai ensuite modifié le script ADD-ONS/deploy-local.sh de la manière suivante:<br />
<blockquote><small>#!/bin/bash</small><br /><small>OUTPUT_DIR="/usr/local/nconf/output/"</small><br /><small>NAGIOS_DIR="/usr/local/nagios/etc/"</small><br /><small>TEMP_DIR=${NAGIOS_DIR}"import/"</small><br /><small>CONF_ARCHIVE="NagiosConfig.tgz"</small><br /><small>if [ ! -e ${TEMP_DIR} ] ; then</small><br /><small>mkdir -p ${TEMP_DIR}</small><br /><small>fi</small><br /><small>if [ ${OUTPUT_DIR}${CONF_ARCHIVE} -nt ${TEMP_DIR}${CONF_ARCHIVE} ] ; then</small><br /><small>cp -p ${OUTPUT_DIR}${CONF_ARCHIVE} ${TEMP_DIR}${CONF_ARCHIVE}</small><br /><small>tar -xf ${TEMP_DIR}${CONF_ARCHIVE} -C ${NAGIOS_DIR}</small><br /><small>/etc/init.d/nagios reload</small><br /><small>fi</small><br /><small>exit</small></p></blockquote>
<p>Il ne reste plus qu'a l'éxecuter de manière automatique (par exemple toutes les 5 minutes) via un crontab root:<br />
<blockquote># crontab -e<br />*/5 * * * * /bin/bash /usr/local/nconf/ADD-ONS/deploy_local.sh 2&gt;&amp;1 &gt; /dev/null</p></blockquote>
<p>
<h1>Utilisation de NConf</h1>
<p>La première chose à faire est de se connecter à l'interface Web et de s'authentifier (admin/adminpassword). La page suivante devrait s'afficher:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/NConf_1245079025114.png" width="574" height="413" /></div>
<p>On va tester notre nouvelle interface en ajoutant un nouvel host dans Nagios. Pour cela on clique sur le menu "Hosts Add" de NConf:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_009.png" width="572" height="578" /></div>
<p>On clique ensuite sur <b>Submit</b>.</p>
<p>On peut alors choisir les services à superviser (il est bien sûr possible d'ajouter des services via NConf):</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_007.png" width="563" height="233" /></div>
<p>On clique ensuite sur <b>Submit</b>.</p>
<p>Une dernière page s'affiche avec le résumé:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_008.png" /></div>
<p>On clique sur <b>Finish</b>.</p>
<p>NConf vient ainsi d'ajouter ce nouvel host dans sa base de donnée. En cliquant maintenant sur le lien "<b>Generate Nagios config</b>", on va générer les fichiers de configuration de Nagios dans un NagiosConfig.tgz se trouvant dans le répertoire&nbsp; /usr/local/nconf/output. </p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_010.png" /></div>
<p>Il ne reste plus qu'a attendre le prochain lancement du script deploy-local.sh (dans les 5 minutes via crontab) pour que le host apparaisse dans Nagios:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_011.png" width="553" height="96" /></div>
<p>
<h1>Conclusion</h1>
<p>Bien qu'en développement, NConf est très prometteur et comble le vide laissé par Nagios pour l'administration via une interface Web. L'idéal serait maintenant d'intégrer cette interface dans celle de Nagios (le hack ne doit pas être très difficile à faire) afin de ne pas avoir deux interfaces (NConf et Nagios).</p>
<p>A vous de tester maintenant...</p>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2031">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Un bon bouquin d&#039;introduction à Nagios</title>
		<link>http://blog.nicolargo.com/2009/06/un-bon-bouquin-dintroduction-a-nagios.html</link>
		<comments>http://blog.nicolargo.com/2009/06/un-bon-bouquin-dintroduction-a-nagios.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 08:50:14 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[livre]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/un-bon-bouquin-dintroduction-a-nagios.html</guid>
		<description><![CDATA[Il y a quelques jours, j'ai eu entre le main le livre de Wojciech Kocjan entre les mains: "Learning Nagios 3.0".

C'est une très bonne introduction à Nagios, plutôt dédiée aux personnes débutant dans le domaine de la supervision réseau mais ayant quand même de bonne base en système et réseau.
Le livre est seulement disponible en [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques jours, j'ai eu entre le main le livre de Wojciech Kocjan entre les mains: <a href="https://images-na.ssl-images-amazon.com/images/I/41wWx9e269L._SL160_.jpg">"Learning Nagios 3.0"</a>.</p>
<div align="center"><a href="http://www.amazon.fr/gp/product/1847195180?ie=UTF8&amp;tag=leblogdenico-21&amp;linkCode=as2&amp;camp=1642&amp;creative=19458&amp;creativeASIN=1847195180"><img src="41wWx9e269L._SL160_.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.fr/e/ir?t=leblogdenico-21&amp;l=as2&amp;o=8&amp;a=1847195180" border="0" alt="" width="1" height="1" /></div>
<p>C'est une très bonne introduction à Nagios, plutôt dédiée aux personnes débutant dans le domaine de la supervision réseau mais ayant quand même de bonne base en système et réseau.</p>
<p>Le livre est seulement disponible en Anglais (pas de traduction prévue pour le moment). Si vous êtes allergique à la langue de Shakespeare, je vous conseille encore une fois le très bon livre d'Olivier Jan: <a href="http://blog.nicolargo.com/wp-content/plugins/wp-adserve/adclick.php?id=8">"Nagios et la supervision open source"</a>.</p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2014">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/un-bon-bouquin-dintroduction-a-nagios.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Offre de support professionnel pour Nagios</title>
		<link>http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html</link>
		<comments>http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 07:44:11 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[professionnel]]></category>
		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html</guid>
		<description><![CDATA[Nagios, l'outil de supervision open-source, connait un succès très important dans les entreprises (il n'y a qu'à voir le nombre de commentaires de stagiaires bossant sur le sujet dans mes tutos...). De nombreuses sociétés de service en informatique propose un support sur ce logiciel. C'est dans ce contexte que la société Nagios vient de lancer [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.nicolargo.com/nagios-tutoriels-et-documentations">Nagios</a>, l'outil de supervision open-source, connait un succès très important dans les entreprises (il n'y a qu'à voir le nombre de commentaires de stagiaires bossant sur le sujet dans <a href="http://blog.nicolargo.com/2009/01/le-serveur-de-supervision-libre-part-2.html">mes tutos</a>...). De nombreuses sociétés de service en informatique propose un support sur ce logiciel. C'est dans ce contexte que la société Nagios vient de lancer <a href="http://support.nagios.com">un portail</a> pour le support de son logiciel.</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_013.png" alt="" width="579" height="330" /></div>
<p>Ce support comprend l'accès à des équipes d'experts dédiés disponible un peu partout sur la planète (pas de problème de décalage horaire), un accès à un gestionnaire de tickets pour saisir et suivre vos appels. Une base de connaissance <span style="text-decoration: underline;">publique</span> (documentation, FAQ) est <a href="http://support.nagios.com/knowledge-base">également disponible</a>.</p>
<p><a href="http://www.nagios.com/services/support">Le prix annuel</a> pour l'accès à ce support commence à  $2495 (soit environ <span style="text-decoration: underline;">1766</span> Euros). Comme quoi il est possible d'associer business et open-source...</p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2011">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GStreamer et le codec X.264</title>
		<link>http://blog.nicolargo.com/2009/06/gstreamer-et-le-codec-x264.html</link>
		<comments>http://blog.nicolargo.com/2009/06/gstreamer-et-le-codec-x264.html#comments</comments>
		<pubDate>Wed, 10 Jun 2009 08:32:03 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[codec]]></category>
		<category><![CDATA[H.264]]></category>
		<category><![CDATA[MPEG.4]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[X.264]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/gstreamer-et-le-codec-x264.html</guid>
		<description><![CDATA[Souhaitant effectuer un streaming RTP à partir d'une Webcam, voici un billet sur l'optimisation des paramètres du codec libre X.264 (implémentation libre du codec H.264 ou MPEG-4 AVC - WIKI) dont l'équipe de VideoLAN est à l'origine. Pour tester ce codec et ensuite mettre en place le streaming, j'utiliserai le framework GStreamer.

A la recherche des [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/x264.png" />Souhaitant effectuer un streaming RTP à partir d'une Webcam, voici un billet sur l'optimisation des paramètres du codec libre X.264 (implémentation libre du codec H.264 ou MPEG-4 AVC - <small><a href="http://fr.wikipedia.org/wiki/X264">WIKI</a></small>) dont l'équipe de VideoLAN est à l'<a href="http://www.videolan.org/developers/x264.html">origine</a>. Pour tester ce codec et ensuite mettre en place le streaming, j'utiliserai le framework <a href="http://blog.nicolargo.com/tag/gstreamer">GStreamer</a>.</p>
<p><span id="more-2001"></span><br />
<h1>A la recherche des "bons" paramètres</h1>
<p>On commence par&nbsp; créer un fichier vidéo de référence. Ce dernier est à adapter à votre besoin. Pour mes tests, j'ai enregistré une séquence d'une dizaine de secondes devant ma Webcam:<br />
<blockquote>gst-launch v4l2src device="/dev/video1" ! queue ! videoscale method=1 ! video/x-raw-yuv,width=320,height=240 ! avimux ! filesink location=webcam.avi</p></blockquote>
<p>Ensuite on génère un fichier encodé en H.264 (c'est à dire sans paramètre, avec un encodage à 2 Mbps). Il servira de référence pour la comparaison qualitative:<br />
<blockquote>gst-launch filesrc location=webcam.avi ! decodebin ! queue ! ffmpegcolorspace ! x264enc ! avimux ! filesink location=webcam-x264-10.avi</p></blockquote>
<p>On peut comparer les deux:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcamavi-2.png" width="250" height="187" /> <img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-10avi-21.png" width="250" height="187" /><br /><i><small>Original <b>vs</b> X.264 (defaut)</small></i></div>
<p>On va maintenant jouer avec les paramètres disponibles pour le codec X.264. La liste de ces paramètres est longue et le paramétrage très pointu. Je vous conseille la lecture de ce <a href="http://www.scribd.com/doc/16217934/x264-Options-Analysis-08">document</a> et de ce <a href="http://forum.doom9.org/forumdisplay.php?f=77">forum</a>.</p>
<p>Nous allons dans un premier temps fixer le débit de compression à 200 Kbps (paramètre <i>bitrate</i>) puis mettre des valeurs moyennes au niveau des paramètres <i>ref</i> et <i>subme</i>. Cela devrait assurer un bon compromis entre vitesse de compression et qualité d'image.<br />
<blockquote>gst-launch filesrc location=webcam.avi ! decodebin ! queue ! x264enc byte-stream=true bitrate=200 ! gst-launch filesrc location=webcam.avi ! decodebin ! queue ! ffmpegcolorspace ! x264enc byte-stream=true bitrate=200 bframes=4 ref=4 me=hex subme=4 weightb=true threads=0 ! avimux ! filesink location=webcam-x264-11.avi</p></blockquote>
<p>On compare le résultat:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-10avi-21.png" width="250" height="187" /> <img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-11avi-2.png" width="250" height="187" /><br /><i><small>X.264 (defaut) <b>vs</b> X.264 test 11<br /></small><small>(</small></i><small>byte-stream=true bitrate=200 bframes=4 ref=4 me=hex subme=4 weightb=true threads=0<i><small>)</small></i></small></div>
<p>Comme on peut le voir la qualité est moins bonne (surtout quand il y a des mouvements) mais l'on passe d'un débit de 2089 Kbps à 203 Kbps (soit un facteur 10). </p>
<p>En choisissant des options qui permettent une compression plus rapide (ce qui peut être utile pour une utilisation interactive de type videoconference), on perd encore en qualité:<br />
<blockquote>gst-launch filesrc location=webcam.avi ! decodebin ! queue ! ffmpegcolorspace ! x264enc byte-stream=true bitrate=200 bframes=4 ref=1 me=dia subme=1 weightb=true threads=0 ! avimux ! filesink location=webcam-x264-12.avi</p></blockquote>
<p>On compare le résultat par rapport aux paramètres précédant:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-11avi-2.png" width="250" height="187" /> <img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-12avi-2.png" width="250" height="187" /></div>
<div align="center"><i><small>X.264 test 11 <b>vs</b> X.264 test 12<br />(</small></i><small>byte-stream=true bitrate=200 bframes=4 ref=1 me=dia subme=1 weightb=true threads=0</small><i><small>)<br /></small></i></div>
<p>La consommation de bande passante entre les deux tests est la même (203 Kbps). Seul le temps d'encodage diffère (gain de 25%). </p>
<p>Enfin on paramètre X.264 pour améliorer la qualité (donc au détriment du temps d'encodage):<br />
<blockquote>gst-launch filesrc location=webcam.avi ! decodebin ! queue ! ffmpegcolorspace ! x264enc byte-stream=true bitrate=200 bframes=4 ref=8 me=umh subme=6 weightb=true threads=0 ! avimux ! filesink location=webcam-x264-13.avi</p></blockquote>
<p>On compare le résultat par rapport aux paramètres du test 11:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-11avi-2.png" width="250" height="187" /> <img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/webcam-x264-13avi-2.png" width="250" height="187" /></div>
<div align="center"><i><small>X.264 test 11 <b>vs</b> X.264 test 13</small></i><br /><i><small>(</small></i><small>byte-stream=true bitrate=200 bframes=4 ref=8 me=umh subme=6 weightb=true threads=0</small><i><small>)</small></i></div>
<p>La qualité est légèrement meilleure (difficile à voir sur cette image), le débit identique, par contre le délais d'encodage bondit de plus de 100%.</p>
<p>Pour résumé, les paramètres suivant sont ceux qui offre le meilleur résultat pour mon besoin:<br />
<blockquote><small>byte-stream=true bitrate=200 bframes=4 ref=4 me=hex subme=4 weightb=true threads=0</small></p></blockquote>
<h1>Ratio qualité/bande passante</h1>
<p>Maintenant que nous avons identifié les "bons" paramètres pour notre besoin. Il faut jouer sur les paramètres externes pour trouver le bon ratio entre la qualité de l'image et la bande passante consommé lors du streaming de notre Webcam.</p>
<p>Les paramètres sur lesquels on a des leviers sont les suivants:
<ul>
<li>taille de l'image (résolution)</li>
<li>nombre d'images par seconde (fps)</li>
<li>débit cible au niveau du codec X.264 (bitrate)</li>
</ul>
<p>Comme je n'aime pas faire des choses répétitives (non non, ce n'est pas de la fainéantise...),&nbsp; j'ai développé un petit script shell qui prend en entrée un fichier vidéo de référence, une liste de résolution (au format GStreamer), une liste de fps et une liste de débit. Le script va générer automatiquement les vidéos encodés avec ces différents paramètres.</p>
<p>Voici le script en question:<br />
<blockquote><small>#!/bin/sh</p>
<p># Je génére le fichier de référence avec la commande:<br /># sudo gst-launch v4l2src device="/dev/video1" ! queue ! videoscale method=1 ! video/x-raw-yuv,width=704,height=576 ! avimux ! filesink location=videotest.avi</p>
<p>videosrc="./videotest.avi"<br />reslist="width=704,height=576 width=352,height=288 width=176,height=144 width=128,height=96"<br />fpslist="24 12 6 3"<br />bitratelist="400 300 200 100 50"</p>
<p>for res in `echo $reslist`<br />do <br />&nbsp;resname=`echo $res | sed "s/width=//" | sed "s/height=//" | sed "s/,/x/"`<br />&nbsp;for fps in `echo $fpslist`<br />&nbsp;do<br />&nbsp; for bitrate in `echo $bitratelist`<br />&nbsp; do<br />&nbsp;&nbsp; echo videotest-${resname}-${fps}fps-${bitrate}kbps.avi<br />&nbsp;&nbsp; gst-launch filesrc location=$videosrc ! decodebin ! ffmpegcolorspace ! queue ! cairotextoverlay text="${resname} ${fps}fps ${bitrate}kbps" shaded-background=true ! queue ! videorate ! video/x-raw-yuv,framerate=$fps/1 ! queue ! videoscale method=1 !&nbsp; video/x-raw-yuv,$res ! queue ! ffmpegcolorspace ! x264enc byte-stream=true bitrate=$bitrate bframes=4 ref=4 me=hex subme=4 weightb=true threads=0 ! avimux ! filesink location=videotest-${resname}-${bitrate}kbps-${fps}fps.avi<br />&nbsp; done<br />&nbsp;done<br />done<br /></small></p></blockquote>
<p>J'obtient les résultats suivants:<br />
<blockquote><small>videotest-704x576-50kbps-6fps.avi donne un débit moyen de 41 kb/s<br />videotest-352x288-50kbps-3fps.avi donne un débit moyen de 42 kb/s<br />videotest-352x288-50kbps-6fps.avi donne un débit moyen de 42 kb/s<br />videotest-704x576-50kbps-3fps.avi donne un débit moyen de 43 kb/s<br />videotest-176x144-50kbps-3fps.avi donne un débit moyen de 44 kb/s<br />videotest-128x96-50kbps-3fps.avi donne un débit moyen de 45 kb/s<br />videotest-176x144-50kbps-6fps.avi donne un débit moyen de 46 kb/s<br />videotest-128x96-50kbps-6fps.avi donne un débit moyen de 47 kb/s<br />videotest-352x288-50kbps-12fps.avi donne un débit moyen de 47 kb/s<br />videotest-704x576-50kbps-12fps.avi donne un débit moyen de 47 kb/s<br />videotest-176x144-50kbps-12fps.avi donne un débit moyen de 51 kb/s<br />videotest-128x96-50kbps-12fps.avi donne un débit moyen de 52 kb/s<br />videotest-352x288-50kbps-24fps.avi donne un débit moyen de 53 kb/s<br />videotest-704x576-50kbps-24fps.avi donne un débit moyen de 53 kb/s<br />videotest-176x144-50kbps-24fps.avi donne un débit moyen de 54 kb/s<br />videotest-128x96-50kbps-24fps.avi donne un débit moyen de 56 kb/s<br />videotest-128x96-100kbps-3fps.avi donne un débit moyen de 73 kb/s<br />videotest-704x576-100kbps-6fps.avi donne un débit moyen de 76 kb/s<br />videotest-352x288-100kbps-3fps.avi donne un débit moyen de 81 kb/s<br />videotest-352x288-100kbps-6fps.avi donne un débit moyen de 81 kb/s<br />videotest-704x576-100kbps-3fps.avi donne un débit moyen de 84 kb/s<br />videotest-176x144-100kbps-3fps.avi donne un débit moyen de 86 kb/s<br />videotest-128x96-200kbps-3fps.avi donne un débit moyen de 87 kb/s<br />videotest-128x96-300kbps-3fps.avi donne un débit moyen de 87 kb/s<br />videotest-128x96-400kbps-3fps.avi donne un débit moyen de 87 kb/s<br />videotest-128x96-100kbps-6fps.avi donne un débit moyen de 88 kb/s<br />videotest-704x576-100kbps-12fps.avi donne un débit moyen de 89 kb/s<br />videotest-352x288-100kbps-12fps.avi donne un débit moyen de 91 kb/s<br />videotest-704x576-100kbps-24fps.avi donne un débit moyen de 93 kb/s<br />videotest-176x144-100kbps-6fps.avi donne un débit moyen de 94 kb/s<br />videotest-176x144-100kbps-12fps.avi donne un débit moyen de 99 kb/s<br />videotest-352x288-100kbps-24fps.avi donne un débit moyen de 99 kb/s<br />videotest-128x96-100kbps-12fps.avi donne un débit moyen de 101 kb/s<br />videotest-176x144-100kbps-24fps.avi donne un débit moyen de 103 kb/s<br />videotest-128x96-100kbps-24fps.avi donne un débit moyen de 104 kb/s<br />videotest-128x96-200kbps-6fps.avi donne un débit moyen de 125 kb/s<br />videotest-128x96-300kbps-6fps.avi donne un débit moyen de 130 kb/s<br />videotest-128x96-400kbps-6fps.avi donne un débit moyen de 131 kb/s<br />videotest-176x144-200kbps-3fps.avi donne un débit moyen de 136 kb/s<br />videotest-704x576-200kbps-6fps.avi donne un débit moyen de 150 kb/s<br />videotest-176x144-300kbps-3fps.avi donne un débit moyen de 151 kb/s<br />videotest-176x144-400kbps-3fps.avi donne un débit moyen de 152 kb/s<br />videotest-352x288-200kbps-6fps.avi donne un débit moyen de 161 kb/s<br />videotest-352x288-200kbps-3fps.avi donne un débit moyen de 162 kb/s<br />videotest-704x576-200kbps-3fps.avi donne un débit moyen de 165 kb/s<br />videotest-176x144-200kbps-6fps.avi donne un débit moyen de 170 kb/s<br />videotest-128x96-200kbps-12fps.avi donne un débit moyen de 174 kb/s<br />videotest-352x288-200kbps-12fps.avi donne un débit moyen de 174 kb/s<br />videotest-704x576-200kbps-12fps.avi donne un débit moyen de 174 kb/s<br />videotest-704x576-200kbps-24fps.avi donne un débit moyen de 187 kb/s<br />videotest-128x96-300kbps-12fps.avi donne un débit moyen de 188 kb/s<br />videotest-128x96-400kbps-12fps.avi donne un débit moyen de 188 kb/s<br />videotest-128x96-200kbps-24fps.avi donne un débit moyen de 191 kb/s<br />videotest-352x288-200kbps-24fps.avi donne un débit moyen de 192 kb/s<br />videotest-176x144-200kbps-12fps.avi donne un débit moyen de 193 kb/s<br />videotest-176x144-200kbps-24fps.avi donne un débit moyen de 199 kb/s<br />videotest-176x144-300kbps-6fps.avi donne un débit moyen de 202 kb/s<br />videotest-128x96-300kbps-24fps.avi donne un débit moyen de 211 kb/s<br />videotest-128x96-400kbps-24fps.avi donne un débit moyen de 215 kb/s<br />videotest-176x144-400kbps-6fps.avi donne un débit moyen de 216 kb/s<br />videotest-704x576-300kbps-6fps.avi donne un débit moyen de 220 kb/s<br />videotest-352x288-300kbps-3fps.avi donne un débit moyen de 235 kb/s<br />videotest-704x576-300kbps-3fps.avi donne un débit moyen de 245 kb/s<br />videotest-352x288-300kbps-6fps.avi donne un débit moyen de 249 kb/s<br />videotest-704x576-300kbps-12fps.avi donne un débit moyen de 262 kb/s<br />videotest-352x288-300kbps-12fps.avi donne un débit moyen de 265 kb/s<br />videotest-176x144-300kbps-12fps.avi donne un débit moyen de 272 kb/s<br />videotest-704x576-300kbps-24fps.avi donne un débit moyen de 278 kb/s<br />videotest-176x144-300kbps-24fps.avi donne un débit moyen de 289 kb/s<br />videotest-352x288-300kbps-24fps.avi donne un débit moyen de 293 kb/s<br />videotest-704x576-400kbps-6fps.avi donne un débit moyen de 297 kb/s<br />videotest-352x288-400kbps-3fps.avi donne un débit moyen de 298 kb/s<br />videotest-176x144-400kbps-12fps.avi donne un débit moyen de 301 kb/s<br />videotest-704x576-400kbps-3fps.avi donne un débit moyen de 318 kb/s<br />videotest-352x288-400kbps-6fps.avi donne un débit moyen de 336 kb/s<br />videotest-176x144-400kbps-24fps.avi donne un débit moyen de 339 kb/s<br />videotest-704x576-400kbps-12fps.avi donne un débit moyen de 346 kb/s<br />videotest-352x288-400kbps-12fps.avi donne un débit moyen de 355 kb/s<br />videotest-704x576-400kbps-24fps.avi donne un débit moyen de 373 kb/s<br />videotest-352x288-400kbps-24fps.avi donne un débit moyen de 385 kb/s</small></p></blockquote>
<p>Si on se focalise sur un nombre d'images par seconde de 12 et une résolution CIF (ce qui est suffisant pour une besoin de type vidéoconférence), on obtient les qualités suivantes:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/videotest-352x288-50kbps-12fpsavi-2.png" width="250" height="205" /><br /><small>Dévit cible: 50 Kbps / Débit mesuré: <b>47</b> Kbps</small></p>
<p> <img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/videotest-352x288-100kbps-12fpsavi-2.png" width="250" height="204" /><br /><small>Dévit cible: 100 Kbps / Débit mesuré: <b>91</b> Kbps</small></p>
<p><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/videotest-352x288-200kbps-12fpsavi-2.png" width="250" height="205" /><br /><small>Dévit cible: 200 Kbps / Débit mesuré: <b>174</b> Kbps</p>
<p></small><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/videotest-352x288-300kbps-12fpsavi-2.png" width="250" height="204" /><br /><small>Dévit cible: 300 Kbps / Débit mesuré: <b>265</b> Kbps</p>
<p></small><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/videotest-352x288-400kbps-12fpsavi-2.png" width="250" height="204" /> <br /><small>Dévit cible: 400 Kbps / Débit mesuré: <b>355</b> Kbps</small></div>
<p>On peut voir que la qualité augmente moins à partir d'un débit cible de 200 Kbps. <br />
<h1>On teste enfin le streaming</h1>
<p>Pas la peine de réinventer la roue, j'avais déjà écrit <a href="http://blog.nicolargo.com/2009/02/jai-streame-avec-gstreamer.html">un billet sur le sujet</a>. Si l'on souhaite faire un streaming RTP entre deux machines en prenant en compte l'optimisation X.264 décrite dans les chapitres précédant, il faut saisir les commandes suivantes:</p>
<p>Sur le serveur (192.168.1.1):<br />
<blockquote>gst-launch -v&nbsp; gstrtpbin name=rtpbin \<br />
v4l2src \<br />
! queue ! videoscale method=1 ! video/x-raw-yuv,width=352,height=288 \<br />! queue ! videorate ! video/x-raw-yuv,framerate=\(fraction\)12/1 \<br />
! queue ! x264enc byte-stream=true bitrate=200 bframes=4 ref=4 me=hex subme=4 weightb=true threads=0 ! rtph264pay \<br />
! rtpbin.send_rtp_sink_0 \<br />
rtpbin.send_rtp_src_0 ! udpsink port=5000 host=192.168.1.2 \<br />
rtpbin.send_rtcp_src_0 ! udpsink port=5001 host=192.168.1.2 sync=false async=false \<br />
udpsrc port=5002 ! rtpbin.recv_rtcp_sink_0</p></blockquote>
<p>Puis sur le client (192.168.1.2):<br />
<blockquote>gst-launch -v gstrtpbin name=rtpbin latency=200 \<br />
udpsrc caps="application/x-rtp, media=(string)video,<br />
clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" port=5000 \<br />
! rtpbin.recv_rtp_sink_0 \<br />
rtpbin. ! rtph264depay ! ffdec_h264 ! xvimagesink \<br />
udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \<br />
rtpbin.send_rtcp_src_0 ! udpsink port=5002 host=192.168.0.1 sync=false async=false</p></blockquote>
<h1>Conclusion</h1>
<p>Comme toujours dans ce genre d'exercice, le paramétrage des codecs vidéos dépend de votre source (on n'encode pas de la même manière le flux CIF venant d'une Webcam ou un fichier vidéo HD...). On a ici trouvé un bon compromis entre qualité d'affichage et bande passante consommée sur le réseau. Etant loin d'être un spécialiste sur le sujet, il y a surement des optimisations à faire. Les commentaires sont fait pour ça !</p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2001">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/gstreamer-et-le-codec-x264.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiler GStreamer depuis les sources sous GNU/Linux</title>
		<link>http://blog.nicolargo.com/2009/06/compiler-gstreamer-depuis-les-sources-sous-gnulinux.html</link>
		<comments>http://blog.nicolargo.com/2009/06/compiler-gstreamer-depuis-les-sources-sous-gnulinux.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 09:20:06 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[compilation]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/compiler-gstreamer-depuis-les-sources-sous-gnulinux.html</guid>
		<description><![CDATA[Voici une petite procédure pour compiler la dernière version du framework multimédia GStreamer tout en préservant la version installée depuis les dépôts officiels. La procédure a été validé sur une GNU/Linux Ubuntu 9.04 mais doit facilement être adaptable à d'autres distribution (pour une procèdure équivalente sous Mac OS X, vous pouvez lire ce billet).
GStreamer étant [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/gstreamer-logo.png" />Voici une petite procédure pour compiler la dernière version <a href="http://blog.nicolargo.com/tag/gstreamer">du framework multimédia GStreamer</a> tout en préservant la version installée depuis les dépôts officiels. La procédure a été validé sur une GNU/Linux Ubuntu 9.04 mais doit facilement être adaptable à d'autres distribution (pour une procèdure équivalente sous Mac OS X, vous pouvez <a href="http://blog.nicolargo.com/2009/02/installation-de-gstreamer-sur-mac-os-x.html">lire ce billet</a>).</p>
<p>GStreamer étant un framework, il se base sur de nombreuses librairies externes. Pour nous simplifier la tache, nous allons utiliser les dépôts pour l'installation de ces librairies:<br />
<blockquote>sudo aptitude build-dep gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse bison flex</p></blockquote>
<p>Ensuite on récupère <a href="http://gstreamer.freedesktop.org/src/">les dernières versions disponibles</a> de GStreamer et de ses plugins:<br />
<blockquote>mkdir ~/src<br />cd ~/src<br />wget http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.23.tar.gz<br />wget http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-0.10.12.tar.gz<br />wget http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.23.tar.gz<br />wget http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.10.15.tar.gz<br />wget http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.gz</p></blockquote>
<p>On commence par la compilation de GStreamer (core). L'installation se fera dans le répertoire /opt/gstreamer/gstreamer-0.10.23:<br />
<blockquote>tar zxvf gstreamer-0.10.23.tar.gz<br />cd gstreamer-0.10.23<br />./configure --prefix=/opt/gstreamer/gstreamer-0.10.23<br />make<br />sudo make install<br />cd ..</p></blockquote>
<p>... puis les plugins "base":<br />
<blockquote>tar zxvf gst-plugins-base-0.10.23.tar.gz<br />cd gst-plugins-base-0.10.23<br />PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.23/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure --prefix=/opt/gstreamer/gstreamer-0.10.23<br />make <br />sudo make install<br />cd ..</p></blockquote>
<p>... puis les plugins "good":<br />
<blockquote>tar zxvf gst-plugins-good-0.10.15.tar.gz<br />cd gst-plugins-good-0.10.15<br />PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.23/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure --prefix=/opt/gstreamer/gstreamer-0.10.23<br />make <br />sudo make install<br />cd ..</p></blockquote>
<p>... puis les plugins "bad":<br />
<blockquote>tar zxvf gst-plugins-bad-0.10.12.tar.gz<br />cd gst-plugins-bad-0.10.12<br />PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.23/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure --prefix=/opt/gstreamer/gstreamer-0.10.23<br />make <br />sudo make install<br />cd ..</p></blockquote>
<p>... et enfin les plugins "ugly":<br />
<blockquote>tar zxvf gst-plugins-ugly-0.10.11.tar.gz<br />cd gst-plugins-ugly-0.10.11<br />PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.23/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure --prefix=/opt/gstreamer/gstreamer-0.10.23<br />make <br />sudo make install<br />cd ..</p></blockquote>
<p>Puis on créé un lien symbolique entre le répertoire /opt/gstreamer/current et /opt/gstreamer/gstreamer-0.10.23. Ce lien nous permet d'avoir plusieur version de GStreamer sur notre système.<br />
<blockquote>sudo ln -s /opt/gstreamer/gstreamer-0.10.23 /opt/gstreamer/current</p></blockquote>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1987">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/compiler-gstreamer-depuis-les-sources-sous-gnulinux.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Changer automatiquement de fond d&#039;ecran</title>
		<link>http://blog.nicolargo.com/2009/06/changer-automatiquement-de-fond-decran.html</link>
		<comments>http://blog.nicolargo.com/2009/06/changer-automatiquement-de-fond-decran.html#comments</comments>
		<pubDate>Fri, 05 Jun 2009 09:34:28 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[fond-ecran]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/changer-automatiquement-de-fond-decran.html</guid>
		<description><![CDATA[Voici une petit logiciel bien pratique pour changer automatiquement de fond d'écran après une période configurable: Desktop Drapes.
On commence par l'installer (par exemple à partir des dépôts sous Ubuntu):
sudo apt-get install drapes
On lance ensuite l'application via le menu Système / Préférences / Desktop Drapes, un nouvel icône va s'afficher dans la barre de menu. Un [...]]]></description>
			<content:encoded><![CDATA[<p>Voici une petit logiciel bien pratique pour changer automatiquement de fond d'écran après une période configurable: <a href="http://drapes.mindtouchsoftware.com/">Desktop Drapes</a>.</p>
<p>On commence par l'installer (par exemple à partir des dépôts sous Ubuntu):<br />
<blockquote>sudo apt-get install drapes</p></blockquote>
<p>On lance ensuite l'application via le menu Système / Préférences / Desktop Drapes, un nouvel icône va s'afficher dans la barre de menu. Un clic droit dessus pour accéder aux préférences:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/drapers.png" /></div>
<p>Et voilà le travail, un nouveau fond d'écran toutes les 2 heures...</p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1983">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/changer-automatiquement-de-fond-decran.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Test du codec Speex dans Gstreamer</title>
		<link>http://blog.nicolargo.com/2009/06/test-du-codec-speex-dans-gstreamer.html</link>
		<comments>http://blog.nicolargo.com/2009/06/test-du-codec-speex-dans-gstreamer.html#comments</comments>
		<pubDate>Thu, 04 Jun 2009 10:01:10 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[codec]]></category>
		<category><![CDATA[speex]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/test-du-codec-speex-dans-gstreamer.html</guid>
		<description><![CDATA[Speex (wiki / site officiel) est un codec audio libre (licence dérivée de BSD) dont les perfomances sont très intéressantes, surtout pour transporter un signal comme la voix humaine. Le but de ce billet est de tester ce codec dans le cadre d'une application de streaming audio.
Mise en place du test
Pour tester ce codec, j'utilise [...]]]></description>
			<content:encoded><![CDATA[<p>Speex <small>(<a href="http://fr.wikipedia.org/wiki/Speex">wiki</a> / </small><small><a href="http://www.speex.org/">site officiel</a>)</small> est un codec audio libre (<a href="http://www.xiph.org/licenses/bsd/speex/">licence</a> dérivée de BSD) dont les perfomances sont très intéressantes, surtout pour transporter un signal comme la voix humaine. Le but de ce billet est de tester ce codec dans le cadre d'une application de streaming audio.<br />
<h1>Mise en place du test</h1>
<p>Pour tester ce codec, j'utilise le <a href="http://blog.nicolargo.com/tag/gstreamer">framework GStreamer</a> et deux scripts shell tournant sur deux machines différentes. Le script <i>rtpserver.sh</i> prend comme source le microphone par défaut de votre machine, encode le flux en Speex, puis le diffuse en RTP/UDP vers la seconde machine. Le script <i>rtpclient.sh</i> récupére le flux RTP/UDP venant de la première machine, le décode et le diffuse sur la sortie son par défaut.</p>
<p>Le script <i>rtpserver.sh</i>:<br />
<blockquote><small>#!/bin/sh</small></p>
<p><small>SEND_TO_ADDR=192.168.29.111</small><br /><small>SEND_TO_RTP_PORT=5003</small><br /><small>SEND_TO_RTCP_PORT=5004</small><br /><small>RECV_FROM_RTCP_PORT=5005</small></p>
<p><small>ENCODER=speexenc</small><br /><small>PAYLOADER=rtpspeexpay</small></p>
<p><small>SPEEX_PARAMS="quality=4 vad=true dtx=true"</small><br /><small>SPEEX_CAPS="audio/x-raw-int,rate=16000" </small></p>
<p><small>ENCODER_PARAMS=${SPEEX_PARAMS}</small><br /><small>RTP_PARAMS="latency=200"</small><br /><small>AUDIO_CAPS=${SPEEX_CAPS}</small></p>
<p><small>gst-launch -v&nbsp; gstrtpbin name=rtpbin ${RTP_PARAMS} \</small><br /><small>alsasrc \</small><br /><small>! queue ! audioresample ! ${AUDIO_CAPS} ! ${ENCODER} ${ENCODER_PARAMS} ! ${PAYLOADER} \</small><br /><small>! rtpbin.send_rtp_sink_1 \</small><br /><small>rtpbin.send_rtp_src_1 ! udpsink port=${SEND_TO_RTP_PORT} host=${SEND_TO_ADDR} \</small><br /><small>rtpbin.send_rtcp_src_1 ! udpsink port=${SEND_TO_RTCP_PORT} host=${SEND_TO_ADDR} sync=false async=false \</small><br /><small>udpsrc port=${RECV_FROM_RTCP_PORT} ! rtpbin.recv_rtcp_sink_1</small></p></blockquote>
<p>Le script <i>rtpclient.sh</i>:<br />
<blockquote><small>#!/bin/sh</small></p>
<p><small>SEND_TO_RTCP_PORT=5005</small><br /><small>RECV_FROM_ADDR=192.168.29.146</small><br /><small>RECV_FROM_RTP_PORT=5003</small><br /><small>RECV_FROM_RTCP_PORT=5004</small><br /><small>AUDIORATE=16000</small></p>
<p><small>gst-launch-0.10 -v gstrtpbin name=rtpbin latency=200 \</small><br /><small>udpsrc caps="application/x-rtp, media=(string)audio, clock-rate=(int)${AUDIORATE}, encoding-name=(string)SPEEX, encoding-params=(string)1, ssrc=(guint)419764010, payload=(int)110, clock-base=(guint)3478167082, seqnum-base=(guint)57894" port=${RECV_FROM_RTP_PORT} \</small><br /><small>! rtpbin.recv_rtp_sink_1 \</small><br /><small>rtpbin. ! rtpspeexdepay ! decodebin ! alsasink \</small><br /><small>udpsrc port=${RECV_FROM_RTCP_PORT} ! rtpbin.recv_rtcp_sink_1 \</small><br /><small>rtpbin.send_rtcp_src_1 ! udpsink port=${SEND_TO_RTCP_PORT} host=${RECV_FROM_ADDR} sync=false async=false</small></p></blockquote>
<p>Attention, il faut lancer le script <i>rtpclient.sh</i> avant le <i>rtpserver.sh</i> . Les variables suivantes sont modifiables dans les scripts:</p>
<p>Script <i>rtpserver.sh</i>:<br /><small>SEND_TO_ADDR: Adresse IP du client</small><br /><small>SEND_TO_RTP_PORT: Numéro de port sur lequel les paquets RTP seront envoyés</small><br /><small>SEND_TO_RTCP_PORT</small><small>: Numéro de port sur lequel les paquets RTCP seront envoyés</small><br /><small>RECV_FROM_RTCP_PORT</small><small>: Numéro de port sur lequel les paquets RTCP seront reçus</small><br /><small>SPEEX_PARAMS: <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-speexenc.html">Paramètres</a> du plugin d'encodage Speexenc</small><br /><small>SPEEX_CAPS: Caps du flux audio (audio rate)</small></p>
<p>Script <i>rtpclient.sh</i>:<br /><small>SEND_TO_RTCP_PORT: </small><small>Numéro de port sur lequel les paquets RTCP seront </small><small>envoyés</small><br /><small>RECV_FROM_ADDR:&nbsp;</small><small> Adresse IP du serveur</small><small></small><br /><small>RECV_FROM_RTP_PORT: </small><small>Numéro de port sur lequel les paquets RTP seront </small><small>reçus</small><br /><small>RECV_FROM_RTCP_PORT: </small><small>Numéro de port sur lequel les paquets RTCP seront reçus</small><br /><small>AUDIORATE: Audio rate, mettre la même valeur que celle dans le caps du serveur</small><br />
<h1>Résultats des tests</h1>
<p>Le premier test a été effectué avec un audio rate de 44000 (bref un taux d'échantillonnage proche de celui d'un CD audio). </p>
<p><u>Paramètres:</u><br />rate=44000 / vad=false / dtx=false<br /><u>Tests:</u><br />En jouant sur l'option quality, on obtient <br />quality=10 -&gt; bande passante de 80 Kbps<br />quality=8 -&gt; bande passante de  60 Kbps<br />quality=6 -&gt; bande passante de  50 Kbps<br /><b>quality=4</b> -&gt; bande passante de  40 Kbps<br />quality=3 -&gt; bande passante de  36 Kbps<br />quality=2 -&gt; bande passante de  35 Kbps<br /><u>Conclusion:</u><br />On obtient une dégradation de la qualité de réception de la voix en dessous d'une valeur de quality de 4. Il est clairement dit dans la documentation que la qualité &gt; 4 son a réserver pour les sources audio plus complexes que la voix humaine (musique, film...). Par contre la consommation de CPU est plus importante (rapport de 5 contre 1 entre quality=10 et quality=1).<br />La bande passante est constante (à quelques Kbps) que l'on parle ou que l'on ne parle pas. </p>
<p><u>Paramètres:</u><br />En jouant sur les paramètres vad et dtx, on va essayer d'optimiser la bande passante en gardant la même qualité.<br /><b>VAD</b> (<small>dixit <a href="http://fr.wikipedia.org/wiki/Speex">Wiki</a></small>): <small>"Quand cette option est activé, le VAD détecte quand l'audio encodé est du dialogue ou du silence/bruit de fond. VAD est toujours implicitement activé en encodage VBR, donc cette option est utile uniquement en mode non VBR. Dans ce cas Speex détecte les périodes sans dialogue et les encode avec le strict minimum de bits pour reproduire le bruit de fond. Cette fonction est appelée Comfort Noise Generation (CNG)."</small><br /><b>DTX</b> (<small>dixit <a href="http://fr.wikipedia.org/wiki/Speex">Wiki</a></small>): <small>"la transmission discontinue est une fonctionnalité qui s'ajoute aux<br />opérations de VAD et de VBR, qui permet de couper la transmission<br />complètement quand le bruit de fond est stationnaire. Dans un fichier,<br />5&nbsp;bits sont utilisés pour chaque <span class="lang-en" xml:lang="en" lang="en"><i>frame</i></span> manquante (correspondant à 250&nbsp;bits/s)"</small><br /><u>Tests:</u><br />On ajoute les paramètres <b>vad=true</b> et <b>dtx=true</b> au niveau du serveur (<small>SPEEX_PARAMS</small>)<br />La bande passante reste la même (40 Kbps) quand on parle, par contre elle passe à 23 Kbps quand on ne parle pas.<br /><u>Conclusion:</u><br />Les algorithmes VAD et DTX fonctionnent très bien. Ils permettent de gagner de la bande passante quand l'activité au niveau sonore est faible (ce qui est le cas dans une conversation ou, normalement, une seule personne parle à un instant t).</p>
<p>En conservant les paramètres du premier test (<b>quality=4, </b><b>vad=true,</b> <b>dtx=true</b>), on change seulement l'audio rate (au niveau du serveur et du client).</p>
<p><u>Paramètres:</u><br />rate=16000<br /><u>Tests:</u><br />Bande passante de 28 Kbps lorsque l'on parle, 17 Kbps pendant les silences.<br /><u>Conclusion:</u><br />La qualité reste excellente. Sur une conversation (voix humaine), on ne voit pas la différence avec un rate de 44000 (44 KHz).</p>
<p><u>Paramètres:</u><br />rate=8000<br /><u>Tests:</u></p>
<p>Bande passante de 23 Kbps lorsque l'on parle, 16 Kbps pendant les silences.</p>
<p><u>Conclusion:</u><br />La qualité est dégradée mais la conversation reste compréhensible. On gagne seulement 5 Kbps par rapport au test précédant. </p>
<h1>Pour conclure<br /></h1>
<p>D'après les tests effectués, le meilleur compromis bande passante qualité est:
<ul>
<li>audio rate = 16000 (16 Khz)</li>
<li>quality = 4</li>
<li>vad = true</li>
<li>dtx = true</li>
</ul>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1979">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/test-du-codec-speex-dans-gstreamer.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
