Streaming vidéo live libre

Introduction

Ce didacticiel est plus un retour d'expérience qu'un pas à pas permettant de mettre en place un streaming live entièrement libre. J'entends par “entièrement libre” que l'on utilisera des logiciels libres ainsi que des protocoles et codecs libres, le tout sur plateforme libre ;-).

Cette diffusion a été réalisée tout au long de deux journées lors de conférences sur le thème du handicap et de l'emploi en juin 2009 par le CRP 2iSA à Millau. Tout en diffusant, le flux DV du camescope était enregistré afin de faire le montage des différents conférences qui seront disponibles en téléchargement. Le montage est également entièrement réalisé avec des logiciels libres comme Cinelerra, Kino ou EKD.

Environnement technique

  • Poste d'acquisition :
    • Tour Intel Core 2 Quad 2.4 GHz + 2 Go RAM
    • Mandriva 2009 free 32 bits
    • dvgrab (Acquisition vidéo via IEEE1394)
    • ffmpeg2theora pour l'encodage au format OGV (ogg/theora)
    • oggfwd pour la diffusion vers le serveur de streaming
  • Serveur de streaming :
    • Serveur dédié OVH
    • Intel(R) Celeron(R) CPU 2,66 GHz + RAM 1 Go + DD 250 Go
    • Ubuntu Server 8.04 LTS 32 bits
    • Icecast2 compilé
    • iTheora sur serveur Web pour le client
  • Camescope DV paramétré en 4/3
  • Câble FireWire
  • Une ligne ADSL dédiée pour l'évènement

Les logiciels nécessaires

Nom du logicielFonction
dvgrabCapture du flux DV depuis la caméra vidéo
ffmpeg2theoraConversion du flux DV en flux ogg theora-vorbis
oggfwdTransfert du flux ogg/theora vers un serveur de streaming
Icecast2Serveur de contenu multimédia pour streaming
iTheoraLecteur multimédia pour page web

Chaîne vidéo

Acquisition vidéo

Le paquet disponible de la distribution fera très bien l'affaire. Sources disponibles sur le site http://www.kinodv.org/

Conversion ogg

Idem pour ffmpeg2theora, le paquet disponible de la distribution sera parfait.
J'ai utilisé la version 0.21 .
Pour les sources, elles sont disponibles sur le site suivant : http://v2v.cc/~j/ffmpeg2theora/

Transfert du flux vers le serveur de streaming

En ce qui concerne oggfwd, logiciel qui permet de transmettre le flux ogg/theora vers un serveur de streaming, j'ai été obligé de la compiler car les binaires - disponibles sur le site officiel ( http://v2v.cc/~j/oggfwd/ ) - n'ont pas fonctionné.

Avant de compiler oggfwd, il faudra peut-être que vous installiez le paquet bzr qui permet, si j'ai tout compris, de télécharger des sources et en faire le contrôle.

Téléchargement et compilation d'oggfwd

$ bzr get http://v2v.cc/~j/oggfwd
$ make
# make install


Serveur de streaming

Là aussi, nous allons devoir compiler Icecast2 car la plupart des paquets ne sont pas compilés avec l'option de diffusion vidéo. Il faut savoir qu'Icecast2 est, avant tout, utilisé en serveur de streaming audio, il a d'ailleurs, à l'origine, était développé pour cela. La diffusion de vidéo theora est possible depuis la version 2.2.0 .

J'ai pris le parti de suivre d'assez près le tuto suivant pour cette compilation : http://beplan.org/?p=87 .

Le serveur de streaming Icecast2 a été installé sur un serveur dédié OVH sous Ubuntu Server 8.04.1 LTS.

Il sera compilé avec l'ensemble de ses dépendances dans un répertoire donné. Cela permettra de le rendre indépendant du système et donc autonome. Il pourra être exécuté à la demande, en tant qu'utilisateur.
Il a été compilé en local, puis téléchargé sur le serveur dédié, ce qui permet de ne pas “polluer” un serveur en production.

Compilation des différents logiciels



Positionner vous dans votre home, puis :

$ mkdir source
$ mkdir icecast2
$ export SOURCE=~/source
$ export DEST=~/icecast2
$ cd source/

Puis télécharger les archives suivantes :

libxml2 : ftp://xmlsoft.org/libxml2/LATEST_LIBXML2
libxslt : ftp://xmlsoft.org/libxml2/LATEST_LIBXSLT
libogg,libvorbis,libtheora, libspeex : http://www.xiph.org/downloads/
curl : http://curl.haxx.se/ (J'avais utilisé la version 7.15.0 mais elle ne semble plus disponible. Pour Ubuntu, il y a des sources de la 7.15.1 disponibles à cette adresse : http://packages.ubuntu.com/source/dapper/curl)
Icecast : http://www.icecast.org/download.php

Compilation de libxml2 :

$ tar -xvzf LATEST_LIBXML2
$ cd libxml2-2.7.3/
$ ./configure --prefix=$DEST/
$ make
$ make install


Je n'ai pas réussi à diffuser en 16/9, j'ai donc paramétré le caméscope en 4/3.


Compilation de libxslt :

$ cd ..
$ tar -xvzf LATEST_LIBXSLT
$ cd libxslt-1.1.24/
$ ./configure --prefix=$DEST/ --with-libxml-src=../libxml2-2.7.3
$ make
$ make install


Compilation de libogg :

$ cd ..
$ tar -xvzf libogg-1.1.4.tar.gz
$ cd libogg-1.1.4/
$ ./configure --prefix=$DEST/
$ make
$ make install


Compilation de libvorbis :

$ cd ..
$ tar -xvzf libvorbis-1.2.3.tar.gz
$ cd libvorbis-1.2.3/
$ LD_LIBRARY_PATH=/home/user/icecast2/lib/:$LD_LIBRARY_PATH
$ ./configure --prefix=$DEST/ --with-ogg-libraries=/home/user/icecast2/lib/ --with-ogg-includes=/home/user/icecast2/include
$ make
$ make install
Remplacer user par votre nom d'utilisateur.


Compilation de libtheora :

$ cd ..
$ tar -xvzf libtheora-1.1.0.tar.bz2
$ cd libtheora-1.1.0/
$ LD_LIBRARY_PATH=/home/user/icecast2/lib/:$LD_LIBRARY_PATH
$ ./configure --prefix=$DEST/ --with-ogg-libraries=/home/user/icecast2/lib/ --with-ogg-includes=/home/user/icecast2/include --with-vorbis-libraries=/home/user/icecast2/lib/ --with-vorbis-includes=/home/user/icecast2/include/
$ make
$ make install
Remplacer user par votre nom d'utilisateur.


Compilation de speex :

$ cd ..
$ tar -xvzf speex-1.0.5.tar.gz
$ cd speex-1.0.5/
$ ./configure --prefix=$DEST/ --with-ogg-libraries=/home/user/icecast2/lib/ --with-ogg-includes=/home/user/icecast2/include
$ make
$ make install
Remplacer user par votre nom d'utilisateur.


Compilation de curl :

$ cd ..
$ tar -xvzf curl_7.15.1.orig.tar.gz
$ cd curl-7.15.1/
$ ./configure --prefix=$DEST/
$ make
$ make install


Compilation de icecast2 :

$ cd ..
$ tar -xvzf icecast-2.3.2.tar.gz
$ cd icecast-2.3.2/
$ CFFLAG="-I$DEST/include/libxml2/" LDFLAGS="-L$DEST/lib/"
$ LD_LIBRARY_PATH=$DEST/lib/:$LD_LIBRARY_PATH
$ ./configure --prefix=$DEST/ --with-xslt-config=$DEST/bin/xslt-config --with-ogg=$DEST/ --with-vorbis=$DEST/ --with-theora=$DEST/ --with-speex=$DEST/ --with-curl=$DEST/
$ make
$ make install
$ mkdir -p var/log/icecast


Pour exécuter le serveur Icecast2 :

$ bin/icecast -b -c etc/icecast.xml
Starting icecast2
Detaching from the console



Fichier de configuration de Icecast2 tel que je l'ai utilisé, ~/icecast2/etc/icecast.xml :

 
Remplacer user par votre nom d'utilisateur et mot_de_passe par le mot de passe que vous utiliserez pour vous connecter, via oggfwd, au serveur.



Diffusion du flux audio/vidéo


Voila, tout est prêt pour diffuser notre flux via un serveur accessible sur le Web.
Après avoir branché la caméra DV, via le IEEE1394, à notre ordinateur local, on va pouvoir exécuter la ligne de commandes suivante depuis une console :

$ dvgrab he2009_ - | ffmpeg2theora -a 3 -v 7 -f dv -x 240 -y 176 -o /dev/stdout - | oggfwd  www.2isa.com 8000 mot_de_passe /h-et-e_2009_live.ogv

Avec cette commande, le flux DV sera enregistré sur le disque dur avec dvgrab - ce qui pourra permettre de faire un montage HQ par la suite - et également passé à ffmpeg2theora qui va encoder ce flux avec les paramètres de qualité audio à 3 et vidéo à 7 et de taille 240x176px, puis ce nouveau flux ogg/theora sera transmis à oggfwd qui se chargera de l'envoyer au serveur Icecast2.

Visionnage en ligne

ITheoa est installé sur un compte Internet afin de permettre l'accès à la vidéo live sans intervention particulière de l'utilisateur.

ITheora permet, entre autre, la lecture de flux continu au format ogg/theora. Il utilise le lecteur local ou java. C'est le lecteur Java qui m'a donné le meilleur résultat.
Il suffit de télécharger l'archive et de la décompresser dans le répertoire de son choix.

Dans mon cas, un répertoire nommé video à la racine du site. Une page d'administration est disponible : http://mon_site.com/video/admin/.
Dans la page qui recevra le lecteur iTheora, le code suivant est inséré :

<object data="http://mon_site.com/video/index.php?v=http://mon_site.com:8000/h-et-e_live.ogv" type="application/xhtml+xml" style="width:280px; height:230px;">
 
<!--[if IE]>
 
<iframe src="http://mon_site.com/video/index.php?v=http://mon_site.com:8000/h-et-e_live.ogv" style="width:280px; height:230px;" allowtransparency="true" frameborder="0" >
 
</iframe>
 
<![endif]-->
<param name="AutoPlay" value="True" />
</object>



Conclusion

Cette configuration a été utilisée avec succès sur 2 journées sans poser de problème. Certe, la station de travail, qui a été utilisée, était relativement puissante et je ne connais pas quelle est la limite de puissance minimum pour faire ce travail d'enregistrement et d'encodage à la volée. Le différé était de 10 secondes (Une des premières directives du fichier de configuration de Icecast2 est paramétrable.) et il n'y a pas eu de saccades ou coupures. De plus, un serveur dédié est nécessaire afin de pouvoir installer le serveur de flux continu Icecast2 et proposer une qualité de service correcte.
Au final, il a été possible d'avoir une chaîne de production entièrement libre pour un résultat de très bonne qualité.

Pour en savoir plus sur Internet