Streaming live MPEG-4 entre Windows et Linux avec GStreamer

Date: 7/12/2010 | Catégories: Gstreamer,Open-source,Planet-libre,Video | Tags: ,,,,,,,

Nous allons dans ce billet aborder un sujet plutôt inhabituel pour ce blog: Windows 🙂 !

Le but étant de récupérer un flux vidéo live (venant par exemple d'une caméra) à partir  d'une machine sous Windaube (Xp, Se7en ou autres trucs dans le genre) vers une autre machine (Linux mais aussi Mac ou Windows). Pour cela, nous allons utiliser le framework open-source GStreamer qui va permettre d’unifier tout ce beau monde.

Avant de commencer

Pour illustrer cet article nous allons faire un streaming live depuis une machine Windows Xp vers une machine GNU/Linux Fedora 14 connecté sur le même réseau LAN.

On commence donc par installer GStreamer sur la machine Windows en récupérant et installant la dernière version à partir du site WinBuilds. Je parts sur le principe ou votre Gstreamer est installé dans le répertoire C:\Program Files\OSSBuild\GStreamer\v0.10.6 (si ce n'est pas le cas, il suffit d'adapter le script .BAT, variable GSTPATH, en conséquence).

Ensuite on installe Gstreamer sur son PC GNU/Linux (procédure ici pour Fedora et là pour Ubuntu).

Ok, on a donc le framework GStreamer installé sur les deux machines que nous allons utilisé pour faire nos tests.

Streaming depuis Windows

On commence par éditer un fichier texte (Notepad est ton ami) que l'on va nommer client.bat contenant:

REM

REM Streaming from WebCam + MPEG4-ISO encoding + RTP + UDP

REM

 

set GSTPATH="C:\Program Files\OSSBuild\GStreamer\v0.10.6"

set CAPS="video/x-raw-yuv,width=(int)640,height=(int)480,framerate=(fraction)10/1"

set STREAMTO="192.168.0.10"

set STREAMPORT=5000

 

%GSTPATH%\bin\gst-launch.exe -tv --gst-plugin-path=%GSTPATH%\lib ^

gstrtpbin name=rtpbin latency=0 buffer-mode=0 ^

autovideosrc ! ffmpegcolorspace ^

! queue ! videoscale method=1 ! videorate ! %CAPS% ^

! timeoverlay ^

! queue ! ffenc_mpeg4 pass=0 bitrate=256000 rc-buffer-aggressivity=99 trellis=0 ^

! tee name="display" ^

! rtpmp4vpay send-config=true ^

! rtpbin.send_rtp_sink_0 ^

rtpbin.send_rtp_src_0 ! udpsink port=%STREAMPORT% host=%STREAMTO% ^

display. ^

! queue ! decodebin ! ffmpegcolorspace ! autovideosink

 

pause

Il faut adapter les deux lignes set à votre configuration sachant que STREAMTO doit être associé à l'adresse IP de votre machine cible (la machine Fedora 14 dans mon cas) et que la résolution de votre Webcam doit être compatible avec les valeur de CAPS.

On exécute ensuite le fichier .bat (une fenêtre CMD va s'ouvrir et afficher les éventuels message d'erreurs).

La ligne de commande qui va s'occuper de l'encodage MPEG-4 est la suivante:

ffenc_mpeg4 pass=0 bitrate=256000 rc-buffer-aggressivity=99 trellis=0

Le paramètre bitrate (256 Kbps) va fixer le débit cible du streaming. Cette valeur est bien sur à adapter selon la résolution et la fréquence (fps) de votre source vidéo.

L'encapsultation dans une trame RTP est faite grâce à la commande:

rtpmp4vpay send-config=true

L'option send-config (=true)  permet à Gstreamer d'envoyer régulièrement sur le réseau (trame RTP) des informations sur les caractéristiques du stream au lieu de les envoyer seulement au début de la session.

Réception du stream depuis GNU/Linux

C'est (un peu) plus simple, on va créer un shell script server.sh:

#!/bin/sh

 

CAPS="application/x-rtp,media=\(string\)video,clock-rate=\(int\)90000,encoding-name=\(string\)MP4V-ES,payload=\(int\)96"

PORT=5000

 

gst-launch -tv gstrtpbin name=rtpbin latency=0 buffer-mode=0 \

udpsrc caps=$CAPS port=$PORT do-timestamp=true \

! rtpbin.recv_rtp_sink_0 \

rtpbin. ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink

Une fois le script édité, il faut le rendre exécutable:

chmod a+x server.sh

Puis executer le script pour recevoir le stream venant du PC Window

./server.sh

Et si on veut ajouter du son ?

Il suffit d'adapter les pipelines ! A tittre d'exemple, vous pouvez consulter les scripts suivants:

J'ai également essayé d'utiliser le codec X.264 (x264enc + x264dec) succés pour l'instant (qualité très mauvaise).

  • Pingback: Tweets that mention Streaming live MPEG-4 entre Windows et Linux avec GStreamer -- Topsy.com()

  • Chaque fois qu’un freetard prononce/écrit « Windaube », « Billou » et autres « Micro$oft »,
    1. un chaton meurt, et
    2. la crédibilité du mouvement libriste en prend un coup.
    Personne n’en mourra, mais à quoi bon continuer ce genre de provocation aussi inutile que simplificateur ? Pas besoin de ce genre d’artifice, simplement présenter les qualités de logiciels libres comme GStreamer aurait suffi.

    À part ça, bon post très détaillé; merci à toi.

    • Le « Winaube » m’est venu comme cela après avoir passer une partie de mon après-midi à installer Win XP sur un PC HP 7800p des plus classique.

      Le matériel n’était pas reconnu, j’ai du chercher et installer les drivers suivants:
      – carte réseau (j’ai du transférer les drivers par clés USB)
      – carte graphique (j’étais en 640×480)
      – carte son (après deux patchs et un driver récupéré sur un sombre site underground)

      Bref je revendique le « daube » sans complexe 🙂

      • Ton énervement de l’après midi ne change rien. Il reste qu’attaquer un mouvement/produit sans raison ni explication apparente n’apporte rien à ton article.
        C’est aussi niais et nuisible que par exemple le FUD propagé par la campagne « Get the facts » du même Microsoft.

        Par ailleurs, pour répondre à ton exemple précis, s’il te plaît dégotte une version de Debian « potato » 2.2 (la version la plus récente de Debian en 2001 à la sortie de Windows XP), et dis nous si ça fonctionne mieux. J’en doute.
        Le support out-of-the-box de matériel sorti après la release d’un OS n’est jamais acquis, et c’est bien normal d’avoir à aller chercher des pilotes qui ne sont pas inclus dans le noyau de l’époque.

        • « Niais et nuisible… », j’adore 🙂

          Manifestement tu ne dois pas utiliser les systèmes de Microsoft tous les jours… Je suis amené à travailler sous Windows XP mais aussi Vista et Seven et je me répète ces systèmes sont de vraies horreurs, ou des daubes dans mon langage du sud !

          PS: L’ordinateur en question était sous Windows XP service pack 3 (datant de mai 2008) et je peux t’assurer que je n’ai pas les même problème avec l’installation d’une Debian 4.0 datant de la même époque…

  • Bonjour,

    Je connais une autre méthode plus simple sous deux environnement linux ubuntu. J’ai une webcam intégré asus.

    Il suffit pour cela d’utiliser le navigateur serveur opéra. De créer une adresse mail et ensuite de capturer le flux pour le mettre sur le serveur opéra.

    Ensuite avec un autre ordinateur distant, il suffit d’avoir l’adresse url pour avoir le flux vidéo.

    • Il y a effectivement bcps de solutions plus simples (notamment l’utilisation de VLC). Le but du billet est plus pédagogique sur l’utilisation de GStreamer en multi plateforme.

      De plus, tu peux faire avec Gstreamer un nombre incalculable de traitement sur la vidéo (voir la liste des plugins disponibles) ainsi qu’une intégration facile dans un développement (via les APIs):

      Liste des plugins Gstreamer: http://gstreamer.freedesktop.org/documentation/plugins.html
      Liste des API: http://gstreamer.freedesktop.org/bindings/

      • Okay nico,

        Je suis plus ou moins un utilisateurs novice de linux. Donc j’utilise les solutions les plus simples.

        Je suis sous ubuntu et utiliser un windows pour moi aussi, bien que je sois pas un pro me donne de l’urticaire avec les virus et les mises à jour très longue.

        Pour ma part, je pense faire une petite formation d’ici peu en informatique et j’espère alors que je saurais utilisé les versions les plus complexes mais pour l’instant c’est pas le cas.

  • Tu reviens sans cesse sur un fait que je ne contredis absolument pas : Windows a des problèmes, c’est un fait (et si, je les relève tous les jours au travail).

    La *seule* chose que je dis c’est que casser du sucre sur Windows « en passant » comme tu le fais est inutile.

    Un post qui compare deux OS et se finit par « Sur les points 1 et 3 et 4, Windows est une daube par rapport à Truc10.10 » est recevable et louable à 101%.
    Un post qui commence par un « Windaube » dans le deuxième paragraphe sorti de nulle part sans but ni raison apparente, par contre, ça s’appelle un troll. Le bon Maester en a fait une excellente description : http://maester.over-blog.com/article-2900464-6.html

    Sur ce je m’arrête là. Merci pour tes posts techniques détaillés en tout cas.

  • Aloui mohamed habib

    Trés interissant artictle,mais Svp je cherche de d’aide a instlallez un logiciel de video conference :L’openmeetings sur windows avec le serveur local :red5 mais j’ai u quelque problemes:
    Le code erreur suivant:503,je vous demande si vous pouvez me donner un tuto ou du l’aide parceque c’est mon Pfe ,
    merci d’avance .