User Tools

Site Tools


installation_d_une_plateforme_de_stream_sur_serveur_sme_9

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
installation_d_une_plateforme_de_stream_sur_serveur_sme_9 [2016/02/22 18:35] romaininstallation_d_une_plateforme_de_stream_sur_serveur_sme_9 [2016/02/23 21:01] (current) romain
Line 1: Line 1:
 +=== Stream ====
 +
 +Après avoir fait quelques tests utilisateurs avec [[https://jitsi.org/Projects/JitsiVideobridge | jitsivideobridge]] nous avons constaté que le stream audio était d'une qualité insuffisante pour l'utilisation que l'on en avait, l'outil n'étant pas fait pour du live. J'ai commencé par vouloir l'installer sur un serveur test pour pouvoir modifier les sources et donc la fréquence d'échantillonage et le taux de compression du signal par défaut.
 +Lors de l'installation j'ai remarqué qu'il y avait beaucoup d'éléments dont nous n'aurions pas besoin pour un client stream Audio(/Video).
 +Un peu too much pour notre utilisation. De plus d'après ce que j'ai lu il n'est pas possible de changer le taux de compression directement comme cela.
 +
 +Je suis donc reparti de la conception initiale en revoyant les besoins:
 +
 +-Une connexion audio-stream point à point ou multicast via le réseau Internet.
 +
 +-Une possibilité de changer certains paramètres du signal audio.
 +
 +-Une Interface web avec connexion à la carte son de la machine.
 +
 +-Possibilté de placer une vidéo, un chat, ...
 +
 +
 +Avec Html5 et [[https://webrtc.org/ | Webrtc]] s'est ouvert la possibilité d'accéder directement aux ressources audio/video de la machine via le navigateur de l'utilisateur.
 +Sur Linux il n'est cependant pas possible d'accéder à Alsa directement mais via un pont entre pulseAudio qui est accessible actuellement on peut router le système son de jack vers un navigateur (Firefox et google-chrome testés).
 +Après quelques recherches j'ai trouvé cette utilisation de webrtc :
 +
 +https://www.webrtc-experiment.com/
 +
 +Développée en html et javascript les nombreuses démos se sont révélées correspondre à notre besoin.
 +
 +Installons les sources sur notre serveur.
 +
 +
 +
 +=== Installation de RTCMultiConnection-v3.0 ====
 +
 +
 +Sur un serveur SME 9 fraichement installé nous allons commencer par installer [[ https://rtcmulticonnection.herokuapp.com/ |RTCMultiConnection-v3.0]].
 +
 +-Nous installons nodejs :
 +
 +Installation des dépots epel :
 +
 +<code>
 +/sbin/e-smith/db yum_repositories set epel repository \
 +Name 'Epel - EL6' \
 +BaseURL 'http://download.fedoraproject.org/pub/epel/6/$basearch' \
 +MirrorList 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch' \
 +EnableGroups no \
 +GPGCheck yes \
 +GPGKey http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL \
 +Exclude perl-Razor-Agent \
 +Visible no \
 +status disabled
 +</code>
 +
 +Update :
 +<code>signal-event yum-modify</code>
 +
 +Puis nodejs :
 +<code>yum --enablerepo=epel install nodejs</code>
 +
 +
 +-Nous téléchargeons les sources rtcMulticonnexion:
 +
 +<code>mkdir RTCMultiConnection-v3.0 && cd RTCMultiConnection-v3.0
 +wget http://dl.webrtc-experiment.com/rtcmulticonnection-v3.tar.gz
 +tar -zxvf rtcmulticonnection-v3.tar.gz
 +ls -a
 +</code>
 +
 +Et on démarre le serveur en fond de tâche sur le port 9001:
 +
 +<code>nohup nodejs server.js > /dev/null 2>&1 &</code>
 +
 +
 +
 +On install le codec opus :
 +<code>
 +
 +  ###    l i b o g g 
 +curl  ftp://downloads.xiph.org/pub/xiph/releases/ogg/libogg-1.3.1.tar.xz    >libogg-1.3.1.tar.xz;
 +xz -d   libogg-1.3.1.tar.xz  ;  
 +tar  -xvf libogg-1.3.1.tar  ;  
 +cd  libogg-1.3.1;
 +./configure  ;
 +make   && make check && make install ;
 +
 +  ###    o p u s
 +wget http://downloads.xiph.org/releases/opus/opus-1.1.2.tar.gz
 +tar -xvf opus-1.1.2.tar.gz ; 
 +cd opus-1.1.2 ; 
 +./configure ;
 +make  &&  make check  &&  make install ;
 +
 +  ###  f l a c
 +curl  http://downloads.xiph.org/releases/flac/flac-1.3.0.tar.xz  >  flac-1.3.0.tar.xz ;
 +xz -d flac-1.3.0.tar.xz ;
 +tar -x  flac-1.3.0.tar ;
 +cd  flac-1.3.0 ;
 +./configure ;
 +make  &&  make check  &&  make install ;
 +
 + ###   o p u s     t o o l s
 +curl  http://downloads.xiph.org/releases/opus/opus-tools-0.1.7.tar.gz  >   opus-tools-0.1.7.tar.gz;
 +gzip -d     opus-tools-0.1.7.tar.gz 
 +tar -xvf    opus-tools-0.1.7.tar  ;
 +cd   opus-tools-0.1.7   ;
 +./configure ;
 +make  && make install ;
 +
 +</code>
 +
 +Une fois installé on l'active comme ceci dans sa page html :
 +<code>
 + connection.processSdp = function(sdp) {
 +        sdp = remove_vp8_codecs(sdp);
 +        sdp = prefer_opus (sdp);
 +        sdp = use_maxaveragebitrate(sdp);
 +        return sdp;
 +        };
 +</code>
 +
 +Et on "force" le bitrate à la valeur que l'on souhaite (ici 192):
 +<code>
 +
 +var BandwidthHandler = connection.BandwidthHandler;
 +connection.bandwidth = {
 +    audio: 128,
 +    video: 256,
 +    screen: 300
 +};
 +connection.processSdp = function(sdp) {
 +    sdp = BandwidthHandler.setApplicationSpecificBandwidth(sdp, connection.bandwidth, !!connection.session.screen);
 +    sdp = BandwidthHandler.setVideoBitrates(sdp, {
 +        min: connection.bandwidth.video,
 +        max: connection.bandwidth.video
 +    });
 +
 +    sdp = BandwidthHandler.setOpusAttributes(sdp);
 +
 +    sdp = BandwidthHandler.setOpusAttributes(sdp, {
 +        'stereo': 1,
 +        //'sprop-stereo': 1,
 +        'maxaveragebitrate': connection.bandwidth.audio * 1000 * 8,
 +        'maxplaybackrate': connection.bandwidth.audio * 1000 * 8,
 +        //'cbr': 1,
 +        //'useinbandfec': 1,
 +        // 'usedtx': 1,
 +        'maxptime': 3
 +    });
 +
 +    return sdp;
 +};
 +</code>
 +
 +
 +=== Utilisation de appRTC ====
 +
 +Une autre utilisation de webrtc est appRTC.
 +
 +On peut trouver une démo ici : 
 +
 +[[https://apprtc.appspot.com/|Demo AppRTC]]
 +
 +Les parametres audio et video sont modifiables via l'url ainsi pour changer le bitrate d'envoie on ajoute :
 +
 +<code>asbr=128</code>
 +
 +"asbr" pour Audio Send Bit Rate donc pour le receveur 
 +
 +"arbr" Audio Receive Bit Rate ....
 +
 +On peut également changer les paramètres video, choisir les codecs ...
 +
 +Ainsi pour un flux audio sans video avec le codec opus à 44100 hz et bitrate à 128 send et receive on à une url de ce type :
 +
 +<code>https://apprtc.appspot.com/?audio=true&asc=opus/44100&arc=opus/44100&asbr=128000&arbr=128000&video=false</code>
 +
 +Ici les références : [[http://gingertech.net/2014/03/19/apprtc-googles-webrtc-test-app-and-its-parameters/|Paramètres]]
 +
 +
 +=== Installation de appRTC sur le serveur ====
 +
 +On se crée un dossier streamserver et appengine dans le repertoire www :
 +<code>
 +sudo su
 +cd /var/www/html
 +mkdir streamserver
 +cd streamserver
 +</code>
 +
 +Vous avez besoin d'installer Google App Engine SDK for Python :
 +
 +<code>
 +mkdir appengine
 +cd appengine
 +wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.32.zip
 +unzip google_appengine_1.9.32.zip
 +export PATH=$PATH:/path/to/google_appengine/</code>
 +Soyez sur d'avoir la version 2.7 de python d'installée :
 +
 +<code>/usr/bin/env python -V</code>
 +
 +Puis le serveur :
 +
 +
 +<code>
 +cd /var/www/html/streamserver/
 +apt-get install nodejs npm git python-webtest nodejs-legacy
 +npm install -g npm
 +npm -g install grunt-cli
 +git clone https://github.com/webrtc/apprtc.git
 +cd apprtc
 +npm install
 +grunt build</code>
 +
 +Pour démarrer le serveur 
 +
 +<code>
 +cd /var/www/html/streamserver/apprtc
 +/var/www/html/streamserver/appengine/google_appengine/dev_appserver.py ./out/app_engine
 +</code>
 +
 +Et on se rend à l'adresse du serveur port 8080 exemple si c'est sur la même machine :
 +
 +[[http://localhost:8080]]
 +