Table des matières
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 logiciel | Fonction |
dvgrab | Capture du flux DV depuis la caméra vidéo |
ffmpeg2theora | Conversion du flux DV en flux ogg theora-vorbis |
oggfwd | Transfert du flux ogg/theora vers un serveur de streaming |
Icecast2 | Serveur de contenu multimédia pour streaming |
iTheora | Lecteur 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
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
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
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
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 :
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é.