User Tools

Site Tools


installation_d_une_plateforme_de_stream_sur_serveur_sme_9

This is an old revision of the document!


Stream

Après avoir fait quelques tests utilisateurs avec 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 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 RTCMultiConnection-v3.0.

-Nous installons nodejs :

Installation des dépots epel :

/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

Update :

signal-event yum-modify

Puis nodejs :

yum --enablerepo=epel install nodejs

-Nous téléchargeons les sources rtcMulticonnexion:

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

Et on démarre le serveur en fond de tâche sur le port 9001:

nohup nodejs server.js > /dev/null 2>&1 &

On install le codec opus :

  ###    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.tar ; 
cd opus-1.1 ; 
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 ;
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   ;
make  && make install ;

Une fois installé on l'active comme ceci dans sa page html :

	connection.processSdp = function(sdp) {
        sdp = remove_vp8_codecs(sdp);
        sdp = prefer_opus (sdp);
        sdp = use_maxaveragebitrate(sdp);
        return sdp;
        };

Et on “force” le bitrate à la valeur que l'on souhaite (ici 192):

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;
};

Utilisation de appRTC

Une autre utilisation de webrtc est appRTC.

On peut trouver une démo ici :

Demo AppRTC

Les parametres audio et video sont modifiables via l'url ainsi pour changer le bitrate d'envoie on ajoute :

asbr=128

“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 :

https://apprtc.appspot.com/?audio=true&asc=opus/44100&arc=opus/44100&asbr=128000&arbr=128000&video=false

Ici les références : Paramètres

Installation de appRTC sur le serveur

On se crée un dossier streamserver et appengine dans le repertoire www :

sudo su
cd /var/www/html
mkdir streamserver
cd streamserver

Vous avez besoin d'installer Google App Engine SDK for Python :

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/

Soyez sur d'avoir la version 2.7 de python d'installée :

/usr/bin/env python -V

Puis le serveur :

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

Pour démarrer le serveur

cd /var/www/html/streamserver/apprtc
/var/www/html/streamserver/appengine/google_appengine/dev_appserver.py ./out/app_engine

Et on se rend à l'adresse du serveur port 8080 exemple si c'est sur la même machine :

http://localhost:8080

installation_d_une_plateforme_de_stream_sur_serveur_sme_9.1456257016.txt.gz · Last modified: 2016/02/23 20:50 by romain