Le blog de Jean David TECHER, un Réunionnais à Avignon

Aller au contenu | Aller au menu | Aller à la recherche


jeudi 12 février 2009

[VLC] Compilation de la version de 0.9.8 pour le support h264/mp4/faac et streaming entre ma Freebox à Montpellier et mon ordinateur à Antibes

Le but est de pouvoir regarger les chaînes proposées sur le multiposte de ma Freebox qui est à Montpellier depuis mon portables à Antibes. L'image suivante illustre mes dires:


configuration pour le streaming

J'ai commencé par recompiler ma version de ffmpeg en shared et installé dans /usr. Pas de race pour mon ancienne version

./configure --enable-gpl --enable-pthreads --enable-libgsm --enable-debug --enable-shared \
--enable-libmp3lame --enable-libfaac --enable-libfaad --enable-swscale --enable-libtheora --enable-libvorbis \
--enable-zlib --enable-bzlib --enable-libx264 --enable-libxvid --enable-libamr-nb --enable-libamr-wb \
--enable-nonfree --prefix=/usr --enable-ffplay --enable-libdc1394 --enable-libnut --enable-libschroedinger \
--enable-libdirac --enable-postproc --enable-x11grab

Puis pour VLC, jai fait

./configure --prefix=/opt/vlc --enable-live555 \
--with-live555-tree=/mnt/ffmpeg-repository/live --enable-faad --enable-x264\
 --disable-fribidi --disable-qt4 --disable-wxwidgets -disable-visual --disable-daap\
 --disable-bonjour --disable-gnutls --disable-skins2 --with-x264-tree=/root/x264-snapshot-20090122-2245

Suite à la correction de mon erreur de compilation précédente, j'ai juste fait

make
make install

Un exemple de streaming entre ma Freebox à Montpellier et mon ordinateur au bureau sera

  1. serveur avec Freebox à Montpellier pour la chaine NRJ Hits:

    /opt/vlc/bin/vlc -I dummy 'rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=620' vlc:quit --loop --sout \
    '#transcode{vcodec=h264,vb=384,acodec=mp4a,ab=32,channels=1,samplerate=48000,width=352,height=288,deinterlace}:standard{mux=asf,dst=:8080,access=http}:sout-transcode-soverlay=0'
  2. au bureau entre midi et deux:

    mplayer http://www.davdgis.fr:[PORT]
  3. où [PORT] est le port pour VLC

Et hop


Réception à Antibes de la chaine par streaming VLC de la FreeBox à mon Montpellier

[VLC 0.9.8.a] Erreur x264.c:1127: erreur: ‘struct <anonymous>’ has no member named ‘i_direct_8x8_inference’

En compilant la 0.9.8.a, j'ai eu cette erreur

x264.c:1127: erreur: ‘struct <anonymous>’ has no member named ‘i_direct_8x8_inference’
make[5]: *** [libx264_plugin_la-x264.lo] Erreur 1
make[5]: quittant le répertoire « /root/vlc-0.9.8a/modules/codec »
make[4]: *** [all-recursive] Erreur 1
make[4]: quittant le répertoire « /root/vlc-0.9.8a/modules/codec »
make[3]: *** [all] Erreur 2
make[3]: quittant le répertoire « /root/vlc-0.9.8a/modules/codec »
make[2]: *** [all-recursive] Erreur 1
make[2]: quittant le répertoire « /root/vlc-0.9.8a/modules »
make[1]: *** [all-recursive] Erreur 1
make[1]: quittant le répertoire « /root/vlc-0.9.8a »
make: *** [all] Erreur 2

Pas de panique....On ouvre le fichier vlc-0.9.8a/modules/codec/x264.c et aux environs de la ligne 1120, il faur remplacer

    var_Get( p_enc, SOUT_CFG_PREFIX "deadzone-intra", &val );
    if( val.i_int >= 0 && val.i_int <= 32 )
        p_sys->param.analyse.i_luma_deadzone[1] = val.i_int;

    var_Get( p_enc, SOUT_CFG_PREFIX "direct-8x8", &val );
    if( val.i_int >= -1 && val.i_int <= 1 )
        p_sys->param.analyse.i_direct_8x8_inference = val.i_int
par
    var_Get( p_enc, SOUT_CFG_PREFIX "deadzone-intra", &val );
    if( val.i_int >= 0 && val.i_int <= 32 )
        p_sys->param.analyse.i_luma_deadzone[1] = val.i_int;
#endif

#if X264_BUILD >= 52 && X264_BUILD < 66 
    var_Get( p_enc, SOUT_CFG_PREFIX "direct-8x8", &val );
    if( val.i_int >= -1 && val.i_int <= 1 )
        p_sys->param.analyse.i_direct_8x8_inference = val.i_int

ou sinon appliqué le patch https://trac.videolan.org/vlc/attachment/ticket/2431/x264.patch

Il semblerait donc d'après http://forum.videolan.org/viewtopic.php?f=13&t=55565 que parfois la version de x264 serait trop récente!