Catégories
Open-source Systeme Web

Firefox 3.5 sous Ubuntu (dépôts)

Je ne sais pas vous mais à force de tester des navigateurs alternatifs (par exemple Chromium), je trouve Firefox 3.0 de plus en plus lourd à supporter. J’ai donc décidé de tester la dernière version disponible, c’est à dire Firefox 3.5 (daily update).

Le but de ce billet est de faire une installation propre de cette version du navigateur de Mozilla en passant par les dépôts Launchpad.

Configuration des dépôts Launchpad

On commence par éditer le fichier /etc/apt/sources.list en y ajoutant les lignes suivantes (exemple pour version Ubuntu 9.04 jaunty):

deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main

Ensuite il faut lancer la mise à jour de la liste des dépôts:

sudo apt-get update

Si vous rencontrez l’erreur suivante:

W: GPG error: http://ppa.launchpad.net jaunty Release: Les signatures suivantes n’ont pas pu être vérifiées car la clé publique n’est pas disponible : NO_PUBKEY EF4186FE247510BE
W: Vous pouvez lancer « apt-get update » pour corriger ces problèmes.

il faut alors télécharger les clès puis relancer la mise à jour de la liste des dépôts.

Installation de Firefox 3.5

On peut maintent passer à l’installation de la dernière version disponible (version stable au moment de l’écriture de ce billet):

sudo aptitude install firefox-3.5 firefox-3.5-gnome-support

Si tout se passe comme prévu lors de l’installation, vous devriez avoir cette dernière version disponible dans le menu Applications / Internet.

Catégories
Image Open-source Systeme

Convertir JPG vers PDF en ligne de commande

Sam2p (distribué par son auteur sous licence GPLv2) est un petit utilitaire très simple et pratique si vous avez à convertir des images d’un format vers un autre. Il est disponible sous GNU/Linux et Windows.

Liste des formats d’entré supportés:
PNM, PBM, PGM, PPM, XPM, GIF, LBM, TGA, PCX, JPEG, TIFF, PNG, PS, EPS, PDF

Liste des formats de sortie supportés:
XWD, BMP, PNG, TIFF6, JPEG, PNM, GIF89a, XPM, PS, EPS, PDF

Un fois le logiciel installé avec la commande suivante (exemple d’installation sous Ubuntu):

sudo apt-get install sam2p

la commande pour convertir le fichier image.jpg vers image.pdf est:

sam2p image.jpg image.pdf

Il est bien sûr possible de spécifier des options à cette ligne de commande notamment pour ajuster le taux de compression (-c), changer la résolution de l’image (-m) ou bien appliquer une rotation ou un redimensionnement (-e).

L’utilisation de la ligne de commande permet de pouvoir facilement inclure sam2p dans un script afin de faire un traitement par lot des images.

Catégories
Open-source Systeme Web

Installation de Chromium, la source de Google Chrome

Si il y a bien un sujet qui fait buzz dans le petit monde des navigateurs Internet, c’est bien Google Chrome. En attendant les versions pour GNU/Linux et Mac OS X qui ne devraient pas tarder, seul une version bêta pour Windows est disponible. Ce navigateur propriétaire se base sur un cœur open-source nommé Chromium (utilisant lui même le moteur Webkit) qui n’est ni plus ni moins qu’une version libre (licence BSD) de Google Chrome sans le verni de Google (interfaces avec les services types Gmail, Calendar, Reader…). Pour notre plus grand bonheur, Chromium est disponible sous GNU/Linux (et sous Windows et sous Mac OS X…).

Téléchargement de la version précompilée

On commence par récupérer le numéro de la dernière version alpha (nightly version 16851 au moment de l’écriture de ce billet) disponible en saisissant l’URL suivante dans notre navigateur Web:

http://build.chromium.org/buildbot/snapshots/chromium-rel-linux/LATEST
16851

Ensuite, dans un terminal, on tape les commandes suivantes:

wget http://build.chromium.org/buildbot/snapshots/chromium-rel-linux/16851/chrome-linux.zip
unzip chrome-linux.zip

On se retrouve avec un répertoire nommé chrome-linux.

Lancement de l’application

On doit lancer les commandes suivantes:

cd chrome-linux
./chrome

Si tout se passe bien, le navigateur devrait s’afficher.

Utilisateur de Firefox, j’ai été agréablement surpris par la rapidité de chargement du navigateur (moins de 2 secondes). A bien sûr tempérer par le fait que les fonctions de cette version alpha de Chromium sont assez réduites. Il n’y a, par exemple, pas de gestion des plugins.

Après quelques minutes d’utilisation, l’affichage des pages ne pose aucun problème et s’avère très rapide (environ 25% plus rapide que Firefox 3.0.10 sur des pages lourdes):

Mais c’est au niveau de la compatibilité avec les normes Web est vraiment surprenant, car même pour une version alpha, il arrive à obtenir 100% au test Acid 3 (alors que Firefox 3.0.10 plafonne à 71%). Seul une petite erreur référencé (LINKTEST FAILED) gâche le tableau.


Firefox 3.0.10 vs Chronium Alpha 16851

Conclusion

Ce navigateur me semble très prometteur. La qualité et la rapidité d’affichage sont excellentes, le moteur Webkit y est surement pour beaucoup (c’est également le moteur utilisé par Safari). Reste à voir comment va évoluer le projet. Espérons que les développeurs gardent une politique de navigateur libre et léger. Alors Chromium pourra se positionner comme une alternative au leader qu’est Firefox dans les navigateurs multi-plateformes.

Catégories
Open-source Systeme

Moblin un nouveau Linux pour les netbooks

Le 1er avril 2009, Intel a cédé à la Linux Fundation le développement de son système GNU/inux dédié aux terminaux mobiles (netbooks, MIDs: Mobile Internet devices). Nommé Moblin (contraction de mobile et Linux), ce système d’exploitation vise à exploiter le meilleur des performances des machines construites autour du processeur Intel® Atom™. Il avait fait parler de lui il y a maintenant quelques mois (le projet initial date de 2007) car une des caractérisques est un démarrage (boot) très rapide (inférieur à 5 secondes).

Actuellement disponible en version 2.0 bêta (image ISO du LiveCD téléchargeable ici), le projet propose également un environnement de développement permettant de créer des images ISO personnalisables à vos besoins (Moblin Image Creator) et bien sûr un SDK complet pour développer vos applications. Pour vous donner une idée des possibilités de l’interface graphique de Moblin, vous pouvez regarder cette vidéo.

La principale différence de Moblin par rapport à un projet comme Android est la cible des terminaux. En effet, alors qu’Android se focalise, pour l’instant sur les téléphons portables, Moblin s’attaque au marché des netbooks et MIDS (que l’on peut retrouver par exemple dans les voitures pour gérer les fonctions multimédia).

Le projet lance aujourd’hui un appel à la communauté pour découvrir, tester et développer Moblin. Un site spécialement dédié à été créé à cet effet: Moblinzone.

Intel

Après inscription, un espace privé vous donnera accès à un nombre important de ressources sur le projet et vous permettra entre autres de:

  • accéder aux vidéos, blogs et articles.
  • telecharger les applications disponibles sur Moblin.
  • profiter en avant première des dernières mises au point de Moblin.
  • partager vos compétences et bénéficier de celles des autres membres de la communauté Moblin.

 Ce projet prometteur est donc à suivre de très prêt aux vues de l’explosion des ventes des netbooks que l’on a connue en 2008 !

Note: ceci est un article sponsorisé, j’ai donc été rémunéré pour la rédaction de ce billet.

Catégories
Open-source Systeme

Linux arrive (enfin) chez Dell

Après une longue attente de la part de la communauté libre, Dell, un des leaders mondiaux de la vente de PC en ligne, propose un PC portable livré en standard avec une distribution GNU/Linux Ubuntu 8.04 (le mini PC Inspiron Mini 10v au prix de 249 Euros). Bien que Dell annonce sur son site l’ouverture des ces ordinateurs au monde GNU/Linux, seulement deux mini PC sont disponibles sur le site Français (le nouveau Mini 10v et le Mini 9).

En espérant que cette initiative ne soit pas un simple buzz marketing et que cette offre fasse boule de neige chez Dell et d’autres revendeurs…
 

Catégories
Open-source Systeme

Upgrade d’un Ubuntu serveur

Petite note pour petite tête… Pour upgrader à distance (via SSH) un Ubuntu server d’une version X à une version Y (par exemple d’une 8.04 à une 9.04), il suffit d’installer le package suivant:

sudo apt-get install update-manager-core

La configuration du logiciel se fait dans le fichier /etc/update-manager/release-upgrades. Personellement, j’utilise l’option:

Prompt=normal

Puis on lance la commande:

sudo do-release-upgrade

Et voili…

Catégories
Open-source Systeme

Création d’un serveur chez Gandi

Je connaissais surtout Gandi pour la qualité de son service de réservation de noms de domaines Internet. Depuis maintenant plusieurs mois, ils se sont lancés dans l’hébergement de serveurs virtualisés. J’ai donc décidé de tester ce nouveau service.

Création du serveur

Basée sur la technologie XEN (logiciel libre de virtualisation), l’hébergement est flexible. Il faut donc choisir un nombre de part (valeur allant de 1 à 16) d’un serveur comportant 64 parts. Il est bien sûr possible de faire évoluer le nombre de parts de son serveur sur simple demande.

Ainsi, si vous choisissez l’entrée de gamme à 12 Euros (soit 1 seule part), vous avez les caractéristiques suivantes:

  • 1/64ème des capacités globales du serveur (CPU, …)
  • 1/64ème des 16 Go de mémoire du serveur, soit 256 Mo de RAM garantie (+512 Mo de Swap)
  • 1/64ème des capacités réseau, soit 5 Mbits dédiés
  • 1/64ème du disque réservé au serveur, soit 5 Go de disque data (+3 Go pour le système)

Bref ce n’est pas une bête de course, mais largement suffisant pour héberger un site Web (blog ou autres), un serveur FTP, SVN, Nagios…

Vient ensuite le choix du système. Les OS suivants sont disponibles:

  • Ubuntu 8.04
  • Ubuntu 9.04
  • Debian 4
  • Debian 5
  • OpenSuse 10.3
  • Fedora Core 8
  • Mandriva 2008.0
  • Mandriva 2008.1
  • CentOS 5

Je trouve qu’il manque des OS de type BSD (FreeBSD ou autres) mais ces derniers ne devraient pas tarder à être disponibles.

Je suis pour ma part partie sur une Ubuntu 8.04 et moins de 10 minutes après la validation de la demande, le serveur était prêt à être utilisé avec un bel accès SSH.

Premiers tests

Au niveau réseau, les caractéristiques sont conformes:

  • Premier test IPerf: 4 Mbps.
  • Delaie de transit moyen (depuis la france): 20ms

Localisation du serveur (source). Comme on peut le voir mon serveur est hébérgé dans Paris.

CPU:

$ cat /proc/cpuinfo
processor    : 0
vendor_id    : AuthenticAMD
cpu family    : 15
model        : 65
model name    : Dual-Core AMD Opteron(tm) Processor 8218
stepping    : 3
cpu MHz        : 2593.498
cache size    : 1024 KB
fdiv_bug    : no
hlt_bug        : no
f00f_bug    : no
coma_bug    : no
fpu        : yes
fpu_exception    : yes
cpuid level    : 1
wp        : yes
flags        : fpu de tsc msr pae cx8 apic cmov pat clflush mmx fxsr sse sse2 ht nx mmxext fxsr_opt 3dnowext 3dnow up pni cmp_legacy cr8legacy ts fid vid ttp tm stc
bogomips    : 5188.66

Mémoire:

$ free
             total       used       free     shared    buffers     cached
Mem:        262288     200888      61400          0      38408     116648
-/+ buffers/cache:      45832     216456
Swap:       634556         64     634492

Espace disque:

$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvda1             2466700    825500   1641196  34% /
varrun                  131144        56    131088   1% /var/run
varlock                 131144         0    131144   0% /var/lock
udev                    131144        20    131124   1% /dev
devshm                  131144         0    131144   0% /dev/shm
/dev/xvdb              5160576    141440   4756992   3% /srv/

Quelques installations plus tard, j’ai mes services SVN et FTP qui sont opérationnels.

Après 15 jours…

15 jours plus tard, le serveur est fiable (aucune coupure de service, uptime de 15 jours…).


Disponibilité du serveur

A partir de l’interface d’administration Web de Gandi on a accès à des graphes pour la l’occupation CPU, l’utilisation du disque et du réseau:

Conclusion

Le service d’hébergement de Gandi est très simple à installé, quelques minutes suffisent pour disposer de son propre serveur. Je trouve le système de « parts » très flexible et conjugué avec les graphes de supervision, il permet de faire évoluer finement les caractéristiques de son serveur en fonction des besoins.

Catégories
Developpement Open-source Systeme

Installation d’un serveur SVN sous Ubuntu

Le but de ce billet est de mettre en place un serveur de gestion de versions basée sur SVN+SSH.

On commence par installer le package subversion qui comprend à la fois le client et le serveur SVN.

# sudo svn update
# sudo apt-get install subversion

on créé un utilisateur et un groupe générique svn.

# sudo adduser svn
Adding user `svn’ …
Adding new group `svn’ (1000) …
Adding new user `svn’ (1001) with group `svn’ …
Creating home directory `/home/svn’ …
Copying files from `/etc/skel’ …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for svn
Enter the new value, or press ENTER for the default
Full Name []: SVN
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y

Pour des questions de sécurité, je vous conseille de désactiver le SHELL pour cet utilisateur:

# sudo vipw
svn:x:1001:1000:SVN,,,:/home/svn:/usr/sbin/nologin

Si vous souhaitez accéder à votre serveur SVN avec un compte unix bien précis, il faut ajouter le login de ce compte au groupe svn:

# sudo vigr
svn:x:1000:nicolargo

Puis on créé un répertoire ou seront stockées les sources de vos programmes.

# sudo mkdir /var/svn

Il faut ensuite demander à SVN de créer un répertoire SVN pour notre projet:

# sudo svnadmin create /var/svn/projet

Puis de changer les droits:

# sudo chown -R svn:svn /var/svn
# sudo chmod -R 775 /var/svn

Il ne reste plus qu’a tester votre serveur à partir d’une machine distante en « important » votre projet (dont les sources sont localisées dans le répertoire ~/projet pour illustrer ce billet).

Avant l’importation, on va créer la structure classique de SVN:

projet
– trunk
– branches
– tags

client# svn mkdir –parents  svn+ssh://nicolargo@monserveur/var/svn/projet/trunk -m «  »
client# svn mkdir –parents  svn+ssh://nicolargo@monserveur/var/svn/projet/tags -m «  »
client# svn mkdir –parents  svn+ssh://nicolargo@monserveur/var/svn/projet/branches -m «  »

Puis on importe les sources:

client# cd ~/projet
client# svn import . svn+ssh://nicolargo@monserveur/var/svn/projet/trunk -m « Premiere importation »
nicolargo@monserveur’s password:

Révision 0 propagée.

Il ne reste plus qu’a tester l’exportation des sources:

client# cd ~
client# mv projet projet.init
client# svn co svn+ssh://nicolargo@monserveur/var/svn/projet/trunk projet

Révision 0 extraite.

Pour aller plus loin dans l’utilisation de votre nouveau serveur SVN, je vous conseille le très bon article de Ulhume sur son non-blog…(remplacer juste http:// par svn+ssh://)

Catégories
Gstreamer Open-source Systeme

Tu fais quoi après l’installation d’Ubuntu ?

C’est en lisant le billet de SckyzO ce matin que je me suis rendu compte que je n’avais jamais mis sur le papier (sic) la liste des logiciels que j’installais systématiquement sur mes machines GNU/Linux Ubuntu.

Je vais essayer de mettre régulièrement ce billet à jour.

Voici donc ma commande magique (validée sur Ubuntu 9.04):

sudo apt-get install compizconfig-settings-manager gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly-multiverse vlc ffmpeg ffmpeg2theora banshee music-applet liferea gwibber build-essential rxvt-unicode checkgmail gtk-recordmydesktop pidgin-facebookchat pidgin-plugin-pack drapes gnome-do gnome-do-plugins conky hardinfo flashplugin-installer sun-java6-plugin gthumb moovida

qui va installer:

  • la totale pour le FrameWork GStreamer
  • VideoLAN, le seul, l’unique, le meilleur logiciel pour regarder ses vidéos
  • Pour l’encodage/decodage FFmpeg et FFmpeg2theora
  • Banshee, mon lecteur audio préféré sous GNU/Linux (et son applet music-applet)
  • Liferea, comment vivre sans un lecteur de flux RSS de nos jours ? Celui-ci est simple, libre et efficace… (petit rappel, pour vous abonner au flux RSS de ce blog, c’est par ici)
  • Besoin de Twitter ? alors Gwibber est là…
  • un environnement de développement minimal (build-essential) puis suivre ce tuto pour installer Eclipse)
  • Urxvt est un terminal, plus rapide que gnome-terminal (voir ici pour une configuration aux petits oignons).
  • CheckGmail, un petit icone bien pratique qui se positionne dans la barre des taches pour me prévenir des nouveaux mail (Gmail). On peut même lire le contenu des mails. Il est même possible de gérer plusieurs comptes (option -profile=boulot) et les domaines hébergés chez Google (-hosted=mondomaine.com).
  • gtk-recordmydesktop permet de faire un screencast de son écran et d’une entrée audio. Idéal pour les tutos vidéos.
  • pidgin-facebookchat et pidgin-plugin-pack sont des plugins pour Pidgin, le client de messagerie instantané.
  • drapes est un utilitaire pour changer automatiquement de fond d’écran.
  • Gnome Do, un lanceur d’application libre et très bien.
  • Conky apporte une touche geek à votre bureau avec une supervision temps réel de votre machine (CPU / Memoire / T° …). Personnellement, j’utilise ce fichier .conkyrc (à mettre à la racine de votre compte). Si vous voulez le charger au démarrage : Système préférences → Application au démarrage.
  • Hardinfo permet d’avoir des informations systèmes et hardware de votre machine
  • Gthumb pour retoucher simplement mes images
  • Moovida: le media center ultime et libre !

Configuration du système

Pour le thèmes, je suis un fan de ceux proposées par Francois. Il faut d’abord installer des repos en suivant cette procédure. Puis séléctionner un des thèmes proposées.

Autres logiciels nécessitant des repos non standards…

Update: mon fichier /etc/apt/sources.list se trouve ici.

Si nécessaire, j’installe aussi Handbrake, il permet de riper les DVD et de convertir une vidéo dans un autre format. Pour cela, il faut ajouter les entrées suivants au fichier /etc/apt/sources.list:

## Medibuntu
deb http://packages.medibuntu.org/ jaunty free non-free

## Handbrake
# sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 62D38753
deb http://ppa.launchpad.net/handbrake-ubuntu/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/handbrake-ubuntu/ppa/ubuntu jaunty main

Puis installer les packages:

sudo apt-get update

sudo aptitude install libdvdcss2 handbrake

Pour faire les captures d’écran qui illustre mes billets, j’utilise le logiciel Shutter. Pour l’installer, il faut:

Ajouter la lignes suivantes à votre fichier /etc/apt/sources.list:

## Shutter (capture ecran)
# sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 009ED615
deb http://ppa.launchpad.net/shutter/ppa/ubuntu jaunty main

Puis lancer les deux commandes suivantes:

sudo apt-get update

sudo apt-get install  shutter

La version d’OpenOffice fournie en standard date un peu, pour avoir une version toute fraiche, il faut ajouter la lignes suivantes à votre fichier /etc/apt/sources.list:

## OpenOffice
# sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 247D1CFF
deb http://ppa.launchpad.net/openoffice-pkgs/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/openoffice-pkgs/ppa/ubuntu jaunty main

Puis lancer les deux commandes suivantes:

sudo apt-get update

sudo aptitude safe-upgrade

J’ai (pour l’instant ) laissé tombé Firefox (devenu trop lourd, il faut maigrir un peu Mr…) pour Chromium (lire ce billet):

Ajouter la lignes suivantes à votre fichier /etc/apt/sources.list:

## Chromium beta

# sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 4E5E17B5

deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main

deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main

Puis on installe le bébé:

sudo aptitude update

sudo aptitude install chromium-browser

Pour toujours avoir mes fichiers sous la main quelque soit l’ordinateur ou je me trouve, j’utilise le répertoire partagé Dropbox.

Ajouter la lignes suivantes à votre fichier /etc/apt/sources.list:

## Dropbox
# sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 30A514BE
deb http://linux.getdropbox.com/ubuntu jaunty main
deb-src http://linux.getdropbox.com/ubuntu jaunty main
deb http://ppa.launchpad.net/nautilus-dropbox/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/nautilus-dropbox/ppa/ubuntu jaunty main

Puis lancer les deux commandes suivantes:

sudo apt-get update

sudo apt-get install nautilus-dropbox

Conclusion

Et vous c’est quoi votre ligne magique ???

Catégories
Hardware Open-source Reseau Systeme

GStreamer aime les caméras IP Axis

Si vous lisez régulièrement ce blog, vous savez que je m’intéresse au FrameWork multimédia GStreamer (cliquez ici pour voir la liste des billets sur le sujet). Nous allons poursuivre la découverte de cette superbe trousse à outil multimédia en l’appliquant sur la récupération et l’exploitation de flux vidéo venant de caméras IP. Nous nous focaliserons ici sur les caméras IP AXIS, non pas que j’ai des actions dans cette société mais il faut avouer que leurs caméras sont de très bonne qualité et l’accès aux flux vidéos assez simple.

Avant de nous plonger dans le vif du sujet et si vous souhaitez faire ces tests chez vous, il faut au préhalable installer GStreamer sur votre système.

Ma configuration de test est la suivante:

Lors de la rédaction de ce billet, j’ai utilisé la caméra AXIS 213:

La configuration de cette caméra (cam01) est la suivante:

Format CIF
Compression 50%
Frame rate: 25 images/s

Configuration du PC1:

OS: GNU/Linux Debian 5.0 + Gstreamer 0.10.19-3
Hardware: Pentium Quad core CPU 2.8 Ghz + 4 Go RAM

Configuration du PC2:

OS: GNU/Linux Ubuntu 8.10 + Gstreamer 0.10.21-4
Hardware: Pentium Dual core CPU 3.0 Ghz + 512 Mo RAM

Affichage du flux vidéo

Cette caméra (comme toutes les caméras AXIS) permet la diffusion sur le réseau en utilisant deux formats:

  • MJPEG sur HTTP
  • MPEG-4 sur RTSP

Affichage du flux MJPEG/HTTP

On lance la commande suivante sur la machine PC1:

gst-launch gnomevfssrc location=http://cam01/axis-cgi/mjpg/video.cgi?resolution=CIF ! jpegdec ! ffmpegcolorspace ! autovideosink

Un rapide ntop sur notre machine PC1 nous indique que le fux est gourmand en bande passante (de l’ordre de 3.3 Mbps). L’occupation CPU varie entre 20% et 60%. La vidéo est fluide.

Affichage du flux MPEG4/RTSP

On lance la commande suivante sur la machine PC1:

gst-launch-0.10 rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! decodebin ! ffmpegcolorspace ! autovideosink

La bande passante entre la caméra et le PC1 est alors de 1 Mbps en pics (moyenne de 400 Kbps quand il y a peu de mouvement devant la caméra). L’occupation CPU varie entre 5% et 15%. La vidéo est fluide.

Le paramètre latency (qui est par défaut à 3000, soit 3 secondes) permet de réduire la taille du buffer d’entrée. Si vous êtes sur un réseau LAN, vous pouvez sans problème mettre comme valeur 0 (comme je l’ai fait dans mon exemple). Par contre sur des réseaux moins performant (en terme de débit, de perte de paquets…), il vaut mieux conserver un buffer un peu plus élevé.

Encodage du flux vidéo dans un fichier

Nous allons continuer notre test en essayant d’encoder « à la volée » le flux vidéo venant de la caméra IP. Détaillons un peu notre pipeline:

  • récupérer le flux MPEG4/RTSP de la caméra
  • l’afficher sur l’écran
  • réduire le nombre d’images par seconde (fps) à 1
  • encoder le flux en MJPG
  • sauvegarder dans un fichier AVI (output.avi)

La ligne de commande correspondante à lancer sur PC1 est:

gst-launch rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! tee name=save ! queue ! autovideosink save. ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)1/1″ ! queue ! jpegenc ! avimux ! filesink location=output.avi .save

Le fichier généré (output.avi) occupe un espace disque d’environ 15 Ko par seconde (soit 54 Mo/heure).

Afin d’optimiser cette taille, il est possible d’utiliser Theora (dans un fichier OGG), un codec vidéo libre et efficace. La commande devient alors:

gst-launch rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! tee name=save ! queue ! autovideosink save. ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)1/1″ ! queue ! theoraenc ! oggmux ! filesink location=output.ogg .save

On a alors une taille de fichier de sortie (output/ogg) d’environ 6 Ko par seconde (soit 21 Mo/heure).

Mixer plusieurs vidéos en une

Si vous disposé de plusieurs caméras, il peut être utile de mixer ces différentes sources dans une même image (un peu comme le mode PIN des télévisions).

Je vais dans l’exemple ci-dessous, prendre deux sources (Camera AXIS + Webcam USB) et les mixer:

La pipeline est la suivante:

gst-launch  v4l2src ! queue ! videoscale ! capsfilter caps= »video/x-raw-yuv,width=64,height=48,framerate=(fraction)5/1″ ! ffmpegcolorspace ! videobox border-alpha=0 alpha=1.0 top=-230 left=-278 ! videomixer name=mix ! ffmpegcolorspace ! autovideosink mix. rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,width=352,height=288,framerate=(fraction)25/1″ ! ffmpegcolorspace ! mix.

Attention de bien fixer les framerates (videorate ou videoscale + capsfilter), car videomixer (le plugin qui s’occupe de faire le mixage vidéo) semble assez sensible sur ce point.

Streaming vers une autre machine

Nous allons maintenant voir comment transcoder le flux vidéo d’une caméra IP pour le diffuser (streamer vers une autre machine).

La description du pipeline du PC1 est la suivante:

  • récupérer le flux MPEG4/RTSP de la caméra
  • réencodage en Theora (à 250 Kbps)
  • diffusion en UDP vers le PC2

puis celle du PC2:

  • récupérer de flux Theora/UDP venant du PC1
  • décodage Theora
  • affichage de la vidéo

et les commandes correspondantes, sur le PC2 (il faut lancer cette commande en premier):

gst-launch -v udpsrc port=1234 ! theoradec ! autovideosink

puis sur le PC1:

gst-launch rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)25/1″ ! queue ! theoraenc bitrate=250 ! queue ! udpsink host=pc2 port=1234

En moyenne, le débit observé entre PC1 et PC2 est de l’ordre de 250 Kbps (conforme donc a ce que l’on a configuré dans le plugin theoraenc), on observe cependant des pics à 250 Kps+30%. La consommation de CPU est de l’ordre de 25% sur PC1 et de 5% sur PC2. La vidéo est recue de manière fluide sur le PC2. Là encore, il ne faut pas oublier de fixer le nombre d’images par seconde avec videorate + capsfilter.

L’avantage avec GStreamer, c’est qu’il intégre une liste de plugins assez impressionnante, il est alors facile de les insérer dans notre pipeline. Par exemple, si l’on souhaite reprendre l’exemple ci-dessus et y ajouter un texte en sur-impression (overlay), il suffit d’utiliser le plugin cairotextoverlay.

La commande sur le PC1 devient alors:

gst-launch-0.10 rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! queue ! cairotextoverlay text= »Attention Tigrou ! » shaded-background=true ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)25/1″ ! queue ! theoraenc bitrate=250 ! queue ! udpsink host=pc2 port=1234

et le résultat sur PC2:

Pour conclure

Ce billet nous a permis de mettre le pied dans le monde passionnant du traitement des flux vidéo. Ce n’est qu’une introduction et la seule limite est votre imagination. Je vous rappelle que GStreamer peut être simplement intégré à vos applications grâce aux API disponibles. Si vous avez des questions et remarques sur le sujet, il existe une section spéciale dans le forum !