Capitolo 2
Realizzazione dell'architettura H.323 in ambiente Open-Source Linux.
Panorama sul mondo Open-Source H.323.
Immettendo come parole chiave su un qualunque motore di ricerca i termini H.323 Open Source come risultato si ottengono migliaia di link a siti sparsi un po' per tuto il mondo. In effetti da quando nel 1996 l'ITU ha rilasciato la Raccomandazione H.323 l'esercito di sviluppatori di software libero che affollano la rete hanno subito inteso le sue potenzialità impostando progetti comuni su cui lavorare.
All'inizio del mio lavoro dovendo scegliere una piattaforma su cui relizzare videoconferenza H.323, è apparsa subito vincente la scelta di lavorare con software libero su sistema operativo Linux. Questo perchè sia il software Open-Source sia il sistema operativo Linux sono forniti con libero accesso al loro codice sorgente, il quale può essere liberamente modificato a favore delle proprie esigenze.
Inoltre il libero accesso al codice sorgente permette una comprensione più approfondita dei processi in gioco, altrimenti interpretabili solo tramite guide in linea o manuali di dubbia qualità. Di solito infatti solo chi scrive un programma sa veramente come funziona, e i sorgenti sono quasi sempre ben commentati indicando le funzionalità del programma e, alle volte, anche i suoi limiti.
Prima di analizzare il software utilizzato vediamo i limiti su cui possiamo muoverci prendendo visione delle licenze con cui vengono distribuiti questi codici.
I tipi di licenze sono essenzialmente due: Gnu Public License (GPL), Mozilla Public License (MPL). Entrambe rendono pubblico il codice sorgente dei software. Chiunque può sia utilizzarli sia redistribuirli senza alcuna limitazione, anche a scopo commerciale. Certo è difficile vendere ciò che di per se è gratis, ma si punta all'assistenza, alla manualistica, un pò carente in quest'ambito, e alla costruzione di pacchetti ad hoc. Le due licenze differiscono per quel che riguarda il loro punto di vista sulle modifiche del codice apportate da un utilizzatore. Infatti la GPL obbliga chiunque a rendere pubblica qualunque evoluzione del codice ottenuta., mentre la MPL prevede la possibilità di far rimanere private le proprie modifiche apportate al codice.
2.2 La pila H.323
Sul sito www.openh323.org sono presenti diversi applicativi che coprono l'insieme degli elementi definiti dalla Raccomandazione H.323. Nel sito sono presenti le versioni sia per Linux sia per Windows ed in entrambi i casi sia in versione eseguibile che sotto forma di codice sorgente. Noi abbiamo preferito scaricare i sorgenti e provvedere alla compilazione in modo da controllare più da vicino l'installazione delle applicazioni.
Questo ha permesso di evidenziare la struttura piramidale su cui basano le applicazioni. La compilazione avviene infatti in tre passi:
Compilazione libreria PWLIB.
Compilazione libreria OPENH323.
Compilazione dell'applicazione.
La ragione di questa compilazione in tre passi risiede nel fatto che si è voluto creare una struttura che potesse essere indipendente dal particolare sistema operativo usato. La libreria PWLIB risponde a questo requisito. Su questa base si sono così costruite in maniera univoca le librerie e le classi H.323 necessarie allo sviluppo delle applicazioni.

Fig.
2.1
Le applicazioni da noi usate che si appoggiano su queste librerie sono OpenMcu, Ohphone e OpenH323Gatekeeper. Quest'ultimo non è il Gatekeeper fornito dal sito, denominato infatti OpenGatekeeper, ma un'altro gatekeeper realizzato da Jan Willamowius.
2.3 Il client ohphone
Ohphone è una applicazione a linea di comando che si basa sulle due librerie pwlib e openh323 precedentemente trattate e realizza l'elemento Terminale dell'architettura H.323. Può essere usata sia per restare in ascolto di una chiamata H.323 entrante che per effettuarne una verso un utente H.323.
Sebbene originariamente pensato semplicemente come elemento di test nello sviluppo di elementi H.323, è stato arricchito via via di parecchie funzionalità così da risultare anche un rapido, anche se non intuitivo, client per la comunicazione. La prima versione risale la Dicembre '98 mentre l'ultimo aggiornamento è di Ottobre 2001. Questa sua origine di tester ha lasciato in eredità i molti messaggi di log comodi per un'utilizzo didattico sull'H.323.
Vediamo come usare questa applicazione definendo le funzionalità usate nel corso di questo lavoro:
Sintassi del comando:
ohphone [options] address
Opzioni.
La maggior parte delle opzioni dell'ohphone possono essere espresse sia in forma breve che estesa. Quella estesa e più pesante ma più facile mnemonicamente, ma una volta presa dimestichezza si userà sempre quella breve.La forma breve e preceduta da -, quella estesa da --.
Opzioni generiche:
-a, --auto-answer : risposta automatica alle chiamate entranti.
-d, --autodial host : composizione automatica del numero se la telefonata cade.
-h, --help : visualizza l'help in linea
-l, --listen : viene avviato il programma in modalità di attesa di chiamate entranti.
-v, --verbose : vengono visualizzate informazioni più dettagliate sui processi in corso.
--disable-menu : disabilita il menù interno.
--ringfile filename : setta il suono del telefono per le chiamate entranti.
--save : salva la configurazione corrente.
Opzioni riguardo al gatekeeper:
-g, --gatekeeper host : imposta l'indirizzo del gatekeeper al quale registrarsi.
-G, --gatekeeper-id name : specifica il gatekeeper tramite ID.
-n, --no-gatekeeper : lancia ohphone senza registrazione presso un gatekeeper.
-r, --require-gatekeeper : esci se non trovi un gatekeeper a cui registrarti.
Opzioni riguardo il protocollo.
-i, --interface ipaddr : seleziona l'interfaccia per le connessioni entranti. Di default tutte.
--listenport port : seleziona la porta d'ascolto per le connessioni entranti (default 1720).
--connectionport port : seleziona la porta per le connessioni uscenti (default 1720).
-b, --bandwidth bps : banda limite da usare in bits/s
-f, --fast-disable : disabilita il fast start.
-T, --h245tunneldisable : disabilita il tunneling H.245.
-u, --user name : setta un nome per l'utente.
--tos n : specifica un campo TOS per i pacchetti uscenti.
Opzioni audio:
-e, --silence : disabilita la silence detection.
--recvol n : regola il volume di registrazione.
--playvol n : regola il volume d'ascolto.
Opzioni per la trasmissione video:
--videdevice dev : seleziona il dispositivo video da utilizzare in trasmissione.
--videotransmit : abilita la trasmissione video.
--videolocal : apre una finestra localmente con ciò che stiamo trasmettendo.
--videosize size : dimensione della finestra video. Può essere small (default) o large.
--videoformat type : pal , ntsc, auto (default)
--videoimput num : seleziona l'ingresso di cattura video.
--videotxquality n : seleziona la qualità del video trasmessa (def 9). 1(good)<=n<=31
--videobitrate n : abilita un constante bitrate. 16< 256(def) <2048 kbit/s
Opzioni per la ricezione video :
--videoquality n : seleziona la qualità video ricevuta - 0 <= n <= 31
--videoreceive viddev : seleziona il dispositivo dal quale si riceve.
--videopip : apre una finestrella in basso a destra sul video ricevuto col video locale.
--videotest : per alcuni secondi si vede il video locale e poi si chiude l'applicazione.
Opzioni per la scheda audio:
-s, --sound device : seleziona il dispositivo audio da usare.
--sound-in device : seleziona il dispositivo audio da usare in ingresso.
--sound-out device : seleziona il dispositivo audio da usare in uscita.
--sound-mixer device : seleziona il dispositivo mixer da usare.
--sound-rechan device : seleziona la pista da usare sul mixer.
--sound-recvol n : volume di registrazione per la scheda audio.
--sound-playvol n : volume di ascolto per la scheda audio.
Opzioni di codifica audio:
--g711frames count, --gsmframes count, --g731,--gsm, --g711-ulaw, --g711-alaw,
--g728, --g7321 : seleziono il tipo di codifica preferita.
Opzioni di ricezione video :
--videoreceive viddev : abilita la ricezione video sui seguenti dispositivi
: null distruggi quanti ricevuto.
: ppm crea una sequenza di immagini PPM
: x11 ricerca automatica del rate di codifica ottima in modalità X11.
: x1124 X11 usando colori a 24 bit
: x1116 X11 usando colori a 16 bit
: x118 X11 usando scala di grigi a 8 bit
Opzioni di debug:
-t, --trace : traccia su video tutti imessaggi scambiati.
-o, --output file : i messaggi scambiati li registra su un file specificato
Il file di configurazione per ohphone sta in ~/.pwlib_config/ohphone.ini, quindi se salvo la configurazione con cui avvio ohphone la ritrovo lì. Facciamo qualche esempio:
Se voglio mettermi in attesa di una semplice comunicazione audio basta scrivere:
ohphone -l
Se voglio che sia possibile anche il video sia in ricezione che in trasmissione:
ohphone -l videotransmit videreceive x11
In ebtrambi gli esempi precedenti non viene specificato alcun gatekeeper, quindi all'inizio l'applicazione ne cercherà uno, ma in caso di esito negativo comunque si metterà in attesa.
Per evitare la ricerca del gatekeeper possiamo o specificare l'indirizzo del gatekeeper (-g) o, se non ci interessa averne uno, specificarlo (-n):
ohphone -l -g 151.100.11.28 oppure ohphone -l -n
Questo è un esempio di ciò che si ottiene lanciando il client ohphone:
[ale@localhost ale]$ ohphone -ln
OhPhone Version 1.1.7 by Open H323 Project on Unix Linux (2.4.7-10enterprise-i686)
Local username: ale
TerminateOnHangup is 0
Auto answer is 0
DialAfterHangup is 0
FastStart is 1
H245Tunnelling is 1
SilenceSupression is 1
Jitter buffer: 50 ms
Connect port: 1720
Video receive disabled
Video transmit disabled
Sound output device: "/dev/dsp"
Sound input device: "/dev/dsp"
Recording using mixer channel mic
Record volume is 66
Play volume is 0
G.711 frame size: 30
GSM frame size: 4
Codecs (in preference order):
GSM-06.10{sw} <1>
MS-GSM{sw} <2>
G.711-uLaw-64k{sw} <3>
G.711-ALaw-64k{sw} <4>
LPC-10{sw} <5>
UserInput/hookflash <6>
UserInput/basicString <7>
UserInput/dtmf <8>
Listening interfaces : ALL:1720
Waiting for incoming calls for "ale"
Command ?
Una volta attivata l'applicazione sono possibili una serie di operazioni usufruendo del menù interno:
q , x : esci dall'applicazione.
h : aggancia , chiudi la chiamata.
l : mostra informazioni sul codice della chiamata in corso.
d code address : crea una connessione con uno specifico codice con un utente specificato.
s : da le statistiche sulle chiamate in corso.
{,}: alza,abbassa il volume di registrazione.
[,]: alza , abbassa il volume d'ascolto.
v : mostra il volume attuale.
e: abilita/disabilta silence detection.
I: mostra le ultime 16 chiamate fatte
i : mostra le ultime 16 chiamate ricevute.
Esempi approfonditi verranno mostrati nei test di connessione dei paragrafi seguenti.
2.4 Openmcu - Il gestore do conferenze H:323.
Openmcu è una semplice unità per multiconferenza che realizza l'elemento di rete MCU (Multipoint Control Unit) definito nella Raccomandazione H.323. Questo instaura un processo d'ascolto H.323 e quindi si mette in attesa di connessioni in ingresso. L' openmcu è in grado di gestire più conferenze contemporaneamente, così l'utente al momento dell'instaurazione della chiamata verso l'MCU deve specificare la conferenza alla quale vuole partecipare. Questo avviene tramite l'indicazione di una stanza. L'endpoint chiama l'openmcu tramite l'indirizzo nome_stanza@nome_server invece del semplice indirizzo.
Quest'applicazione si preoccupa di miscelare i flussi audio in un unico flusso che poi redistribuisce a tutti ipartecipanti alla conferenza. Per quel che riguarda il video trasmette un'immagine contenente quattro riquadri corrispondenti agli ultimi quattro che hanno preso la parola.
Andiamo a vedere le funzionalità fornite da questo MCU.
Opzioni:
-u, --username : specifica l'alias da usare per questo endpoint.
-g, --gatekeeper host : specifica un gatekeeper su cui registrarsi.
-n, --no-gatekeeper : non richiede l'uso del gatekeeper.
--require-gatekeeper : si richiede il gatekeeper, se non lo trova l'applicazione termina.
-i, --interface IP : seleziona l'interfaccia IP da usare.
--g711frames count : Setta il numero di frames G.711 da contare per la capacità.
--gsmframes count : Setta il numero di frames GSM da contare per la cacità.
-t, --trace : traccia i messaggi scambiati su schermo.
-o, output : scrivi i messaggi scambiati su file.
--save : salva la configurazione corrente.
-v, --video : abilita il trattamento dei flussi video.
--videolarge : dimensione CIF per la trasmissione video.
--videotxquality n : qualità della trasmissione video 1(goog)<n<31.
--videofill n : setta il numero di blocchi di background aggiornati per frame 1<n<99.
--videotxfps n : seleziona i frames per secondo trasmessi.
--defaultroom name : imposta il nome della stanza di default.
--no-defaultroom : togli la stanza di default.
--disable-menu : disabilita il menù interno.
-h, --help : visualizza l'help in linea.
Il file di configurazione sta in tilde/.pwlib/openmcu.ini,se salvo le opzioni qui viene creato il file di configurazione. Facciamo qualche esempio. Se voglio far partire l'applicazione senza la registrazione ad un gatekeeper scrivo:
openmcu -n
Se voglio la gestione anche del video :
openmcu -n -v
[ale@localhost ale]$ openmcu -nv
OpenMCU Version 1.0.10 by OpenH323 Project on Unix Linux (2.4.7-10enterprise-i686)
Codecs (in preference order):
GSM-06.10{sw} <1>
MS-GSM{sw} <2>
G.711-uLaw-64k{sw} <3>
G.711-ALaw-64k{sw} <4>
LPC-10{sw} <5>
H.261-QCIF <6>
Waiting for incoming calls for "OpenH323 MCU v1.0.10"
Command ?
Partita l'applicazione è possibile anche effettuare una serie di operazioni compresa una chiamata tramite il menù interno dei comandi:
? : visualizza l'help del menù interno.
v : visualizza le connessioni in corso.
x : esci dall'applicazione.
m : invita a una confernza un utente.
S :statistiche sulle chiamate in corso.
z :metti i messaggi nel file di log.
Esempi più approfonditi verranno mostrati più avanti.
2.5 OpenH323Gk - Il Gatekeeper
Come anticipato per il gatekeeper non abbiamo fatto uso dell'applicazione fornita dal sito www.openh323.org , denominata OpenGatekeeper, ma del software sviluppato da Wilamwius reperibile sul suo sito www.willamwius.com .
|
OpenH323Gatekeeper |
OpenGatekeeper |
|
-GPL devi rendere pubblica qualunque modifica -no H.245 routing -opzione alternate gatekeeper -riscrittura dei numeri E.164 -interfaccia TCP per monitorare il GK -applicazione Java GUI |
-MPL puoi tenere private le tue modifiche al programma originario -H.245 routing
|
Fig. 2.2
Come possiamo vedere dalla tabella, oltre a differenze relative al tipo di licenza, le differenze fondamentali sono sul trattamento dei flussi H.245 e sull'aggiunta da parte di Williamus di una funzionalità per il controllo dello stato delle registrazioni all'interno del gatekeeper. Entrambe le caratteristiche risultano più congeniali al tipo di struttura che vogliamo realizzare all'interno dell'università in quanto la gestione aggiuntiva dei flussi H.245 avrebbe appesantito la rete universitaria di traffico esterno anche in assenza di conferenze centrallizzate all'MCU della facoltà. In pratica anche la comunicazione tra due EP esterni alla facoltà avrebbe portato traffico sulla rete di facoltà. Per quanto riguarda l'interfaccia TCP per monitorare il GK, questa ci permette di sfruttare appieno le funzioni di traduzione degli alias.

Fig.
2.3
Tramite questa interfaccia è possibile visualizzare in tempo reale, da una qualunque postazione remota, gli utenti che sono attualmente registrati con i loro alias.
Questa applicazione indica anche se l'utente è al momento impegnato in altra conversazione o meno. Anche se in realtà questa funzionalità va un po' in crisi in caso di chiusura non corretta dei client registrati.
Vediamo come lanciare l'applicazione e quali sono le opzioni possibili.
Nome: gk
Opzioni:
-h : help
-b n : limite della somma della banda disponibile per i clients espressa in n*100bit/sec. Di default è 100000 quindi la capacità vera è 100Mbit .
-r : usa i segnali H.245 instradati dal gatekeeper (routed).
-i ip :il gatekeeper ascolta solo su questo indirizzo IP.
-t : traccia i messaggi scambiati su schermo. Più t metto più informazioni vengono visualizzate.
-o file : scrive i messaggi scambiati su un file .
-l n : TTL per gli utenyi che si registrano.
-c file : specifica il percoreso per il file di configurazione.
-s section : specifica quale sezione usare del file di configurazione.
Se vogliamo che la porta TCP utile per monitorare il gatekeeper sia aperta dobbiamo specificarlo nel file di configurazione :
[Gatekeeper::Main]
Fourtytwo=42
[GkStatus::Auth]
rule=allow
Gnomemeeting e Netmeeting
Sia il sistema operativo Linux che Windows hanno nelle loro distribuzioni dei software basati sulla Raccomandazione H.323 per la videotelefonia. Questi sono Gnomemeeting per Linux, scaricabile gratuitamente dal sito www.gnomemeeting.org , e Netmeeting per le versioni Windows fino alla M.E. mentre Windows X.P. non pare supportarlo.
A parte le differenze grafiche Netmeeting i due client appaiono molto simili sia graficamente che come modalità di utilizzo. L'unica differenza significativa è che Netmeeting non supporta il meccanismo delle stanze all'interno dell' openmcu, per cui ogni volta che ci si mette in contatto con l'openmcu si viene messi nella stanza di default.
Inoltre in Netmeeting sono di difficile localizzazione le opzioni riguardanti l'eventuale registrazione ad un gatekeeper situate in impostazioni->opzioni->avanzate->?????? . Oltre a questo Netmeeting sembra ormai lasciato da parte non essendo reso neanche compatibile con XP mentre Gnomemeeting è in continua e costante evoluzione. Proprio nei mesi in cui ho lavorato a questa tesi è stato aggiornato unendo alla possibilità di videoconferenza anche lavagne elettroniche e chat testuale.
2.7 Test sui Software utilizzati.
Considerando sempre come obiettivo la creazione di un laboratorio per videoconferenza testiamo l'effettiva funzionalità delle applicazioni pianificando un piano di test che seguano le configurazioni possibili descritte nella Raccomandazione H.323.
Chiamata diretta end to end.
Chiamata via Gatekeeper.
Conferenza centralizzata via MCU.
Conferenza con L'MCU registrato presso il Gatekeeper.
Gli host usati per i test sono stati :
genni - genni.ing.uniroma1.it (151.100.11.28) - utente: alec
comel -comel.ing.uniroma1.it ( 151.100.11.48) - utente : h323
pcuau - pcuau.ing.uniroma1.it (151.100.9.26) -utente : alef
pcsandro -pcsandro.ing.uniroma1.it (151.100.11.204) - utente: francesco2
casa - indirizzo IP dinamico - utente: ale
I software OpenSource utilizzati sono abbastanza semplici e no realizzano combinazioni più complesse, comunque regolamentate all'interno della Raccomandazione, come situazioni miste tipo chiamate tra EP registrati e non oppure passaggio tra comunicazione end to end a conferenza.
2.7.1 Chiamata diretta End to End.
Abbiamo effettuato diversi test incrociati tra i vari client di comunicazione:
ohphone -ohphone
ohphone - Gnomemeeting
Netmeeting - Gnomemeeting
Questi test hanno tutti dato esito positivo.Forniamo di seguito la descrizione particolareggiata dei comandi dati per dar luogo ad ogni di connessione:
ohphone(comel) ->ohphone(genni)
[alec@genni alec]$ ohphone -ln --videotransmit --videoreceive x11
OhPhone Version 1.1.7 by Open H323 Project on Unix Linux (2.4.7-10-i686)
Local username: alec
TerminateOnHangup is 0
Auto answer is 0
DialAfterHangup is 0
FastStart is 1
H245Tunnelling is 1
SilenceSupression is 1
Jitter buffer: 50 ms
Connect port: 1720
Set video size to be 0
Video receive using device : x11
Video receive quality hint : -1
Video transmit enabled with local video window disabled
Video transmit size is small
Video capture using input 0
Video capture using format PAL
Video picture in picture of local video disabled
Video transmit quality is -1
Video background fill blocks 2
Video transmit frames per sec 10
Video bitrate 0 bps
Sound output device: "/dev/dsp"
Sound input device: "/dev/dsp"
Recording using mixer channel mic
Record volume is 100
Play volume is 89
G.711 frame size: 30
GSM frame size: 4
Codecs (in preference order):
GSM-06.10{sw} <1>
MS-GSM{sw} <2>
G.711-uLaw-64k{sw} <3>
G.711-ALaw-64k{sw} <4>
LPC-10{sw} <5>
H.261-QCIF <6>
H.261-CIF <7>
UserInput/hookflash <8>
UserInput/basicString <9>
UserInput/dtmf <10>
Listening interfaces : ALL:1720
Waiting for incoming calls for "alec"
Command ?
Come possiamo vedere l'utente alec lancia da genni ohphone in modalità ascolto di chiamate entranti (-l) e senza la richiesta di un gatekeeper (-n). Sono invece specificate le opzioni per la trasmissione e la ricezione video, quest'ultima specificatamente nel formato x11 che determina automaticamente il miglior formato possibile. Anche su comel lanciamo l'applicazione ohphone con analogo comando. Ora entrambi gli host sono in attesa di una chiamata H.323 e allo stesso tempo possono iniziarne una.
Utiliziamo quindi i comandi del menù interno di ohphone e alla richiesta Command? che è apparsa su comel digitiamo :
Command ? c genni.ing.uniroma1.it
Effettuando così una richiesta di connessione da comel verso genni. Su genni appare così visualizzata tale richiesta:
Incoming call from "h323 [151.100.11.48]" at Mon, 06 May 2002 11:17:11 +0200, answer call (Y/n)? y
Started logical channel: sending H.261-QCIF <6>
Call with "h323 [151.100.11.48]" established.
Started logical channel: receiving H.261-QCIF <6>
Accepting call.
Command ?
I canali logici sono stati aperti regolarmente e la trasmissione audio/video è iniziata. Viene aperta sul desktop una finestra su appare l'immagine video trasmessa dall'altro utente. Comel non ha fonti video quindi trasmette una immagine di test , mentre genni che ha una scheda TV trasmette i normali canali televisivi.


Fig
2.4
Per interrompere la chiamata digito h (hang up):
Command ? h
Hanging up call.
Command ? Call with "h323 [151.100.11.48]" completed, duration 6:34
gnomemeeting (genni) -> ohpone (comel)
Per lanciare Gnomemmeting su genni basta cliccare sull'icona dell'applicazione che si trova sotto avvio->ProgrammiGNOME->rete->Gnomemmeting. Mentre come nel caso precedente avviamo ohphone su comel col comando :
ohphone -ln --videotransmit --videoreceive x11
Per instaurare una chiamata da Gnomemeeting basta digitare l'IP o l'alias dell'host da contattare e cliccare sull'icona a forma di spina elettrica:

Fig. 2.5
Comel riceve la richiesta di connessione da alec e la accetta. Nella finestra storia di Gnomemmeting appare l'evoluzione del collegamento fino alla connessione avvenuta o, nel caso ci siano dei problemi, ne fa menzione. In questo caso la connessione e avvenuta correttamente e la finestra contiene le seguenti informazioni:
11:51:12 : Chiamata 1: chiamo comel.ing.uniroma1.it
11:51:18 : Aperura periferica video in corso
11:51:18 :Aperta con successo la periferica video /dev/video0, canale 0
11:51:18 : Avviato nuovo canale logico...
11:51:18 : Invio H.261-QCIF
11:51:18 : Avvio veloce disabilitato
11:51:18 : Tunnel H.245 disabilitato
11:51:18 : Connesso con h323 [151.100.11.48] utilizzando Open H323 Project OhPhone 1.1.7 9:0:61
11:51:19 : Avviato nuovo canale logico...
11:51:19 : Ricezione di H.261-QCIF
11:51:19 : Richiesta all'utente remoto di inviare video con qualità : 75%
11:51:21 : Richiesta ok


Fig
2.6
Anche in questo caso comel manda la sua immagine di test mentre su comel si ape la finestra con l'immagine televisiva. Per chiudere la connessione basta cliccare nuovamente sull'icona della presa elettrica.
Netmeeting (casa)-> Gnomemmeting (genni)
Per lanciare Netmeeting basta cliccare sull'icona corrispondente nel menù d'avvio di qualunque versione di Windows 95-2000. Ho usato come host per la connessione il mio PC domestico con sistema operativo Windows 98, mentre avevo lasciato attivo su genni Gnomemeeting in modalità risposta automatica. La chiamata si è instaurata ed è terminata senza problemi.
2.7.2 Chiamata via Gatekeeper
Diamo vita a quella che la Raccomandazione H.323 chiama una H.323 Zone: una serie di EP che si registrano presso una stesso Gatekeeper potendone utilizzare così le sue funzionalità.
Per prima cosa lanciamo l'applicazione OpenH.323Gk su genni tramite il comando:
[alec@genni alec]$ gk -c /home/alec/librerie/openh323gk/gatekeeper.ini -tt
2002/05/06 12:13:23 1 gk.cxx(203) GK Trace logging started.
OpenH323 gatekeeper with ID 'OpenH323GK' started on 151.100.11.28
Gatekeeper(Willamowius) Version(1.0.0) Ext(pthreads=1) Build(Jan 18 2002, 14:55:04) Sys(Linux i686 2.4.7-10)
2002/05/06 12:13:23 1 gk.cxx(307) GK Gatekeeper with ID 'OpenH323GK' started on 151.100.11.28
2002/05/06 12:13:23 1 gk.cxx(308) GK Gatekeeper(Willamowius) Version(1.0.0) Ext(pthreads=1) Build(Jan 18 2002, 14:55:04) Sys(Linux i686 2.4.7-10)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
2002/05/06 12:13:23 2 gk.cxx(324) GK Using direct signalling
2002/05/06 12:13:23 2 gk.cxx(329) GK Available Bandwidth: 100000
Available BandWidth 100000
2002/05/06 12:13:23 2 gk.cxx(335) GK TimeToLive for Registrations: -1
2002/05/06 12:13:23 1 BroadcastListen.cxx(28) GK Broadcast listener started
2002/05/06 12:13:23 2 RasSrv.cxx(1434) GK Entering connection handling loop
L'opzione -c specifica dove andare a legere il file di configurazione mentre l'opzione -tt visualizza su schermo i messagi RAS tra gatekeeper e client.
A questo punto il Gatekeeper è pronto ad ammettere registraioni presso di se. Possiamo controllare lo stato delle registrazioni tramite l'applicazione java GkGui associata e che può essere visualizzata da chiunque in tempo reale all'indirizzo internet :
http://genni.ing.uniroma1.it/~alec/gkgui/pag4.html
In questo momento nessuno è connesso

Fig
2.7
Incominciamo registrando comel. Il comando che daremo ora dovrà pervedere l'utilizzo del Gatekeeper:
[h323@comel h323]$ ohphone -lfg genni.ing.uniroma1.it --videoreceive x11 --videotransmit
.........................
Listening interfaces : ALL:1720
Gatekeeper set: OpenH323GK@genni.ing.uniroma1.it
Waiting for incoming calls for "h323"
Command ?
La schermta è identica aquella precedente tranne per la conferma dell'avvenuta registrazione al Gatekeeper.
Vediamo che messaggi si sono scambiati il Gatekeeper e ohphone per arrivare alla registrazione:
2002/05/06 12:17:53 2 GkStatus.cxx(287) GK GkStatus new status client: addr 151.100.11.28
2002/05/06 12:17:53 2 GkStatus.cxx(314) GK GkStatus got command PrintAllRegistrations
2002/05/06 12:17:53 2 GkStatus.cxx(314) GK GkStatus got command PrintCurrentCalls
2002/05/06 12:28:24 2 RasSrv.cxx(1465) GK Read from : 151.100.11.48 [1025]
2002/05/06 12:28:24 1 RasSrv.cxx(1479) GK GRQ Received
2002/05/06 12:28:24 2 RasSrv.cxx(335) GCF|151.100.11.48|h323:h323_ID|terminal;
2002/05/06 12:28:24 2 RasSrv.cxx(1420) GK Send to 151.100.11.48 [1025] : gatekeeperConfirm
2002/05/06 12:28:24 2 RasSrv.cxx(1465) GK Read from : 192.168.10.2 [1026]
2002/05/06 12:28:24 1 RasSrv.cxx(1479) GK GRQ Received
2002/05/06 12:28:24 2 RasSrv.cxx(335) GCF|192.168.10.2|h323:h323_ID|terminal;
2002/05/06 12:28:24 2 RasSrv.cxx(1420) GK Send to 192.168.10.2 [1026] : gatekeeperConfirm
2002/05/06 12:28:24 2 RasSrv.cxx(1465) GK Read from : 151.100.11.48 [1025]
2002/05/06 12:28:24 1 RasSrv.cxx(1484) GK RRQ Received
2002/05/06 12:28:25 1 RasTbl.cxx(137) New EP|151.100.11.48:1720|h323:h323_ID|terminal|9691_endp
2002/05/06 12:28:25 2 RasSrv.cxx(717) RCF|151.100.11.48|h323:h323_ID|terminal|9691_endp;
2002/05/06 12:28:25 2 RasSrv.cxx(1420) GK Send to 151.100.11.48 [1025] : registrationConfirm
Possiamo facilmente individuare i messaggi di GRQ/GCF ,per la ricerca del gatekeeper, e queli RRQ/RCF per l'effettiva registrazione.
Registriamo anche genni tramite Gnomemmeting, specificando il gatekeeper su cui registrarsi nell'opzione apposita posta in impostazioni->Generale->impostazione Directoty.
La registrazione avvenuta è messa in evidenza anche da Gkgui (Fig.?).

Fig.
2.8
Tramite GkGui possiamo vedere chi è registrato in questo momento e conoscere il suo alias .
Attualmente sono presenti i due utenti H323 e Alec. Per effettuare la chiamata è sufficiente specificare l'alias. Quindi da ohphone ad esempio da comel basta digitare:
c alec
h323 is calling host alec
Command ? Started logical channel: sending GSM-06.10{sw} <1>
Started logical channel: sending H.261-QCIF <6>
Call with "Alec [151.100.11.28]" established.
Started logical channel: receiving H.261-QCIF <6>
Si sono aperti i canali logici ed è iniziata la trasmissione. La richiesta di conessione ha generato lo scambio dei messaggi RAS e H.225 per l'instaurazione della chiamata , come possiamo vedere dalla finestra del gatekeeper:
2002/05/06 13:02:40 1 RasSrv.cxx(1494) GK ARQ Received
2002/05/06 13:02:40 2 RasSrv.cxx(803) GK OnARQ
2002/05/06 13:02:40 2 RasTbl.cxx(87) GK Total sessions : 1 Available BandWidth 100000
2002/05/06 13:02:40 2 RasSrv.cxx(1069) ACF|151.100.11.48:1720|9691_endp|24645|alec:h323_ID|h323:h323_ID;
2002/05/06 13:02:40 2 RasSrv.cxx(1420) GK Send to 151.100.11.48 [1025] : admissionConfirm
2002/05/06 13:02:40 2 RasSrv.cxx(1465) GK Read from : 151.100.11.28 [32994]
2002/05/06 13:02:40 1 RasSrv.cxx(1494) GK ARQ Received
2002/05/06 13:02:40 2 RasSrv.cxx(803) GK OnARQ
2002/05/06 13:02:40 2 RasTbl.cxx(87) GK Total sessions : 1 Available BandWidth 100000
2002/05/06 13:02:40 2 RasSrv.cxx(1069) ACF|151.100.11.28:1720|9693_endp|24645|Alec :h323_ID|h323 [151.100.11.48]:h323_ID;
2002/05/06 13:02:40 2 RasSrv.cxx(1420) GK Send to 151.100.11.28 [32994] : admissionConfirm
Chiudiamo la connessione da genni tramite Gnomemeeting e sempre dalla finestra del gatekeeper:
2002/05/06 13:10:51 2 RasSrv.cxx(1465) GK Read from : 151.100.11.28 [32994]
2002/05/06 13:10:51 1 RasSrv.cxx(1504) GK DRQ Received
2002/05/06 13:10:51 2 RasSrv.cxx(1167) DCF|151.100.11.28|9693_endp|24645|normalDrop;
2002/05/06 13:10:51 2 RasSrv.cxx(1420) GK Send to 151.100.11.28 [32994] : disengageConfirm
2002/05/06 13:10:51 2 RasSrv.cxx(1465) GK Read from : 151.100.11.48 [1025]
2002/05/06 13:10:51 1 RasSrv.cxx(1504) GK DRQ Received
2002/05/06 13:10:51 2 RasTbl.cxx(101) GK Total sessions : 0 Available BandWidth 100000
2002/05/06 13:10:51 2 RasSrv.cxx(1167) DCF|151.100.11.48|9691_endp|24645|normalDrop;
2002/05/06 13:10:51 2 RasSrv.cxx(1420) GK Send to 151.100.11.48 [1025] : disengageConfirm
Avviene lo scambio del messaggio DRQ/DCF per la chiusura della chiamata.
2.7.3 Conferenza centralizzata tramite MCU non registrato presso un Gatekeeper.
L'applicazione OpenMcu costituisce il fulcro delle conferenze così come specificato dalla Raccomandazione. Può essere come un endpoind che ha però la capacità di processare e mixare i flusi entranti, per poi redistribuirli ai partecipanti alla conferenza.
Nel nostro caso avviamo l'OpenMcu senza registrazione al gatekeeper (-n) e con l'opzione che abilita la gestione video(-v):
[alec@genni alec]$ openmcu -nv -t
OpenMCU Version 1.0.10 by OpenH323 Project on Unix Linux (2.4.7-10-i686)
Codecs (in preference order):
GSM-06.10{sw} <1>
MS-GSM{sw} <2>
G.711-uLaw-64k{sw} <3>
G.711-ALaw-64k{sw} <4>
LPC-10{sw} <5>
H.261-QCIF <6>
Waiting for incoming calls for "OpenH323 MCU v1.0.10"
Command ?
L'MCU è ora in attesa di connessioni, ma è anche in grado di iniziare lui stesso una chiamata tramite il comando del menù interno m(make call).
Poniamo invece che sia comel, su cui è stato lanciato ohphone senza registrazione al gatekeeper, a desiderare la connessione. Per chiamare l'OpenMcu si specifica la stanza su cui si voule essere inseriti e l'host su cui è presente l'MCU:
[h323@comel h323]$ ohphone -ln --videoreceive x11 --videotransmit
.........................
Listening interfaces : ALL:1720
Waiting for incoming calls for "h323"
Command ? c cinema@genni.ing.uniroma1.it
h323 is calling host cinema@genni.ing.uniroma1.it
Command ? Started logical channel: sending GSM-06.10{sw} <1>
Started logical channel: sending H.261-QCIF <6>
Call with "OpenH323 MCU v1.0.10 [151.100.11.28]" established.
Started logical channel: receiving GSM-06.10{sw} <1>
Started logical channel: receiving H.261-QCIF <6>
L'utente h323 ora è segnato presso la stanza cinema . Lanciamo ora da genni stesso l'ohphone con l'accoretezza di specificare una diversa porta d'ascolto (di default 1720) che ora è impegnata dall'openmcu:
[alec@genni alec]$ ohphone -lfn --videotransmit --videoreceive x11 --listenport 1721
quindi facendo connettere anche l'utente alec sulla stanza cinema i due utenti h323 e alec si scambiano i loro flussi audio e video. L'audio viene semplicemente mixato mentre, per quanto riguarda il video, l'openmcu provvede a trasmettere quattro sottofinestre. Quando il numero dei partecipanti è maggiore di quattro venfono visualizzati gli ultimi quattro che hanno preso parola. In questo caso il risultato è il seguente:

Fig.
2.9
Il menù interno di openmcu permette tramite il comando s di vedere lo stato dell'occupazione attuale delle stanze:
Statistics for 2 connected parties in room 1 of 1 with room id cinema
Connected to : alec [151.100.11.28] for 0:31 mins
: 378/49896 audio packets/bytes sent (H323_GSM0610Codec)
: 0/0 audio packets/bytes received (H323_GSM0610Codec)
: Sending video with H323_H261Codec
: Receiving video with H323_H261Codec
Connected to : h323 [151.100.11.48] for 0:11 mins
: 144/19008 audio packets/bytes sent (H323_GSM0610Codec)
: 143/18876 audio packets/bytes received (H323_GSM0610Codec)
: Sending video with H323_H261Codec
: Receiving video with H323_H261Codec
Command ?
Le statistiche ci informano anche sul numero dei pacchetti e bytes spediti e ricevuti e sul tipo di codifica usata.
In un test è stata portata fino a cinque la partecipazione degli utenti alla conferenza con l'aggiunta degli host smile, pcsandro e pcuau. Si è tentato poi di aprire più conferenze contemporaneamente. Ciò non ha dato buoni risultati in quanto, anche se dalle statistiche gli utenti risultavano registrati su stanze diverse, ricevevavno a tutti gli effetti gli stessi flussi.
In più considerando che Netmeeting non può specificare la stanza si è deciso di operare le successive prove comunque su stanza singola o di default.
2.7.4 Conferenza con l'MCU registrato presso il Gatekeeper.
Questa configurazione è l'unica ad avere dato diversi problemi. Le applicazioni che fanno riferimento al sito www.openh323.org cooperano sempre bene fra loro , mentre entrano in crisi con Gnomemeeting e Netmeeting. Il problema sembra essere la deteminazione dell'alias dell'mcu. Se infatti l'OpenMcu si registra presso il Gatekeeper lo fa con un'alias che è dato dal nome del programma seguito dalla versione: MCU v1.0.10.
Se ora lanciamo qualunque client e tentiamo di segnarci presso l'MCU non possiamo mettere come indirizzo un nome che comprende spazi bianchi perchè al primo spazio bianco ritiene finito l'indirizzo. Usiamo quindi l'opzione -u di openmcu per specificare un alias di registrazione presso ilGatekeeper: openmcu -v -g genni.ing.uniroma1.it -u mcu.
In questo modo l'MCU si registra con l'alias mcu .
Fatto questo è possibile usando ohphone, specificando mcu come utente da chiamare , iniziare una sessione con l'MCU. Il problema è che non si pùo specificare la stanza . L'openmcu in questo caso si comporta in maniera strana prendendo come nome della stanza a cui ci si vuole registrare mcu. Questa illogicità non può essere seguita da programmi al di fuori del progetto di riferimento del sito www.openh323.org che quindi non riescono in alcun modo a mettersi in comunicazione com l'MCU quando questo e registrato presso il Gatekeeper.
Visto che le applicazioni di più largo uso sono proprio Netmeeting e Gnomemeeting sui ripettivi sistemi operativi, ho deciso quindi di non registrare l'openmcu presso il gatekeeper.
Comunque terrò in piedi il Gatekeeper e l'OpenMcu contemporaneamente su genni, cosa che, ho testato, non crea conflitti tra le due applicazioni. Dando così la possibilità di prendere parte sia a conferenze specificando come indirizzo semplicemente genni.ing.uniroma1.it e sia di crare connessioni end to end sfruttando le funzionalità di traduzione degli indirizzi e l'applicazione GkGui per vedere in tempo reale se c'è qualcuno registrato con cui parlare.

Fig.
2.1
2.8 Problemi nella gestione delle risorse di rete.
Mettendo a disposizione di chiunque in rete dei servizi come l'MCU e il Gatekeeper si pone il problema del controllo delle risorse di rete della LAN di facoltà assorbite da tali servizi.
Il problema non si pone nel caso in cui la conessione riguardi due utenti esterni a tale LAN in quanto in quel caso transitano sulla rete di facoltà solo i messaggi RAS e H.225 di instaurazione della chiamata, mentre i flussi audio e video vengono spediti direttamente tra i due enpoint. Situazioni critiche sono invece i casi di videoconferenza o la videotelefonia tra un utente interno ed uno esterno. Nel caso di videoconferenza potrebbe verificarsi il caso in cui più utenti esterni alla facoltà utilizzino l'MCU per scopi privati.
Cercando di quantificare l'assorbimento di risorse di rete in architettura di videoconferenza centralizzata intorno all'MCU possiamo dire che per ogni partecipante l'openmcu spedisce un flusso dati di 200Kbs. Questo comporta che basta estendere la conferenza a 4-5 persone per arrivare ad un'occupazione di circa 1Mbps, e considerando che la banda atuuale ha una larhezza di 4Mbps questo comporetrebbe in sensibile deterioramento dei servizi di rete per la facoltà.
Tra i vari segnali scambiati durante l'instaurazione della chiamata ci sono campi relativi alla contrattazione della banda. Come primo tentativo quindi abbiamo tentato di settare i limiti di occupazione di banda tramite le opzioni del Gatekeeper di modo che la banda totale non superasse una soglia stabilita. Purtroppo sebbene lo scambio tra gatekeeper e enpoint avvenisse senza problemi in effetti poi la comunicazione avveniva senza il rispetto di tali limiti. Inoltre il Gatekeeper effettuando solo la fase di instaurazione e non trattando i flussi audio/video non può in alcun modo verificare il rispetto o meno dei parametri contrattati durante la fase di instaturazione.
Vista quindi l'impossibolità di limitare il traffico tramite i software H.323 utilizzati, abbiamo attinto a quanto messo a disposizione dal sistema operativo Linux per il Networking che sarà infatti l'argomento del prossimo capitolo.