Installation d'OpenMCU

Introduction

Un multipoint control unit (MCU) est un logiciel informatique ou une machine servant à établir simultanément plusieurs communications de visio-conférence. Openmcu est une version libre de ce type de logiciel.

OpenMCU repose sur deux bibliothèques : pwlib et openh323.

Le protocole H.323 regroupe un ensemble de protocoles de communication de la voix, de l'image et de données sur IP.

La bibliothèque pwlib (Portable Windows Libaray) fournis des classes qui permette de s'abstraire de l'OS sur lequel tourne le programme.

Récuperation des sources

Les fichiers se trouve sur le [http://openh323.sourceforge.net|site de openh323], dans la section files on a le choix entre plusieurs version. Il faut savoir que la version 2 (2.0 et 2.1) de openmcu ne permet pas de transmettre la vidéo (sic). Pour faire de la visio-conference il faut utiliser la version 1.1.9 qui est la dernière bonne version à ce jour.

Donc il faut les fichiers :

  • openh323-v1_15_0-src-tar.gz
  • openmcu-v1_1_9-src-tar.gz
  • pwlib-v1_8_0-src-tar.gz

Les versions des bibliothèques ne sont pas trop importantes, la compilation a fonctionnée avec ces versions.

Une fois téléchargée, il faut décompresser les archives (par exemple $HOME/h323).

Préparation de la compilation

La [http://www.openh323.org/build.html|documentation de openh323] explique comment compiler les bibliothèques. Il faut déclarer plusieurs choses dans l'environement pour que la compilation fonctionne. Le plus simple est de faire un script shell qui contient les commandes, dans mon cas, j'ai mis toutes les sources dans un répertoire h323.

Fichier path.sh :

PWLIBDIR=$HOME/h323/pwlib
export PWLIBDIR
OPENH323DIR=$HOME/h323/openh323
export OPENH323DIR
LD_LIBRARY_PATH=$PWLIBDIR/lib:$OPENH323DIR/lib
export LD_LIBRARY_PATH

Il n'y a qu'à charger le fichier dans l'environement :

% source path.sh

Compilation

En premier on compile la pwlib :

% cd $PWLIBDIR
% make both

Patienter...

Ensuite on compile openh323 :

% cd $OPENH323DIR
% make opt

Patienter...

Puis on compile openmcu :

% cd openmcu
% make opt

Bidouillage

A partir de maintenant, on a plusieurs possibilités :

  • faire des make install pour les 3 programmes ce qui les installera dans /usr/local/
  • prendre les bibliothèque strictement nécessaire pour que openmcu fonctionne

J'ai fait un mélange des deux...

J'ai archiver tout ce qui avait été copié dans /usr/local pour produire un tar.gz qui se décompresse ou l'on veut et qui est autonome. Je l'ai installé sur une autre machine, mais d'autre bibliothèques manquaient donc je l'ai ai ajoutées.

Le plus propre serait de fabriquer un paquet Debian...

Configuration de OpenMCU

OpenMCU va chercher sa configuration dans un fichier : ~/.pwlib_config/openmcu.ini. L'emplacement de ce fichier ne peut pas être changé (sauf dans les sources). Voici celui que j'utilise, il contient toutes les options possibles (commentée ou pas) :

[Options]

; Nom utilis pour s'enregistrer auprs de la gatekeeper
username=4000

; ?
;no-username

; Nom d'hote ou IP de la gatekeeper
gatekeeper = 193.52.167.35

; Desactive la connexion  une gatekeeper
;no-gatekeeper = true

; Mot de passe pour la gatekeeper
;password = mot de passe

; Quitte si la connexion  la gatekeeper est impossible
;require-gatekeeper = true

; Indique l'IP externe en cas de masquarade d'IP
;translate = 10.10.10.10

; Utiliser l'IP de l'interface rseau  utiliser
;interface = 10.10.10.10

; ?
;no-interface

; Port  utiliser pour les connexions entrante, par defaut 1720
listenport = 1720

; Indique la taille du tampon minimum (facultatif) et maximum pour le jitter en millisecondes
jitter = 50-450

; Positionne le nombre de frames G.711 par defaut 30
;g711frames = 30

; ?
;no-g711frames

; Positionne le nombre de frames GSM par defaut 4
;gsmframes = 4

; ?
;no-gsmframes

; Positionne le nombre de frames iLBC15k2 par defaut 3
;ilbc15frames = 3

; ?
;no-ilbc15frames

; Positionne le nombre de frames iLBC13k3 par defaut 4
;ilbc13frames = 4

; ?
;no-ilbc13frames

; Active le mode debug, on peut l'utlis plusieurs fois  la ligne de commande (-t) pour plus de dtails
;trace = true

; Nom du fichier dans lequel journalis, par defaut c'est stderr
output = /var/log/openmcu.log

; sauvegarde la configuration dans le fichier ~/.pwlib_config/openmcu.ini
;save = true

; Active le support de la video H261
video = true

; ?
;no-video

; Nombre maximum de frames video transmises par seconde 1<10(def)<30
videotxfps = 15

; ?
;no-videotxfps

; Active le controle du bitrate 16 < n < 2048 kbit/s (net bw)
videobitrate = 128

; ?
;no-videobitrate

; Selectionne le nombre bloques en arrire plan qui seront mis  jour par trame 1<=n<=99 (2 def)
videofill = 10

; ?
;no-videofill

; Transforme la taille de la video de normal (176x144)  large (352x288).
videolarge = true

; Selectionne la qualit de la vido qui sera envoye 1(bonne)<=n<=31(mauvais), 9 par defaut
videotxquality = 3

; ?
;no-videotxquality

; Desactive le multiplexage audio et video
;single-stream = true

; Les utilisateurs connects au salon spécifié entendront leur propre voix
;audio-loopback = room101

; Les connexions sans nom de salon joindront ce salon (par defaut : room101)
defaultroom = room101

; Rejette les connexions sans salon spcifi
;no-defaultroom = true

; Desactive le menu en ligne de commande
disable-menu = true

; Affiche le menu d'aide
;help = true


prefer=GSM-06.10
prefer=MS-GSM
prefer=SpeexNarrow-8k
prefer=SpeexNarrow-11k
prefer=SpeexNarrow-15k
prefer=SpeexNarrow-18.2k
prefer=SpeexNarrow-5.95k
prefer=G.726-16k
prefer=G.726-24k
prefer=G.726-32k
disable=LPC-10
disable=G.726-40k
disable=G.711-uLaw-64k
disable=G.711-ALaw-64k

Pour faire tourner le logiciel il faut indiquer ou se trouve les bibliothèques, donc j'ai le script suivant qui permet un démarrage comme un service :

#!/bin/sh -e

MCU_PATH=/usr/share/openmcu
export LD_LIBRARY_PATH=$MCU_PATH/lib
export PID_FILE=/var/run/openmcu.pid
export LOG_FILE=/var/log/openmcu.log

case "$1" in

start)
  echo 'OpenMCU demarre'
  if [ -e $PID_FILE ]; then
    echo "Un autre processus OpenMCU est peut-être en tain de tourner..."
  fi
  if [ ! -e "$HOME/.pwlib_config/openmcu.ini" ]; then
    echo "Aucun fichier de configuration n'a été trouvé"
    echo "Il devrai être ici : $HOME/.pwlib_config/openmcu.ini"
  fi
  $MCU_PATH/bin/openmcu < $LOG_FILE &
  echo $! < $PID_FILE
;;

stop)
  echo 'OpenMCU arrete'
  if [ -e $PID_FILE ]; then
    kill -9 `cat $PID_FILE`
    rm $PID_FILE
  else
    echo "Aucun processus OpenMCU détécté"
  fi
  echo
;;

restart)
  echo 'OpenMCU redemarre'
  sh $PWD/$0 stop
  sh $PWD/$0 start
;;

*)
  echo 'Utilisation : $PWD/$0 {start|stop|restart}'
  exit 1
;;

esac

Le fichier est à placer dans /etc/init.d/openmcu. Ensuite il faut créer un lien symbolique pour que le démon se lance au démarrage de la machine :

% cd /etc/rc2.d
% ln -s ../init.d/openmcu S92openmcu
% cd /etc/rc0.d
% ln -s ../init.d/openmcu K92openmcu

Le fichier de configuration doit être place dans /root/.pwlib_config/openmcu.ini. Ce chemin est fixe à cause de la bibliothèque pwlib. C'est dommage car il faudrait placer le fichier openmcu dans /etc/...