Catégories
Gstreamer Open-source Systeme Video

Maintenir à jour FFMpeg et X.264 sous Ubuntu

Dans la série petits scripts permettant de gagner du temps, je vous présente ffmpeginstall.sh et ffmpegupdate.sh. Ils se basent sur un post du forum Ubuntu qui est régulièrement mis à jour à chaque version d’Ubuntu.

  1. ffmpeginstall.sh permet d’installer les dernières versions de FFMpeg (svn) et du codec X.264 (git) à partir des sources.
  2. ffmpegupdate.sh permet de mettre à jour ces deux logiciels à partir des sources.

Suivi des modifications:

  • 26/04/2010: Scripts version 0.1 (validé sous Ubuntu 9.10 et 10.04)

Récupération des scripts

On commence par récupérer les scripts:

[shell]

mkdir ~/src

cd ~/src

wget http://svn.nicolargo.com/ubuntupostinstall/trunk/ffmpeginstall.sh

wget http://svn.nicolargo.com/ubuntupostinstall/trunk/ffmpegupdate.sh

chmod a+ ffmpeg*.sh

[/shell]

Lancement des scripts

Pour une installation initiale:

[shell]

cd ~src

./ffmpeginstall.sh

[/shell]

Pour une mise à jour:

[shell]

cd ~src

./ffmpegupdate.sh

[/shell]

Le résultat

[shell]

ffmpeg -version
FFmpeg version SVN-r22965, Copyright (c) 2000-2010 the FFmpeg developers
built on Apr 26 2010 16:57:27 with gcc 4.4.3
configuration: –enable-gpl –enable-version3 –enable-nonfree –enable-postproc –enable-pthreads –enable-libfaac –enable-libfaad –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libx264 –enable-libxvid –enable-x11grab

x264 –version
x264 0.94.1564 a927654
built on Apr 26 2010, gcc: 4.4.3

[/shell]

Et si je veux revenir avec les versions systèmes ?

Rien de plus simple, il suffit de saisir la commande suivante:

[shell]

sudo apt-get remove x264 ffmpeg build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libsdl1.2-dev libtheora-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev

[/shell]

Je suis preneur de tout retour/amélioration sur ces scripts…

Catégories
Open-source Video

Compiler la dernière version de X.264 sous Ubuntu

Si vous avez besoin de la toute dernière version de X.264, l’encodeur libre H.264 du groupe de travail VideoLAN, voici une procédure « out-of-the-box ».

On commence par supprimer la version système si celle-ci existe, puis a installer quelques pré-requis:

[shell]
sudo aptitude purge gpac x264 libx264-dev
sudo apt-get install build-essential zlib1g-dev libglut-dev checkinstall
[/shell]

On compile GPAc (qui permet de gérer les fichiers au format .mp4):

[shell]
cd
wget http://superb-east.dl.sourceforge.net/sourceforge/gpac/gpac-0.4.5.tar.gz
wget http://voxel.dl.sourceforge.net/sourceforge/gpac/gpac_extra_libs-0.4.5.tar.gz

tar -zxf gpac-0.4.5.tar.gz
tar -zxf gpac_extra_libs-0.4.5.tar.gz
cd gpac_extra_libs
cp -r * ../gpac/extra_lib
cd ../gpac
chmod +x configure
./configure –disable-opengl –use-js=no –use-ft=no –use-jpeg=no –use-png=no –use-faad=no –use-mad=no –use-xvid=no –use-ffmpeg=no –use-ogg=no –use-vorbis=no –use-theora=no –use-openjpeg=no
make lib
make apps
sudo make install-lib
sudo make install
sudo rm -f /usr/lib/libgpac.so
sudo cp bin/gcc/libgpac.so /usr/lib
[/shell]

Puis on installe la dernière version (GIT) de X.264:

[shell]

cd
git clone git://git.videolan.org/x264.git
cd x264
./configure
make
sudo checkinstall –pkgname=x264 –pkgversion "1:0.svn`date +%Y%m%d`+`git rev-list HEAD -n 1 | head -c 7`" –backup=no –default
[/shell]

On teste pour voir si la version est bonne (release 1523 au moment de l’écriture de ce billet):

[shell]

x264 –help
x264 core:92 r1523 25ca5b0
Syntax: x264 [options] -o outfile infile [widthxheight]

[/shell]

Sources:

Catégories
Gstreamer Open-source Reseau Video

Streaming vidéo SD avec Gstreamer

Nous allons dans ce billet essayer d’optimiser le streaming d’un flux SD sur un réseau local (LAN de 100 Mbps) en utilisant le framework GStreamer.

Environnement des tests

Deux PC Ubuntu connectés sur un même switch (100 Mbps full-duplex).

  • PC serveur: Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz / 2 Go RAM
  • PC client: Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz / 1 Go RAM

GStreamer version 0.10.25.

Vidéo source: Big Buck Bunny 480p

Tests avec le codec X.264

Ligne de commande sur la machine générant le streaming (serveur):

serveur> gst-launch -v \ filesrc location= »../Vidéos/big_buck_bunny_480p_stereo.ogg » \ ! queue ! decodebin \ ! queue ! videoscale method=1 ! video/x-raw-yuv,width=854,height=480 \ ! queue ! videorate ! video/x-raw-yuv,framerate=\(fraction\)24/1 \ ! queue ! x264enc byte-stream=true bitrate=2000 bframes=4 ref=4 me=hex subme=4 weightb=true threads=0 \ ! queue ! rtph264pay \ ! queue ! udpsink port=5000 host=192.168.29.150 sync=false async=false

Ligne de commande sur la machine recevant le streaming (client):

client> gst-launch -v udpsrc caps= »application/x-rtp, media=\(string\)video, clock-rate=\(int\)90000, encoding-name=\(string\)H264, payload=\(int\)96″ port=5000 \
! queue ! rtph264depay \
! queue ! ffdec_h264 ! xvimagesink

Résultat:
Visuel: vidéo saccadé (environ 2 img/sec)
Bande passante mesurée: entre 2 et 3 Mbps
Resource serveur: %CPU=135 / %MEM=5
Resource client: %CPU=10 / %MEM=2

On ajoute un buffer juste avant le depay et le décodage (au niveau du client):

client> gst-launch -v udpsrc caps= »application/x-rtp, media=\(string\)video, clock-rate=\(int\)90000, encoding-name=\(string\)H264, payload=\(int\)96″ port=5000 \
! queue ! gstrtpjitterbuffer latency=3000 \
! queue ! rtph264depay \
! queue ! ffdec_h264 ! xvimagesink

Résultat:
Visuel: vidéo beaucoup plus fluide mais variation de la gigue (accéleration de la video par moment). On a par contre un décalage de 3 secondes, donc inutilisable pour des flux lives.
Bande passante mesurée: entre 2 et 3 Mbps
Resource serveur: %CPU=140 / %MEM=6
Resource client: %CPU=14 / %MEM=2

On modifie ensuite les paramètres d’encodage X.264 (au niveau du serveur):

serveur> gst-launch -v –gst-debug-level=2 \
filesrc location= »../Vidéos/big_buck_bunny_480p_stereo.ogg » \
! queue ! decodebin \
! queue ! videoscale method=1 ! video/x-raw-yuv,width=720,height=480 \
! queue ! videorate ! video/x-raw-yuv,framerate=\(fraction\)24/1 \
! queue ! x264enc vbv-buf-capacity=3000 byte-stream=true bitrate=900 subme=4 ref=2 bframes=1 b-pyramid=true weightb=true \
! queue ! rtph264pay \
! queue ! udpsink port=5000 host=192.168.29.150 sync=false async=false

Résultat:
Visuel: Presque plus de sacade ni de variation de gigue. On a par contre un décalage de 3 secondes, donc inutilisable pour des flux lives.
Bande passante mesurée: entre 2 et 3 Mbps
Resource serveur: %CPU=120 / %MEM=4
Resource client: %CPU=10 / %MEM=2

Catégories
Gstreamer Image Open-source Systeme

GStreamer et le codec X.264

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.