televisione digitale soluzione di streaming per internet a banda larga

Transcript

televisione digitale soluzione di streaming per internet a banda larga
UNIVERSITÀ DI UDINE
FACOLTÀ DI SCIENZE MATEMATICHE FISICHE NATURALI
CORSO DI LAUREA IN INFORMATICA
Anno Accademico 2004-2005
TESI DI LAUREA
SPERIMENTALE
TELEVISIONE DIGITALE
SOLUZIONE DI STREAMING PER INTERNET
A BANDA LARGA
Laureando:
Relatore:
Federico Severin
Ch.mo Dott. Claudio Mirolo
2
INDICE
CAPITOLO 1
: Introduzione
4
CAPITOLO 2
: Streaming
5
CAPITOLO 3
: Progetto
8
3.1
: Requisiti
8
3.2
: Analisi
9
3.3
: Organizzazione generale
13
CAPITOLO 4
: Strumenti
14
CAPITOLO 5
: Caratteristiche tecniche
16
5.1
: Dettagli tecnici di Helix Universal Server 9
16
5.2
: Dettagli tecnici di Helix Producer Basic 9
23
: Realizzazione
31
6.1
: Prima prova su PC
31
6.2
: Installazione su PC appositi
32
6.3
: Soluzione problemi con il server
32
6.4
: Applicazione IP pubblico al server
34
6.5
: Creazione dei client personalizzati
38
6.5.1
: Client per un futuro cliente
38
6.5.2
: Client per Asco Tlc
42
: Comunicazione tra Helix Producer Basic 9 ed Helix Universal
47
CAPITOLO 6
CAPITOLO 7
Server Basic 9
CAPITOLO 8
: Comunicazione tra Real Player 9 ed Helix Universal Server Basic 9 53
CAPITOLO 9
: Test, risultati, confronti
63
9.1
: Test in locale
63
9.2
: Test con cliente
63
9.3
: Test con ADSL privata
64
9.4
: Dimostrazione con un potenziale cliente
64
9.5
: Conclusioni sull’esito dei test
65
CONCLUSIONI
66
GLOSSARIO
67
BIBLIOGRAFIA
69
3
CAPITOLO 1
INTRODUZIONE
Il concetto di streaming è poco conosciuto al giorno d’oggi, nonostante venga impiegato sempre
più spesso e per scopi sempre più vari. È una tecnologia innovativa che è destinata a far parte
della nostra vita quotidiana in misura sempre maggiore, grazie anche all’enorme diffusione di
internet ed al continuo incremento della sua velocità. L’esperienza del tirocinio mi ha dato
l’occasione di studiare questa tecnologia, apprenderne il funzionamento, apprezzarne le qualità e
scoprirne i difetti. Questa tesi non è semplicemente il resoconto di un’esperienza didatticolavorativa: ho cercato di approfondire il più possibile gli argomenti trattati, arrivando a volte a
descrivere e spiegare le caratteristiche tecniche di mezzi e strumenti di cui mi sono avvalso.
Comincio con un capitolo in cui definisco lo streaming, la struttura del processo con cui si
trasmette un file multimediale nella rete in broadcasting, i vantaggi e gli svantaggi nell’uso di
tale tecnologia.
Nel capitolo 3 ho sviluppato una descrizione dell’organizzazione dei lavori condotta analizzando
i requisiti dell’azienda. Nel capitolo 4 ho elencato e descritto brevemente gli strumenti che mi
hanno permesso di risolvere i problemi, semplificato lo sviluppo e consentito di svolgere
accurate analisi. Il capitolo 5 è dedicato ad una descrizione tecnica dei due elementi principali di
questo lavoro: Helix Universal Server ed Helix Producer Basic.
Nel sesto capitolo racconto ed analizzo l’esperienza maturata in azienda, dalle prime prove del
server di streaming alla sua raffinazione, alla creazione delle tv embedded per vedere sia video
on-demand che live.
Il settimo ed ottavo capitolo riportano un’analisi dettagliata ed approfondita dei protocolli di
comunicazione server-client e server-producer. Numerosi screenshot arricchiscono questo
approfondimento, che è stato di essenziale importanza per capire il funzionamento delle
architetture in gioco e risolverne i problemi.
Infine, nel capitolo 9, ho inserito alcuni semplici test eseguiti per determinare le prestazioni del
sistema di streaming.
4
CAPITOLO 2
STREAMING
Cosa si intende per streaming? Lo streaming è una tecnologia che permette di distribuire dati,
audio, video e multimedia sulla rete, live o on-demand, senza il bisogno di scaricare file sul
proprio computer. La distribuzione di multimedia in streaming consiste nella trasmissione
simultanea di media digitali (quali video, voce, dati) in modo tale che siano ricevuti come un
flusso continuo in tempo reale. Lo stream di dati viene trasmesso da un server ed è ricevuto da
un client che lo riproduce in tempo reale. Le applicazioni client possono cominciare a riprodurre
il multimedia appena hanno ricevuto abbastanza dati da riempire il buffer (operazione detta di
“preroll”) in modo da poter garantire la continuità del servizio in caso di perdita di dati.
I protocolli coinvolti nello streaming sono principalmente l’RTP e l’RTSP (vedi Glossario).
I passi principali in un processo che ha come scopo la trasmissione di un file multimediale in
streaming nel web sono i seguenti:
CATTURA AUDIO/VIDEO ED
ACQUISIZIONE DEL SEGNALE
CODIFICA DEL CONTENUTO
CONSEGNA/DISTRIBUZIONE
INTEGRAZIONE IN INTERFACCE
WEB
Figura 2.1
Cattura audio/video ed acquisizione del segnale: la prima cosa da fare è procurarsi il materiale
da trasmettere. È dunque necessario catturare e registrare, tramite opportuni dispositivi (quali
webcam, microfoni o schede di acquisizione audio/video), la clip desiderata. I dati catturati dai
5
dispositivi hardware devono essere trasmessi alla locazione in cui verranno codificati. La
trasmissione può avvenire tramite satellite per esempio, o tramite un ponte telefonico. Varia a
seconda del tipo di media e dei mezzi a disposizione.
Codifica del contenuto: i dati acquisiti vengono convertiti da analogico a digitale e codificati nel
formato più appropriato per poter essere poi distribuiti sulla rete. Nel nostro caso verrà usata la
tecnica denominata Sure Streaming, con cui diversi flussi vengono codificati con tassi di
trasferimento diversi e combinati in un singolo file.
Consegna/distribuzione: è la fase in cui i dati codificati vengono inviati al server adibito alla loro
distribuzione. Come si vedrà, i server odierni danno la possibilità di ricevere stream previa
autenticazione, per ovvie ragioni legate alla sicurezza. Anche per visualizzare il contenuto in
streaming può essere richiesta l’autenticazione. La distribuzione del contenuto ai client può
avvenire in due modalità: unicast e multicast. Verranno entrambe descritte nel capitolo 5,
paragrafo 1.
Integrazione in interfacce web: la distribuzione nel web di contenuti multimediali può essere
operata inserendo in pagine web collegamenti che aprono automaticamente un lettore
multimediale che riproduce il filmato. Alternativamente si può inserire direttamente in una
pagina web uno schermo virtuale che riproduce il filmato e, qualora si voglia, dei controlli per
consentire l’interattività dell’utente.
Questa tecnologia innovativa rende le comunicazioni più efficaci premettendo, per esempio, di
effettuare videoconferenze o la telefonia over IP. Strumenti molto utili nelle aziende odierne che,
per svilupparsi ed essere competitive, necessitano di comunicazioni sempre più frequenti, rapide
e ricche di informazioni. Sta prendendo piede, in ambito commerciale, anche in servizi rivolti
verso utenti privati. Basti pensare alla martellante pubblicità in tv che reclama la possibilità di
guardare le partite o le gare automobilistiche in streaming via internet. Possono altresì essere
trasmessi in streaming anche alcuni video o trailer cinematografici o spezzoni di canzoni, o
anche canzoni intere; infatti, non venendo memorizzato alcun dato sull’hard disk, è possibile
avere un’anteprima o assaporare per intero il lavoro di un artista distribuito da un sito
autorizzato, pur senza violare le normative concernenti il diritto d’autore. Nello stesso tempo si
evita di occupare grosse quantità di spazio sul disco del navigatore web.
6
Quanto a svantaggi, il più importante sembra essere il costo. Se si vuole adottare un server di
streaming potente ed efficiente bisogna spendere qualche migliaio di euro, per non parlare della
necessità di un computer dedicato molto potente e una connessione a banda larga.
7
CAPITOLO 3
PROGETTO
Vado ora ad esporre il progetto vero e proprio. Verrà effettuata un’analisi dei requisiti basata
sulle esigenze dell’azienda. Tali requisiti verranno poi analizzati e, in base a questi, sarà condotta
un’indagine sui prodotti disponibili sul mercato e operata una scelta basata sui criteri dettati dai
requisiti.
3.1: REQUISITI
L’azienda aveva la necessità di un server che fosse in grado di trasmettere file multimediali. Un
obiettivo era quello di poter vedere via web presentazioni, conferenze, convegni o simili
organizzati dalla ditta; ma target forse più affascinante era quello di riuscire a creare un sistema
che permettesse la trasmissione di immagini e/o suoni in un broadcast live. Tale sistema,
permettendo di vedere real-time immagini e audio, sarebbe poi stato la base per lo sviluppo di un
sistema di video-conferenza. Un sistema facilmente personalizzabile, grazie alla potenza della
combinazione dei linguaggi HTML e SMIL: pagine web con il logo della società e un player
embedded che supporta persino la visualizzazione di più videate contemporaneamente, nonché
una chat per permettere la comunicazione istantanea di tutti i partecipanti all’evento.
Per raggiungere tali obiettivi erano necessari:
•
Un pc linux su cui far girare il server.
•
Una distribuzione di linux.
•
Un server per lo streaming.
•
Un pc dal quale catturare le immagini live ed inviarle al server a seguito della codifica.
•
Una webcam per catturare i filmati.
•
Un software di codifica delle immagini.
•
Collegamento dei due computer alla rete locale.
•
Collegamento dei computer alla rete Internet.
•
Un player multimediale per la parte client dello streaming.
8
3.2: ANALISI
Viene ora il momento dell’analisi dei requisiti e delle alternative che il mercato propone per
soddisfarle. Una fase molto importante durante la quale si scelgono gli strumenti che ci
condizioneranno durante la progettazione e ci supporteranno durante lo sviluppo.
Mi sono stati messi a disposizione due pc Dell Optiplex, 2.8 GHz, 1GB di ram.
In uno ho installato Windows XP Service Pack 2, fornito dalla Dell insieme alla macchina.
Nel secondo pc, quello dedicato al server, come sistema operativo si è deciso di usare Linux per
la sua comprovata stabilità e la sua sicurezza. Il problema si poneva riguardo quale distribuzione
scegliere. Su consiglio del mio tutor aziendale, ho scelto di usare QiLinux 1.2 (kernel 2.6.11.8),
una distribuzione di recente comparsa e basata su Debian, gratuita e scaricabile dal web.
Per la cattura di suoni e immagini mi è stata messa a disposizione una webcam USB Logitech
QuickCam Pro 4000.
I due computer sono stati connessi entrambi alla rete aziendale. Accedevano ad internet tramite il
router dislocato nella server farm.
La scelta di server, client e producer (il programma per la codifica) è stata invece più complessa.
Serviva un prodotto che fosse in grado di supportare più stream contemporaneamente e più client
contemporaneamente, oltre che gli stream live. Le soluzioni presenti sul mercato sono
innumerevoli, ma molte sono a pagamento e a prezzi che si aggirano intorno ai 5000 euro per i
prodotti più raffinati. L’azienda invece, non necessitando di strumenti particolarmente sofisticati
né potenti, si poteva accontentare del servizio che è in grado di fornire un software gratuito ed
open source. Il campo della ricerca si restringeva così a pochi prodotti gratuiti ma di buona
qualità, sviluppati da alcune tra le case più conosciute nel mondo dell’informatica. Avevo
individuato fondamentalmente tre candidati.
Il primo era Helix Universal Server Basic, sviluppato dalla RealNetworks.
Il secondo candidato era Helix DNA Server, sviluppato da Helix Community in collaborazione
con RealNetworks.
Infine Darwin Streaming Server, versione gratuita di Apple Quick Time Streaming Server.
Ho cercato a lungo informazioni su questi programmi. Riguardo Darwin Streaming Server non
ho trovato molte informazioni, mentre su Helix Universal Server ho trovato molta
documentazione on-line. In particolar modo mi ha colpito un documento reperito dal sito della
RealNetworks che riporta un test comparativo della KeyLabs tra i server di streaming Helix
Universal Server e Windows Media Technology (WMT) 4.1. Sebbene il test sia relativamente
vecchio (è stato realizzato nel giugno 2002 e con tecnologia Dual Intel Pentium III Xeon 700
9
MHz 2 GB di memoria RAM per i server) indica che, oltre a supportare oltre il doppio delle
connessioni client rispetto a WMT 4.1 sotto Windows, Helix Universal Server arriva addirittura
a duplicare le sue stesse capacità quando gira sotto Red Hat Linux. Riporto qui sotto tabelle e
grafici comparativi tratti dal report della KeyLabs.
Figura 3.2.1
Come si può vedere, la prima tabella (in figura 3.2.1) compara le prestazioni dei due programmi
sotto Windows e mostra poi le prestazioni di Helix Universal Server anche sotto Linux. Si nota
subito la differenza anche tra le stesse performance del server della RealNetworks con i due
sistemi operativi. Differenza rimarcata anche dalla seconda e terza tabella, che le traducono in
termini percentuali. La seconda tabella mostra la superiorità di Helix Universal Server rispetto al
prodotto della Microsoft a parità di condizioni (stesso hardware e stesso sistema operativo). La
terza tabella, invece, rimarca il divario nelle prestazioni di Helix Universal Server in ambiente
10
Linux rispetto a WMT, che è stato sviluppato solo per Windows. Tutte e tre le tabelle si
riferiscono a test svolti trasmettendo file multimediali in formato Windows Media 8.
Il grafico in figura 3.2.2 rappresenta con efficacia le dimensioni riportate dalle tabelle e dà una
chiara idea del gap tra i due prodotti.
Figura 3.2.2
Ma i tecnici della KeyLabs non si sono fermati qui: hanno anche testato Helix Universal Server
usando file multimediali nel formato RealNetworks Version 9, ossia nel formato proprietario
della RealNetworks. Com’è logico aspettarsi, le prestazioni sono ancora migliori. I dati nella
figura 3.2.3:
11
Figura 3.2.3
Pur consapevole che questi dati sono, come detto prima, relativamente vecchi e pur sapendo che
il prodotto della Apple poteva essere una valida alternativa, ho considerato l’esperienza della
KeyLabs nel campo dei benchmark ed ho pensato che il prodotto della RealNetworks poteva
essere una buona soluzione per l’azienda.
A questo punto ho preso in considerazione il prodotto offerto dalla Helix Community. Questa
comunità, aperta a tutti, sviluppa software open-source per piattaforme multimediali con la
collaborazione della RealNetworks. Questo significava che avrei potuto avere a disposizione la
tecnologia di una delle compagnie leader nel settore del multimedia unitamente al supporto di un
vasto team di sviluppatori e appassionati. Il sito www.helixcommunity.org infatti mette a
disposizione newsletter, forum e persino chat in cui si possono trovare suggerimenti e porre
domande. Ho così optato per Helix DNA Server come server di streaming. Di conseguenza ho
12
usato Helix Producer Basic 9 (gratuito) e il player multimediale (anch’esso gratuito) Real Player
9.
3.3: ORGANIZZAZIONE GENERALE
Spiego ora come ho deciso di procedere.
•
Prima di tutto dovevo montare e testatare i pc comprati appositamente per lo scopo. Uno
l’avrei usato come server; l’altro come client, postazione di cattura e codifica delle
immagini nonché come postazione di sviluppo per il client personalizzato.
•
Nelle due macchine era installato Windows XP come sistema operativo ma era
un’installazione personalizzata creata dalla Dell. Ho subito riscontrato anomalie ed
instabilità nel comportamento del sistema operativo, così che ho deciso di reinstallarlo.
Nella macchina adibita a client avrei reinstallato Windows XP Service Pack 2 e l’avrei
protetto con un antivirus (AVG) e un firewall (Sygate) che si trovano gratuiti su inernet.
In seguito avrei proceduto con l’installazione della webcam e di Helix Producer Basic.
•
Nel pc adibito a server invece dovevo installare QiLinux e la versione 11 beta 2 di Helix
DNA Server.
•
Una volta installato il binario del server, avrei provato per prima cosa lo streaming on
demand per testare il funzionamento del software.
•
In un secondo momento, dopo essermi sincerato dell’efficienza del server, sarebbe stato
il momento di provare con lo streaming live.
•
Appena reso operativo uno stream live, misurare eventuali ritardi.
•
Impostare per il server un IP pubblico e verificarne il funzionamento.
•
Costruire un client personalizzato con un player embedded su pagina web.
13
CAPITOLO 4
STRUMENTI
Oltre ai sistemi operativi, al server, al client e al producer già citati nel paragrafo 3.2, mi sono
avvalso di alcuni strumenti che vado ad elencare qui sotto.
•
IPTraf: utility di Linux che fornisce statistiche ed informazioni importanti sulle
connessioni TCP aperte e sul traffico UDP che passa attraverso l’interfaccia di rete. Lo
vedremo nel dettaglio in un esempio pratico nel capitolo 5.
•
Ethereal: programma simile a IPTraf, mi è stato molto utile nel monitorare il traffico lato
client. Specificata un’interfaccia di rete, è sufficiente premere “start” per far iniziare la
cattura dei pacchetti che attraversano la rete. A differenza di IPTraf, Ethereal cattura
pacchetti solo per un lasso di tempo stabilito dall’utente. Infatti bisogna premere “stop”
per interrompere lo sniffing e poter visualizzare i risultati, mentre IPTraf usa una finestra
a scorrimento dove i pacchetti nuovi compaiono in fondo e quelli vecchi, se non ci stanno
più, scompaiono dalla visuale. Non si può salvare nessuna informazione con IPTraf,
mentre Ethereal permette di salvare le informazioni catturate. Questa opportunità mi è
stata molto utile per poter studiare con calma la composizione del traffico. Ethereal
inoltre fornisce molte più informazioni di IPTraf sui singoli pacchetti. Quest’ultimo
infatti fornisce solamente la dimensione del pacchetto, l’origine e la destinazione.
Ethereal invece scompone ogni pacchetto in tutte le sue parti (per esempio header, flag,
payload, codice di correzione degli errori) specificando la dimensione di ciascuna parte e
i valori che essa assume. Se vengono trasmessi dati umanamente leggibili, come stringhe
di testo, Ethereal le visualizza. Nei capitoli 7 e 8 dimostrerò come questo utilissimo
strumento mi abbia permesso di studiare il protocollo di comunicazione tra il producer e
il server e tra il client e il server.
•
Dreamweaver: strumento molto potente per la realizzazione di siti web creato dalla
Macromedia, mi è stato utile per creare le pagine web dei client. Mi è tornato utile per
impostare la struttura delle pagine in modo semplice e veloce grazie alla creazione
semplificata delle tabelle e dei frame, ma il resto del lavoro ho preferito svolgerlo
utilizzando direttamente il codice HTML.
•
WordPad: come ho appena detto, ho editato buona parte del codice HTML “a mano”.
Questo semplice strumento, presente ormai di default in Windows, mi ha permesso di
scrivere il codice agilmente grazie alla sua semplicità e rapidità. La sua leggerezza si fa
apprezzare quando bisogna apportare poche modifiche in varie pagine e bisogna saltare
14
da una all’altra aprendole per editarne il sorgente. La formattazione del testo è altresì
utile per strutturare il codice in modo da renderlo più comprensibile e più accessibile
anche a terzi.
•
Webmin: pratico strumento per l’amministrazione della rete. Molto apprezzato dai
sistemisti per la sua intuitività dovuta ad un’accattivante interfaccia grafica che permette
di trovare immediatamente le risorse, ben divise per categorie, e modificarne i parametri
di configurazione.
15
CAPITOLO 5
CARATTERISTICHE TECNICHE
5.1: DETTAGLI TECNICI DI HELIX UNIVERSAL SERVER 9
1. Formati supportati:
•
RealNetworks: RealAudio (.rm), RealVideo (.rm, .rmvb), RealPix (.rp), RealText
(.rt)
•
Macromedia: Flash (.swf)
•
Microsoft: Windows Media (.asf, .wma, .wmv)
•
Apple: QuickTime (.mov)
•
Standards-Based: MPEG-1, MPEG-4, MP3
•
Image Formats: GIF (.gif), JPEG (.jpg, jpeg), PNG (.png)
•
Altri: AU (.au), AIFF (.aif, .ief), WAV (.wav)
2. Protocolli supportati:
•
Real Time Streaming Protocol (RTSP)
•
Progressive Networks Audio (PNA): vecchio protocollo usato dalla Real, mantenuto
per questioni di compatibilità.
•
Microsoft Media Services (MMS)
•
HyperText Transfer Protocol (HTTP): non è un protocollo di streaming ma è
utilizzato in vari modi, come la consegna delle pagine web di Helix Administrator che
permettono la configurazione del server, o per aggirare le restrizioni dei firewall
tramite cloaking.
3. Aliasing: tecnica grazie alla quale il server maschera l’URL pubblico in cui si trova il file
richiesto.
4. Content Caching (figura 5.1.1): il media player richiede il file ad un server detto
“subscriber” che controlla se nella sua cache è già presente il file. Se non c’è, lo richiede
ad un server “publisher” che gli manda tutto o parte del file. In genere il subscriber
richiede una quantità di dati che dipende dalla velocità di trasferimento del client in modo
da risparmiare spazio della cache. Questa viene svuotata usando una politica LRU. Se il
file viene cancellato sul publisher, non viene più trasmesso dal subscriber, anche se si
trova ancora nella cache. Nel caso vi siano un cluster di server publisher, le richieste
16
vengono inoltrate con una politica di DNS rotation o Round Robin DNS per distribuire il
carico.
Figura 5.1.1
5. Custom Logging: sistema flessibile che permette di creare report personalizzati.
6. SLTA: Simulated Live Transfer Agent. Utility che permette di riprodurre in streaming
una clip video come se fosse un evento live.
7. RTSP Cache Directives: la possibilità di imporre restrizioni ai server Helix Universal
Proxy riguardo la memorizzazione nella cache delle clip.
8. Redundant Servers (figura 5.1.2): ridondanza dell’informazione da spedire. In caso di
interruzione del collegamento con il server (ad esempio a causa di un guasto sul server o
sulla linea), RealOne Player è in grado, grazie ad una lista di server alternativi fornita
durante il set-up del collegamento, di stabilire una nuova connessione con un altro server
scegliendo a caso tra quelli disponibili.
17
Figura 5.1.2
9. Windows Media Streaming: usando MMS (Microsoft Media Services protocol) o HTTP
invia in streaming anche file in formato Windows Media.
10. RTP-Delivered Formats: il formato RTS per i pacchetti è usato come standard di default
con Quick Time e MPEG e opzionalmente con Real Media. Questo formato permette di
trasmettere le clip sfruttando il protocollo RTSP.
11. SureStream Splitting (figura 5.1.3): vengono inviate al client man mano parti del file le
cui dimensioni dipendono dal suo bit-rate.
Figura 5.1.3
18
Il server sceglie il bitrate in base alla stima iniziale che Real Player gli invia tramite il
protocollo RTSP. In seguito adatta il rate in base alle condizioni della rete per evitare la
perdita di troppi dati che causerebbe il blocco della riproduzione.
12. RealOne Player Statistics: informazioni su stream aperti e bit-rate dei client connessi.
13. Distributed Licensing: un gruppo di server della stessa organizzazione che condividono
dei files possono condividerne anche l’eventuale licenza, le cui informazioni sono
generalmente mantenute su un server publisher primario.
14. Port Hinting: per i client che ricevono dati da Helix Universal Server solo attraverso
HTTP cloaking per passare attraverso un firewall, il numero di porta non è più quello
standard del protocollo RTSP (che viene bloccata dal firewall) ma la 80 dell’HTTP.
Quindi si fornisce tramite l’URL la porta corretta.
15. HTTP Cloaking: alcuni firewall limitano protocolli di streaming come RTSP o MMS e il
client non riesce a stabilire la connessione. In questi casi, il client e il server mascherano
il traffico multimediale come HTTP, una soluzione conosciuta come “HTTP cloaking”.
Poichè la maggior parte dei firewall lascia passare il traffico HTTP, questa soluzione
risolve il problema. Tuttavia HTTP non è stato progettato per lo streaming e gli utenti
non ottengono la massima qualità dallo stream. I client RTSP usano due stream HTTP
per connettersi ad un unico Helix Universal Server. La prima connessione sfrutta il
comando HTTP GET, usato per richiedere una Web page. Helix Universal Server elimina
il mascheramento HTTP e usa le informazioni RTSP incapsulate per determinare quali
informazioni mandare al client. Helix Universal Server quindi aspetta la seconda
connessione HTTP dallo stesso client per poter procedere con lo streaming del media.
Questa seconda connessione usa il comando standard per richiedere dati da un server
HTTP: HTTP POST. Una volta che il client ha stabilito questi due stream, inizia con
Helix Universal Server a passarsi pacchetti RTSP in due direzioni, attraverso un firewall
che blocca il traffico RTSP.
16. Redundant Encoders (figura 5.1.4): ridondanza dei codificatori dei file multimediali da
inviare in streaming. Se un codificatore va in crash ce n’è subito pronto uno alternativo.
19
Figura 5.1.4
17. Unicasting (figura 5.1.5): è il modo più semplice per trasmettere uno stream live. Il
server invia ad ogni player multimediale uno stream distinto. Con questa tecnica può
trasmettere sia un evento live che un media on-demand. Gli stream separati consentono
ad ogni client di interagire con esso come se si stesse guardando un filmato in locale,
quindi controllandone la riproduzione per esempio mettendola in pausa o saltando ad un
punto preciso.
Figura 5.1.5
18. Multicasting: a differenza dell’unicast, la tecnica del multicasting trasmette il media su di
un unico stream al quale possono collegarsi più utenti contemporaneamente. La figura
5.1.6 mostra una tipica situazione di streaming multicast.
20
Figura 5.1.6
Nonostante siano tutti collegati allo stesso stream, ciascun client può mantenere un canale
di controllo con il server che permette di inviare comandi come “stop”, inviare statistiche
all’archivio dei log, inviare i dati necessari ad un’eventuale autenticazione, tenere traccia
nel server del numero di client connessi che, vista l’onerosità implicita nel mantenimento
del canale, sarà limitato. Questa tecnica è detta “back-channel multicasting” (figura
5.1.7).
Figura 5.1.7
Utilizzando invece la tecnica “scalable multicasting” (figura 5.1.8) non viene mantenuto
un canale di controllo e si può trasmettere ad un numero illimitato di player multimediali.
La comunicazione infatti è unidirezionale, usa una porzione minore di banda, impegna
21
meno risorse di sistema del server e si ha minore overhead amministrativo. Ovviamente
non sarà possibile ricevere statistiche né sapere quanti client sono connessi.
Figura 5.1.8
19. Tabella riassuntiva: la tabella 5.1.1 riassume le caratteristiche di Helix Universal Server
mostrando i servizi che è in grado di offrire a seconda del formato del media trattato.
22
Helix Universal Server
Windows
Apple
RTP-
Feature
Media
QuickTime
Based
HTTP cloaking for firewalls
yes
no
no
Launch utility for Web page links
yes
no
no
Aliases in URLs
yes
yes
yes
Viewable clip source information
no
no
no
Reconnection to a redundant server no
no
no
Cached content
yes
yes
yes
yes
yes
yes
Unicasting
yes
yes
yes
Redundant live stream encoders
yes
yes
yes
Back-channel multicasting
no
no
no
Scalable multicasting
yes
yes
yes
yes
yes
yes
Simulated live broadcasts
yes
yes
yes
Access control by IP address
yes
yes
yes
no
yes
no
Media player ID validation
no
no
no
SMIL-based ad insertion
no
no
no
Access request logging
yes
yes
yes
Custom logging reports
yes
yes
yes
Online activity monitoring
yes
yes
yes
Proxied on-demand and live
streams
Splitting from transmitter to
receiver
User name and password
validation
Tabella 5.1.1
5.2: DETTAGLI TECNICI DI HELIX PRODUCER BASIC 9
Helix Producer è un programma che serve per codificare e comprimere i dati audio e video che
arrivano da una sorgente (quale potrebbe essere una webcam) preparandoli per la trasmissione al
23
server di streaming. Non solo: è anche in grado di convertire vari formati di file in modo da
poterli poi trasmettere con Helix Universal Server.
Helix Producer Basic supporta i seguenti tipi di file:
AIFF Files: *.aif; *.aifc; *.aiff
AVI Files: *.avi
Digital Video Files: *.dv
MPEG: *.mpg; *.mpeg; *.m1v; *.mp2; *.mp3
NeXT Sound Files: *.snd
QuickTime Files: *.mov; *.qt
Sun Audio Files: *.au
WAV Files: *.wav
Windows Meta Files: *.wma; *.wmf; *.wmv
La figura 5.2.1 mostra la schermata principale di Helix Producer:
Figura 5.2.1
24
Nella parte di sinistra si sceglie la sorgente per l’audio e per il video, che sono mantenute distinte
dando la possibilità, per esempio, di creare un video con una colonna sonora musicale anziché
con l’audio originale. In alternativa si prende in input un file. In tal caso il file verrà convertito
nel formato “rm”. C’è anche la possibilità di limitare la cattura audio/video con un tempo
preimpostato.
Il pulsante “Video Filters” nella parte di destra apre una finestra nella quale si possono impostare
vari filtri quali noise filter, resize filter, inverse-telecine e de-interlace filter. In “Clip
Information” si possono invece impostare informazioni riguardanti la clip, come la provenienza,
il genere e altre. Molto più interessante è il pulsante “Audiences” che consente di scegliere fino a
tre bitrate ai quali codificare la clip (nella versione Plus si possono codificare infiniti bitrate). Il
Sure Splitting si può così garantire grazie alla codifica a più bitrate dello stesso file. In genere
codificavo il bitrate della clip per un modem a 56 Kbps (34 Kbps effettivi per la trasmissione
della clip in streaming), una ISDN a 128 Kbps (100 Kbps effettivi) e un’ADSL a 500 Kbps (450
Kbps effettivi).
La figura 5.2.2 mostra come appare l’interfaccia che permette di impostare i suddetti parametri:
Figura 5.2.2
25
Sempre sulla destra (della figura 5.2.1) si trova un pulsante con l’icona di un server che apre una
finestra di dialogo nella quale inserire i dati del server di destinazione della clip. Dati quali
indirizzo IP, porta di destinazione, nome del file di destinazione, eventuale mount point ed
eventuali user name e password. Gli ultimi due non sono richiesti per tutti i tipi di broadcast.
Ecco nel dettaglio quali sono le modalità di broadcast e in cosa consistono.
Account-Based Push Broadcast (figura 5.2.3): è la modalità standard di trasmettere all’audience
attraverso il server i media codificati. Il vantaggio principale del metodo Push è che i dati
vengono appunto “spinti” dentro il server continuamente, quindi un client che si collega non
deve aspettare che il producer si colleghi al server (come nel metodo Pull) e non subirà alcun
ritardo. Ecco cosa succede:
Figura 5.2.3
Al passo 1 il producer si collega al server ed invia user name e password.
Al passo 2 il server dà la conferma della avvenuta connessione e delle modalità di trasmissione
dei pacchetti (come le porte alle quali indirizzarli).
Al passo 3 il producer inizia la trasmissione dei dati, sia che un client li abbia chiesti o no.
Al passo 4 vi è un client che si collega al server e richiede lo stream.
Al passo 5 il server invia i dati al client che li decodifica e riproduce.
Questa è la modalità che ho scelto di usare per la semplicità e sicurezza, oltre ai bassi tempi di
latenza e dato che non sussistevano problemi di spazio su disco nel server. La comunicazione tra
producer e server e tra client e server sarà approfondita nei capitoli 7 e 8.
26
Password-Only Push Broadcast (figura 5.2.4): questa modalità è consigliata solo per gli esperti.
Il principale vantaggio è che non è necessaria una connessione iniziale con autenticazione.
Questo comporta un leggero guadagno nelle prestazioni. Il rovescio della medaglia è che il
producer non ha un feedback da parte del sever quindi, se qualcosa non andrà a buon fine, il
broadcast non raggiungerà il server e il producer non avrà riscontri.
Figura 5.2.4
Al passo 1 il producer si collega al server inviando la password ed iniziando subito la
trasmissione dei pacchetti senza che nessuno debba richiederla, come nella modalità precedente.
I passi 2 e 3 sono come il 4 e 5 rappresentati nella figura 5.2.3.
Multicast Push Broadcast (figura 5.2.5): anche questa è una modalità raccomandata soltanto agli
esperti. Il producer invia i dati a più server che si agganciano allo stesso stream, risparmiando
larghezza di banda e carico dei server usando server multipli per consegnare il contenuto.
Figura 5.2.5
27
Se non si usasse il multicasting, il producer manderebbe uno stream separato ad ogni server.
Il Multicast Broadcasting può anche essere usato per il broadcasting attraverso una rete satellitare,
dove le connessioni a due vie non sono supportate ma esistono solo monodirezionali.
Pull Broadcast (figura 5.2.4): in questa modalità la clip viene codificata ma non viene inviata al
server fintantochè un client non la richiede. Il vantaggio è che se una clip deve essere sempre
disponibile ma viene richiesta raramente, con questo metodo si risparmia spazio sul disco del
sever e si preserva larghezza di banda.
Figura 5.2.6
Al passo 1 inizia la codifica della clip ma non viene ancora inviata.
Al passo 2 un utente usa il suo Real Player per richiedere il broadcast.
Al passo 3 il server, che ha ricevuto la richiesta dal client, inoltra la richiesta al producer. Una
volta che la connessione col producer sarà approntata, il server continuerà a mandare richieste di
invio dei dati fintanto che il client continuerà a richiederli ("keep alive" requests).
Al passo 4 il producer stabilisce la connessione con il server e continuerà a mandare dati finchè
verranno richiesti.
Al passo 5 si vedono i dati arrivare finalmente al client che li può decodificare e riprodurre.
Legacy Push Broadcast: è una modalità che permette la connessione del producer con un server
Helix di una versione precedente alla 9. Prima di usare questa modalità è bene conoscere alcune
informazioni importanti del server a cui ci si vuole connettere: indirizzo IP, porta di
comunicazione, username, password, etc.
28
Ora ci sono tutte le informazioni neccessarie a creare uno stream live di dati. Quando inizia la
trasmissione, si vede nella schermata di sinistra l’immagine catturata dal dispositivo e sulla
destra quella codificata dal producer. Le due colonne a sinistra delle videate sono gli indicatori di
livello dell’audio. La figura 5.2.7 indica come dovrebbe apparire il producer durante la codifica
di una clip video:
Figura 5.2.7
Il menu a tendina sopra la finestra di destra permette di scegliere, durante la codifica, il bitrate
rispetto al quale visualizzare l’anteprima del video codificato. Molto utile per controllare la
qualità del prodotto che si sta creando.
L’area bianca a metà schermo sulla destra mostra lo status della connessione col server nel caso
di un live broadcasting. Quella grande in fondo invece mostra lo status del job.
Questi sono gli aspetti principali di Helix Producer Basic. Oltre a queste opzioni ve ne sono
molte altre più avanzate ma non di rilievo per il mio lavoro.
29
CAPITOLO 6
REALIZZAZIONE
6.1: PRIMA PROVA SU PC
La primissima prova di Helix DNA Server è stata eseguita su un PC con QiLinux. Dopo aver
installato il server ho cercato di accedere alla sezione di amministrazione per configurarlo ma ho
incontrato alcune difficoltà: l’Helix Administrator sfrutta un’interfaccia grafica basata su pagine
html ma in quel momento la mancanza del plug-in java per il browser non mi permetteva di
visualizzare le pagine correttamente. Ho così deciso di demandare la configurazione e passare
immediatamente ad una prova pratica: ho inserito dei file .mp3 nella cartella “Content” di Helix,
cartella che contiene i file da trasmettere on demand sulla rete. Quindi, dal mio computer
personale (Apple iBook G4), ho provato ad inviare una richiesta tramite protocollo rtsp alla
macchina che ospitava il server scrivendo la seguente stringa nel browser Safari:
rtsp://192.168.1.203/test.mp3. Si apriva immediatamente un pop-up di QuickTime che cercava di
caricare il file test.mp3 ma senza successo. RealPlayer e iTunes portavano allo stesso risultato.
Inizialmente pensavo che non riuscisse ad accedere alla cartella “Content”, così ho provato a
modificare i permessi di accesso alla cartella ma senza nessun risultato. Quindi ho pensato che
probabilmente non vedeva il server, forse nemmeno a livello fisico. Con un ping all’indirizzo del
server ho verificato che il collegamento fisico fosse stabilito. In seguito all’esito positivo di
questo test ho verificato le impostazioni di rete del server per accertarmi che l’indirizzo che
avevo fosse corretto e che la maschera di sottorete fosse la stessa impostata sul mio computer,
altrimenti i due non si sarebbero potuti “vedere”. Nessun errore riscontrato. I miei dubbi si sono
rivolti alla porta 554 (quella adibita al protocollo rtsp) quindi dovevo verificare che non fosse
chiusa. Un telnet eseguito dalla macchina server alla suddetta porta aveva successo, mentre se
eseguito dal mio notebook dava esito negativo. Ciò significava che la porta era aperta ma un
client non poteva collegarsi da un computer esterno perché veniva bloccato da qualcosa. Quel
qualcosa era il firewall di linux che ho provveduto a disattivare usando Webmin: questo
programma usa una tabella degli IP autorizzati che per semplicità ho disabilitato, in modo che
qualunque computer avesse pieno accesso alle porte. Così è stato infatti: tutti e tre i client sopra
menzionati hanno riprodotto senza problemi il file test.mp3 e un altro file .mp3 all’interno della
medesima cartella “Content”.
30
6.2: INSTALLAZIONE SU PC APPOSITI
In seguito mi sono stati messi a disposizione due pc DELL. Su uno ho installato QiLinux 1.2,
mentre sull’altro Microsoft Windows XP Professional Service Pack 2. Naturalmente, in entrambi
ho installato Helix DNA Server e, sul pc Windows, anche Helix Producer Basic (free) e una
webcam. Contavo infatti di utilizzare quest’ultima postazione per la produzione di uno stream
audio e video live da inviare al server Linux. Prima però sarebbe stato più semplice provare la
cosa in locale.
Dapprima ho riprovato con la riproduzione di file on-demand e la cosa non è stata problematica.
Ho provato allora a configurare Helix Producer Basic per codificare ed inviare al server uno
stream live. Da qui sono iniziati i problemi dal momento che non sono stato in grado di inviare il
flusso di dati prodotto al server. Ho provato ad installare anche Real Producer 10 Plus ed Helix
Universal Server Advanced 9.07 (entrambi trial) per vedere se erano di utilizzo più immediato
ma senza ottenere cambiamenti di rilievo.
Il producer codificava i dati catturati dalla webcam ma non riusciva a mandarli al server.
Sistematicamente compariva un messaggio di errore rosso nella finestra che indicava lo status
della connessione con il server: “Authentication failed”. I dati immessi durante la configurazione
del job erano senza dubbio corretti, eppure non riusciva ad autenticarsi.
Ho allora abbandonato per un momento i prodotti Helix per fare una prova con VLC media
player. Si tratta di un interessante programma open source che funge, oltre che da client, anche
da producer e server. Grazie a questo sono riuscitito a vedere live su un altro pc quello che la
webcam catturava e sono così stato in grado di fare una breve dimostrazione di streaming live ad
un potenziale cliente, al quale poi potrebbe essere venduto il servizio una volta realizzato;
servizio che comprenderebbe anche un client personalizzato con SMIL.
6.3: SOLUZIONE PROBLEMI CON IL SERVER
Nonostante VLC si rivelasse di utilizzo più immediato, era altresì evidente che non forniva le
potenzialità di comunicazione e configurazione fornite dal progetto Helix. Fu ben presto chiaro
infatti che non sarebbe stato semplice configurare VLC per distribuire in broadcast uno stream
live a causa del fatto che i parametri di configurazione erano di difficile accesso e
interpretazione. Per non parlare della potenza: VLC è nato come player multimediale piuttosto
31
che come server di streaming. Tuttavia si è svelato di semplice impiego per inviare i dati ad un
solo client.
A seguito di questa confortante esperienza con VLC, sono tornato ad Helix. Approfondite
ricerche ed esperimenti inconcludenti mi convincevano sempre più che in Helix DNA Server
mancava qualcosa. Nella guida on-line è scritto che per ricevere stream live da un producer è
necessario scegliere “Enable” dal menu a tendina alla voce “Live Archiving” del menu
dell’Administrator. Il problema era che nella pagina di amministrazione quella voce mancava e
non ce n’era una equivalente. Con grande delusione ho constatato che dal forum del sito ufficiale
non ottenevo aiuto, nonostante molte persone avessero il mio stesso problema. L’unico
suggerimento era di editare manualmente il file di configurazione togliendo il commento ad
alcune righe. Non cambiava nulla. Avevo perso molto tempo ed energie senza raggiungere alcun
risultato, così ho deciso di tentare installando la versione base di Helix Universal Server. Ho
notato subito una sezione dell’Administrator che non c’era nel DNA Server: “Broadcasting”. In
questa sezione si trova la voce “Live Archiving”, nella quale mi è bastato scegliere “Enable” dal
menu a tendina che chiede se si vuole abilitare l’archiviazione degli stream live. È bastato questo
per far funzionare il tutto alla perfezione. Se lo stream live si chiama “live.rm”, basta scrivere nel
campo “URL” del player multimediale: rtsp://<indirizzo server>/broadcast/live.rm. In questo
modo era possibile vedere, tramite Real Player, le immagini riprese dalla telecamera da qualsiasi
computer connesso alla rete locale. Persino da un palmare: sono riuscito a visualizzare video e
audio live in ottima qualità anche su un palmare collegato alla rete via wi-fi.
Le differenze tra Helix DNA Server ed Helix Universal Server tuttavia non si fermano qui. Ho
effettuato un test per verificare se erano in grado di trasmettere gli stessi tipi di file ed ho
osservato che c’è una leggera differenza anche in questo. Helix DNA Server infatti è in grado di
trasmettere, oltre ovviamente ai file “rm”, soltanto gli “mp3”. Helix Universal Server invece non
dispone della licenza per trasmettere gli “mp3” in quanto è una versione base, però trasmette i
“wav” e, seppur con alcuni problemi, anche gli “avi”. Non tutti gli “avi” vengono trasmessi,
anzi, molti tenta di trasmetterli ma o non ci risultano o si vedono immagini confuse. Una tabella
riassuntiva (tabella 6.3.1) contribuirà a chiarire le idee. Dove indicato “no” non significa che
l’applicazione non è in grado di riprodurre il formato ma semplicemente che con la versione
“free” non è prevista.
32
Formato file
Helix DNA Server
Helix Universal Server
mp3
sì
no
wav
no
sì
rm
sì
sì
avi
no
sì (non tutti)
mov
no
no
mpg
non supportato
no
mp4
no
no
wmv
no
no
swf
no
no
streaming live
no
sì
Tabella 6.3.1
6.4: APPLICAZIONE IP PUBBLICO AL SERVER
Per rendere il servizio accessibile dall’esterno, ossia da internet, si rendeva necessario assegnare
un IP pubblico al server e settare il firewall in modo che lasciasse aperte le porte necessarie alla
comunicazione.
Inizialmente non sono riuscito a far funzionare il sistema poiché la comunicazione tramite
protocollo UDP dava problemi. Infatti, il Producer effettuava correttamente la connessione al
server e mandava i dati dello stream, ma questi non arrivavano a destinazione. Real Player, di
conseguenza, mi dava un errore che indicava che il file richiesto non era presente o non era
aggiornato. Ho così usato sul server un’utility di Linux chiamata IPTraf che mi permette di
monitorare in tempo reale le connessioni TCP/IP e il traffico UDP. Sebbene fosse presente la
connessione TCP tra i due pc, non arrivavano pacchetti UDP dall’indirizzo del Producer. Allora
ho “sniffato”, come si dice in gergo, il traffico sul pc del producer con un programma gratuito,
Ethereal. Ho potuto notare che, dopo un handshake a tre vie per stabilire la connessione,
venivano inviati al server i dati necessari all’autenticazione. Questo rispondeva con un “ok” ed
alcuni dati necessari a stabilire il flusso di dati UDP, tra cui le porte utilizzate. In seguito il
Producer inviava pacchetti UDP alla porta indicata dal server, ma a questo non arrivavano. Oltre
a ciò, ogni 2 secondi, il server inviava un frame di controllo al producer che sembrava indicare
33
quanti pacchetti aveva ricevuto e quanti ne aveva persi. Il messaggio “Total packets = 0”
sembrava indicare in maniera eloquente che al server non arrivava nulla (in realtà, come
vedremo nel capitolo 7, questa interpretazione va precisata). In risposta a questo pacchetto il
Producer inviava un ACK, ma continuava a spedire dati come se nulla fosse. Le relative porte
erano aperte e non capivo come mai il traffico non arrivasse. Così ho provato ad usare il
protocollo TCP per far comunicare i due computer poiché, essendo un protocollo orientato alla
connessione, una volta che questa fosse stata stabilita i due pc non avrebbero dovuto avere
problemi a scambiarsi dati. Infatti è proprio quello che è successo: lo streaming funzionava alla
perfezione. Bisogna tener conto dei firewall che spesso, come anche in questo caso, sono molto
più selettivi rispetto ai pacchetti UDP piuttosto che rispetto al TCP. Stabilendo le regole del
firewall si può tener conto del fatto che una connessione TCP lanciata dall’interno presuppone
dei pacchetti in risposta, mentre non sempre si sa se dei pacchetti UDP in entrata sono stati
richiesti da qualche servizio o sono, invece, “abusivi”.
Il TCP è un protocollo più affidabile rispetto all’UDP, ma proprio questa potrebbe rivelarsi
un’arma a doppio taglio: il fatto che se un pacchetto viene perso ne venga richiesta la
ritrasmissione implica, in caso di congestione del traffico, un rallentamento che può portare al
blocco del flusso di dati.
Impostando un IP locale fisso al pc del producer e aprendone tutte le porte, ma soltanto verso il
server di streaming, sono riuscito a far comunicare il producer con il server anche tramite il
protocollo UDP. Prima non ci riuscivo perché il firewall, che si trova tra la rete internet e il
Producer, non permetteva di far passare i pacchetti UDP diretti al server. Assegnandogli un IP
fisso è stato possibile impostare le regole del firewall in modo da aprire tutte le porte da (e verso)
il server. Il Producer apre ad ogni avvio una porta diversa per comunicare con il server, quindi è
stato necessario aprirle tutte. Si potrebbe pensare che questa situazione possa essere
potenzialmente pericolosa. Tuttavia sia il server che il producer si trovano dietro un firewall.
Quello del producer lascia passare il traffico in entrata solamente se proviene dall’indirizzo del
server. Un attacco di tipo ip-spoofing potrebbe permettere ad un hacker di simulare l’IP del
server, magari dopo averlo messo fuori gioco con un attacco DoS, e sfruttare così l’accesso alla
rete locale, ma il pc del producer non è mai stato configurato per accedere alla NAS aziendale (la
rete interna con i suoi archivi contenenti i dati importanti). Non disponendo dell’autorizzazione
ad accedere a tale sistema, il computer su cui si trova il producer non rappresentava un punto di
accesso al cuore della rete ASCO TLC. Malgrado ciò, il primo giorno in cui il server è stato
proiettato nel web con indirizzo pubblico, è stato soggetto a numerosi attacchi. Così, nonostante
34
il monitoring costante e le misure di sicurezza adottate dai tecnici, questi mi hanno consigliato,
per prudenza, di scollegare fisicamente il server dalla rete la sera prima di lasciare la postazione.
Nello schema in figura 6.4.1 è rappresentata la rete in questione:
Figura 6.4.1
35
Una volta reso operativo il server di streaming, ho iniziato a mettere mano al file di
configurazione per imparare ad usare alcune delle caratteristiche che rendono questo prodotto
potente e lo rendono migliore, per esempio, del VLC.
Si può limitare il numero di connessioni e addirittura specificare degli indirizzi IP dai quali
accettare la connessione, ma questo genere di cose non mi interessava. Piuttosto, pensando alla
possibilità di fornire un servizio di videoconferenza ad eventuali futuri clienti, poteva essere utile
creare un mount point per ogni cliente ed assegnargli una password personale. Quando viene
inviato uno stream live al server senza specificare un mount point, il file viene memorizzato
nella cartella “Archive”, sottocartella di “Content” (dove sono archiviati i file per la trasmissione
su richiesta). User name e password che si forniscono nell’autenticazione al momento della
connessione tra producer e server possono benissimo essere anche quelle dell’amministratore.
Come vedremo nel capitolo successivo però, tali dati non vengono criptati e far viaggiare sulla
rete la password dell’amministratore in chiaro non è buona cosa.
Creare un mount point significa, in pratica, creare una nuova cartella all’interno di “Archive”. Si
supponga di creare il mount point “federico”. Questo significa che all’interno della cartella
“Archive” troverò una cartella denominata “federico”. Devo anche impostare una password,
diciamo “mia_password”. Questi dati vengono scritti in un database dedicato agli account per la
ricezione degli stream live, chiamato “SecureRBSEncoder”.
Si faccia finta che io sia il presidente di un’azienda e che mi trovi all’estero. Ho bisogno di
comunicare delle notizie al personale. Imposto il producer con l’indirizzo del server, user name e
password e chiamo il file “presidente.rm”. Posso così far iniziare uno streaming live che va a
scrivere il file “presidente.rm” nella cartella “Content/Archive/federico/”. I miei impiegati
potranno vedermi e sentirmi semplicemente aprendo con Real Player l’URL rtsp://<nome
server>/broadcast/federico/presidente.rm. I miei dipendenti, dal canto loro, potrebbero fare
altrettanto, solo chiamando il file “dipendenti.rm”. A questo punto avrei due file nella cartella
“Content/Archive/federico/”: “presidente.rm” e “dipendenti.rm”. Se io aprissi l’URL
rtsp://<nome server>/broadcast/federico/dipendenti.rm vedrei e sentirei le voci dei miei
dipendenti nella sala riunioni e potremmo instaurare una comunicazione vera e propria.
Naturalmente si potrebbe creare una conferenza con più di due partecipanti, ma portebbe essere
difficile per un computer, a causa dei limiti della banda, gestire molti stream in entrata
mantenendo una buona qualità delle immagini e del suono. Questo è il presupposto dal quale
sono partito per creare il client personalizzato per un futuro cliente dell’azienda, al quale avrebbe
potuto interessare anche il sistema di videoconferenza. Nel paragrafo successivo descriverò nel
dettaglio quanto ho fatto.
36
Le potenzialità del server non sono finite qui. Ci sono, infatti, molte altre opportunità di
migliorare il servizio, per esempio impostando una password anche per poter vedere uno stream
o altre ancora (si veda il capitolo sui dettagli tecnici).
6.5: CREAZIONE DEI CLIENT PERSONALIZZATI
6.5.1: CLIENT PER UN FUTURO CLIENTE
Esamino ora la realizzazione del client per un possibile futuro cliente. L’idea era quella di
inserire in una pagina web quattro videate da sfruttare per una videoconferenza. Non ne avrei
messe di più per evitare, oltre al problema della disponibilità di banda, anche la confusione che
potrebbe sorgere dalla sovrapposizione dell’audio dei partecipanti. Per permettere a più di
quattro utenti di partecipare attivamente alla conferenza, ho pensato di affiancare alle schermate
una chat, in modo che si potesse interagire con brevi messaggi di testo mentre si assiste agli
interveti dei principali membri del team dirigenziale.
Nella figura 6.5.1.1 si può vedere come appare il client.
Figura 6.5.1.1
37
In alto il logo della società, che in questo caso è la ditta “Tata”, con la quale abbiamo effettuato
dei test di cui parlerò nel capitolo 9. A sinistra le quattro schermate e a destra la chat, inserita
sfruttando il codice fornito da www.chatexpert.it. Sotto le videate ho inserito i controlli del
volume e per silenziare l’audio.
Descrivo nel dettaglio il codice scritto per generare il player a quattro videate.
Prima di tutto ho creato il player con SMIL.
<smil xmlns="http://www.w3.org/2001/SMIL20/Language" >
<head>
<layout>
<root-layout backgroundColor="black" width="800" height="600" />
<region id="im1" left="0" top="0" right="400" bottom="300" fit="fill"/>
<region id="im2" left="400" top="0" right="0" bottom="300" fit="fill"/>
<region id="im3" left="0" top="300" right="400" bottom="0" fit="fill"/>
<region id="im4" left="400" top="300" right="0" bottom="0" fit="fill"/>
</layout>
</head>
<body>
<par>
<video src="real9video.rm" region="im1" />
<video src="real9video.rm" region="im2" />
<video src="real9video.rm" region="im3" />
<video src="real9video.rm" region="im4" />
</par>
</body>
</smil>
Nel tag “layout” creo le quattro videate. Con il “root-layout” definisco dimensioni e sfondo dello
spazio dedicato al player multiplo. Quindi uso “region” per impostare nome, posizione e
dimensione delle singole schermate, indicando con l’attributo “fill” di adattare l’immagine alle
dimensioni della regione. Con il tag “par” faccio partire contemporaneamente (in parallelo
appunto) le quattro presentazioni. Con questo codice fanno partire un semplice filmato
dimostrativo in locale, ma ho testato personalmente il client usando, come sorgente, un filmato
presente nel server. Dunque è possibile specificare quattro percorsi differenti per poter vedere
38
quattro diverse presentazioni, che potrebbero essere le immagini di quattro dirigenti in
videoconferenza, ognuno in un angolo diverso del globo.
Per inserire questa presentazione SMIL in una pagina web, è necessario creare prima un file con
estensione “rpm”, con questa semplice riga di testo all’interno:
file://videate3.smil
dove “videate3.smil” è la nostra presentazione, il cui codice ho descritto sopra.
Ora uso il tag “embed” per inserire il file “videate3.rpm” nella nostra pagina web. Questa
operazione permette di visualizzare la presentazione specificata dal file “videate3.rpm” nella
web page.
<EMBED SRC="videate3.rpm" CONSOLE=video1 WIDTH=533 HEIGHT=400
CONTROLS=ImageWindow AUTOSTART=true >
Specifico le dimensioni della presentazione, le parti del player da inserire (in questo caso
soltanto la finestra delle immagini, senza la barra dei controlli) e l’opzione che fa partire la
presentazione appena viene aperta la pagina (AUTOSTART=true).
Per inserire lo slider del volume ho usato il seguente codice:
<EMBED SRC="videate3.rpm" CONSOLE=video2 WIDTH=100 HEIGHT=25
CONTROLS=VolumeSlider>
Si noti il valore “VolumeSlider” per l’attributo “CONTROLS” che indica che sto inserendo il
controllo del volume.
Analogamente, per il pulsante del muto, uso lo stesso codice, solo con “MuteCtrl” al posto di
“VolumeSlider”.
<EMBED SRC="videate3.rpm" CONSOLE=video2 WIDTH=25 HEIGHT=25
CONTROLS=MuteCtrl>
Per la chat invece ho inserito questo codice, fornitomi dal sito web di Chat Expert. Ho soltanto
messo mani alle dimensioni per aggiustare il layout della pagina. Il resto consiste in parametri di
39
configurazione scelti da me durante la procedura guidata che ha portato alla generazione del
codice e alcuni parametri necessari al funzionamento del servizio, come l’URL dell’applet e
delle pagine ASP.
<!-- INIZIO CODICE ChateXpert Copyright 1997-2005 www.chatexpert.it di Alessandro La
Ciura -->
<applet code="Showclient.class" width="450" height="400"
codebase="http://server80.chatexpert.it/client_asp/">
<param NAME="fore_red" VALUE="">
<param NAME="fore_green" VALUE="">
<param NAME="fore_blue" VALUE="">
<param NAME="back_red" VALUE="">
<param NAME="back_green" VALUE="">
<param NAME="back_blue" VALUE="">
<param NAME="TITOLO" VALUE="Tata">
<param NAME="FONT" VALUE="Tahoma">
<param NAME="DIMENSIONE" VALUE="50">
<param NAME="HOMEPAGE" VALUE="http://www.tata.it">
<param NAME="REGISTRAZIONE" VALUE="/admin/condizioni.asp">
<param NAME="DESCRIZIONE" VALUE="Servizio gestito da ChateXpert - Idea e
sviluppo Alessandro La Ciura - alex at chatexpert.it">
<param NAME="cabbase" VALUE="client.cab">
<param NAME="sfondo" VALUE="no">
<param NAME="porta" VALUE="8191">
<param NAME="reg" value="false">
<param NAME="stanze" VALUE="Conferenza;">
<param NAME="valid" VALUE="false">
<param name="link" value="true">
<param NAME="privati" value="true">
<param NAME="nickname" value="Inserisci il nick...">
<param NAME="congela" value="false">
<param NAME="banner_img" value="">
<param NAME="banner_link" value="">
<param NAME="banner_desc" value="">
40
</applet>
<!-- FINE CODICE ChateXpert - Tutti i diritti sono di SOSTANZA© di Alessandro La
Ciura www.sostanza.it -->
6.5.2: CLIENT PER ASCO TLC
Mi è stato chiesto di creare anche un client simile a queso per l’azienda stessa in cui ho svolto il
tirocinio. Era necessaria una pagina web dalla quale poter vedere in streaming eventi quali
convegni, fiere, conferenze, servizi televisivi e quant’altro potesse riguardare l’azienda. L’idea è
nata da un servizio dedicato all’azienda fatto da una TV locale, Antenna3, su un convegno
tenutosi a Montebelluna quest’estate. Abbiamo pensato di sfruttare l’occasione per codificare e
inserire nel server di streaming il video dell’evento e renderlo accessibile a tutti via internet.
Purtroppo il periodo di tirocinio è terminato proprio mentre attendevamo che ci fosse consegnato
il video dalla TV locale, tuttavia ho fatto in tempo ad approntare il client prima di lasciare
l’azienda.
Stavolta ho usato una struttura a frame: uno orizzontale in alto e due verticali sotto. In quello in
alto è sempre presente il logo della società, sul quale cliccare per tornare all’home page del sito.
A dire il vero, questa funzione non è stata ancora implementata ma non sarà difficile farlo al
momento dell’integrazione della pagina nel sito web. Sotto, a destra, troviamo un elenco dei
filmati disponibili. A sinistra invece, di default compare un breve suggerimento su come
interagire con la pagina. È sufficiente cliccare su uno dei link sulla destra per visualizzare il
relativo filmato. Nella figura 6.5.2.1 uno screenshot:
41
Figura 6.5.2.1
Se si clicca su una delle iconcine blu, si apre una pagina web nel frame di sinistra. La pagina che
viene aperta ha un player embedded che parte automaticamente al caricamento della pagina. Solo
che questa volta, a differenza del client descritto al paragrafo precedente, trattandosi di video ondemand ho permesso tutti i controlli del player con “CONTROLS=All”.
42
Figura 6.5.2.2
Nel caso in cui il filmato non sia ancora disponibile ma di prossima pubblicazione, si vedrebbe la
pagina in figura 6.5.2.3:
43
Figura 6.5.2.3
Il codice HTML per creare la pagina con i frame è il seguente:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>ASCO TLC TELEVISION</title>
</head>
<frameset rows="188,*" cols="*" framespacing="0" frameborder="NO" border="0">
<frame src="asco_top.htm" name="topFrame" scrolling="NO" noresize>
44
<frameset rows="*" cols="50%,50%" framespacing="0" frameborder="NO" border="0">
<frame src="instructions.htm" name="leftFrame" scrolling="auto">
<frame src="asco_right.htm" name="rightFrame" scrolling="auto">
</frameset>
</frameset>
<noframes><body>
<p>E' necessario avere un browser che supporta i frame per visualizzare correttamente questa
pagina.</p>
</body></noframes>
</html>
Con il tag “frameset” definisco la suddivisione in frame, in cui il primo frame occupa 188 righe,
mentre il secondo va dalla 189esima riga fino alla fine della pagina (indicato dall’asterisco).
Come estensione in larghezza occupa tutta la larghezza della finestra, ma senza dimensioni fisse
(ancora una volta l’asterisco sta a significare questo).
Il secondo frame lo divido in due frame usando un tag “frameset” annidato. Per la dimensione
dei due frame uso valori percentuali, così che i frame si adattino alle dimensioni della finestra.
Avendo impostato come valori cols="50%,50%" per le colonne, indico che ciascun frame si
“prende” metà dello spazio disponibile in larghezza. Per questi due frame ho impostato
l’attributo “scrolling” al valore “auto” in modo che la barra dello scrolling compaia solamente se
necessaria.
45
CAPITOLO 7
COMUNICAZIONE TRA:
HELIX PRODUCER BASIC 9 ED HELIX UNIVERSAL SERVER BASIC 9
Questa, in figura 7.1, è l’interfaccia dell’utility IPTraf di Linux che ho usato per monitorare il
traffico del server:
Figura 7.1
Nella metà superiore si ha un elenco delle connessioni TCP. Sulla sinistra è indicato l’indirizzo
IP e la porta sorgente con immediatamente sotto il rispettivo destinatario, collegati da una
parentesi quadra azzurra. Sulla destra invece vi sono dati relativi allo stato della connessione
quali numero pacchetti inviati, numero di Byte inviati, flags, interfaccia. Ciascun flag è un bit
che può venir posto a 1 a seconda dello stato della connessione. I flag del protocollo TCP sono i
seguenti:
•
F
FIN
Chiusura della connessione
•
S
SYN Sincronizzazione: richiesta di apertura della connessione
46
•
R
RST
Reset della connessione, quando viene rifiutata
•
P
PSH
Push, indica che sta trasferendo dati senza bufferizzare
•
A
ACK Acknowledgment, indica che il pacchetto a cui fa riferimento è arrivato a
destinazione
•
U
URG Indica che il pacchetto deve essere considerato urgente
•
E
ECE
•
W
CWR Finestra di congestione ridotta
Notifica di congestione
Si possono anche trovare combinazioni di flag. Per esempio: “PA” alla terza riga indica che
vengono inviati acknowledments inseriti all’interno di pacchetti di dati da spedire subito senza
bufferizzazione. Questa tecnica di inserire gli acknowledgment all’interno del prossimo frame in
uscita è detta “piggybacking”. Un ulteriore esempio si ha nella seconda fase dell’handshake a tre
vie: viene inviato un pacchetto con flag “SYN+ACK” ossia un acknowledgment, riferito alla
richiesta di connessione del client effettuata tramite il precedente pacchetto con flag SYN,
allegato alla richiesta di connessione inviata a sua volta dal server in conseguenza della richiesta
del client.
Nella metà inferiore invece vi è un elenco dei pacchetti UDP che passano per l’interfaccia eth0.
La struttura è semplice: mostra rispettivamente il protocollo, la dimensione del pacchetto,
mittente, destinatario, interfaccia.
Quando avevo problemi a far giungere lo stream live al server, non venivano segnalati pacchetti
UDP in arrivo dal Producer. Dopo che sono riuscito a farlo funzionare invece, scorrevano a
video una grande quantità di pacchetti provenienti dal Producer.
Sul pc del Producer invece, che monta Windows XP come sistema operativo, ho usato Ethereal
per monitorare il traffico. Ecco la prima schermata che ho ottenuto (figura 7.2):
47
Figura 7.2
Le prime tre righe rappresentano l’handshake a tre vie. Si noti infatti che il primo pacchetto parte
dal pc del Producer (192.168.1.54) con flag SYN per richiedere la connessione. Il server
(194.20.142.173) risponde con un ACK al pacchetto di sincronizzazione (flag SYN, ACK) e il
pc del Producer risponde con un acknowledgment all’ACK del server che completa così
l’handshake. Ora la connessione è stabilita.
Il quarto frame, quello evidenziato in blu nella parte superiore della schermata, è mandato al
server dal Producer inviando i dati necessari all’autenticazione. Il Producer infatti deve
autenticarsi al server con user name e password prima di potergli trasmettere dati poiché è stato
scelto “Push, Account-Based Login” come metodo di Broadcast. La riga blu nella seconda parte
della finestra indica proprio i dati delle credenziali, sotto forma di <user name>:<password>. Si
può notare la password anche nella terza parte della finestra, dove sono mostrati i dati “crudi”
che trasporta il pacchetto. Mi ha lasciato perplesso il fatto che le credenziali, soprattutto la
48
password, non vengano crittografate. In questo modo, infatti, chiunque potrebbe intercettare il
traffico esattamente come ho fatto io ed impossessarsi dei dati necessari all’autenticazione. Se
poi le credenziali intercettate dovessero essere quelle dell’amministratore, il danno sarebbe
ancora più grave.
Ad autenticazione avvenuta il server risponde con un pacchetto che, come si può vedere nella
seconda parte della schermata 7.3, contiene nell’ordine: l’indirizzo IP con cui il pc del Producer
si interfaccia verso la rete internet, il range di porte usato, il protocollo per la trasmissione dei
dati, il nome del file su cui scrivere e, infine, con il valore 1 dell’ultima variabile indica che, in
caso alcuni pacchetti vadano persi o danneggiati, verranno accettate richieste di ritrasmissione.
Figura 7.3
In figura 7.4 ho evidenziato il pacchetto che ho menzionato al paragrafo 6.4, quello che sembra
indicare la mancata ricezione dei dati da parte del server. Inizialmente credevo che la voce
49
“TotalPackets=0” indicasse la mancata ricezione dei pacchetti inviati dal Producer, mentre ho
scoperto che questi pacchetti arrivano anche dopo. Ho dunque ipotizzato che questi frame
segnalassero, con il campo “TotalPackets”, il totale di pacchetti arrivati con errori dal momento
che i parametri successivi indicano il numero di pacchetti persi, il numero di ritrasmissioni, il
numero di pacchetti FEC (Forward Error Correction) ricevuti e richiesti.
Quando il producer non riusciva ad inviare i dati al server, nella situazione descritta al paragrafo
6.4, al server non arrivavano pacchetti UDP del producer. Su 0 pacchetti arrivati, ovviamente, ce
ne saranno 0 corrotti. Ecco spiegato dunque il perché della presenza di questo pacchetto,
nonostante l’assenza del flusso di dati in entrata nel server.
Figura 7.4
Questo è ciò che avviene nel caso in cui Producer e server comunichino tramite il protocollo
UDP. Se usassero il TCP invece, si vedrebbe una schermata come quella nella figura 7.5:
50
Figura 7.5
Come si può notare dalla figura 7.5, il pacchetto HTTP di configurazione inviato dal server
indica che il protocollo stavolta è, ovviamente, il TCP, mentre le richieste di re-invio dei
pacchetti sono disabilitate essendo questa una funzionalità già implementata nel protocollo usato.
Subito dopo l’ok del server, viene effettuato un ulteriore handshake a tre vie per stabilire una
connessione stavolta con la porta 50033, alla quale dovranno essere spediti i dati. Terminato
l’handshake, inizia lo scambio di dati tramite lo scambio di pacchetti e dei relativi
acknowledgment.
51
CAPITOLO 8
COMUNICAZIONE TRA:
REAL PLAYER 9 ED HELIX UNIVERSAL SERVER BASIC 9
Ecco ora cosa succede quando il client, in questo caso Real Player, si collega per ottenere il
servizio di streaming.
Figura 8.1
Dopo il solito handshake a tre vie (si vedano i pacchetti 791, 792 e 793, figura 8.1), inizia la
comunicazione secondo il protocollo RTSP. La prima cosa che fa il client è mandare il comando
“OPTION”. Questo comando ottiene, come risultato, una lista dei comandi RTSP supportati.
Nella figura 8.2 la risposta del server:
52
Figura 8.2
Come si può notare nella seconda parte della finestra in figura 8.2, alla quart’ultima riga, dopo
“Public:” segue la lista di comandi RTSP. Tali comandi sono:
•
OPTIONS: come detto sopra, fornisce una lista dei comandi RTSP supportati.
•
DESCRIBE: torna la descrizione tramite SDP. SDP è un protocollo che descrive le
sessioni multimediali (sessione: connessione logica che deve essere instaurata tra due
unità indirizzabili perchè possano scambiarsi dati). In questo caso fornisce informazioni
quali l’URL del media, il tipo di file e la dimensione.
•
ANNOUNCE: annuncia un evento che riguarda la sessione multimediale, come per
esempio la fine dello stream. Può essere eseguito sia dal server sia dal client.
•
PLAY: fa partire/ripartire il flusso di dati verso il client. Contiene anche il numero di
sequenza che avrà il prossimo pacchetto RTP.
53
•
SETUP: configura il metodo di trasporto dei dati. Le varianti supportate sono:
o RTP/AVP;unicast;client_port=port1-port2
o RTP/AVP;multicast;client_port=port1-port2
o RTP/AVP/TCP;unicast
(AVP = Audio Video Profile)
I parametri di trasporto dello stream devono essere settati soltanto con questo
comando, non con SET_PARAMETER.
•
GET_PARAMETER: richiesta per ottenere dal server il valore di un parametro di
configurazione.
•
SET_PARAMETER: richiesta di modificare il valore di un parametro. L’ideale sarebbe
passare un parametro alla volta a questa funzione in modo da poter capire in caso di
fallimento dove si sia verificato l’errore.
•
TEARDOWN: pone fine alla consegna di dati da parte del server.
Lo schema seguente, tratto dall’RFC2326, riassume i comandi disponibili. In “direction” la
direzione della comunicazione (C = client, S = server). In “object” l’oggetto su cui i comandi
operano (P = presentation, S = stream). In “requirement” indica se il comando è richiesto o può
essere tralasciato.
method
direction
object
requirement
DESCRIBE
C->S
P,S
recommended
ANNOUNCE
C->S, S->C
P,S
optional
GET_PARAMETER
C->S, S->C
P,S
optional
OPTIONS
C->S, S->C
P,S
required
(S->C: optional)
PAUSE
C->S
P,S
recommended
PLAY
C->S
P,S
required
RECORD
C->S
P,S
optional
REDIRECT
S->C
P,S
optional
SETUP
C->S
S
required
SET_PARAMETER
C->S, S->C
P,S
optional
TEARDOWN
C->S
P,S
required
54
Il passo successivo è una richiesta di descrizione della sezione tramite il comando DESCRIBE:
Figura 8.3
Si può notare, all’interno del pacchetto in figura 8.3, informazioni quali l’URL del file
multimediale, il player multimediale e vari dati che riguardano la sessione come la larghezza di
banda, client ID, lingua, etc. Il server risponde con un OK e una serie di attributi che riguardano
la sessione e l’elemento multimediale da trasmettere. Questo pacchetto è mostrato nella figura
8.4:
55
Figura 8.4
In seguito viene inviata una richiesta di SETUP:
56
Figura 8.5
Come si vede dalla quint’ultima riga in figura 8.5, alla voce “Transport:”, la modalità di
trasmissione impostata è RTP/AVP/TCP;unicast;mode=play. Oltre a questo, ci sono anche altre
informazioni che riguardano la sessione, le stesse che sono già state incontrate nei precedenti
pacchetti; dunque, null’altro di rilevante.
Ora viene fatta una richiesta di SET_PARAMETER dal client (figura 8.6) il quale indica al
server, tramite il comando “Subscribe”, quali sono le regole da seguire durante la
comunicazione. Tali regole, contenute nel “rule book” ASM (Adaptive Stream Management),
descrivono al server i tipi di dato trasmessi e lo aiutano a prendere decisioni intelligenti su come
consegnare pacchetti in modo efficiente e sicuro. Tali regole si basano sulle condizioni della
rete: il client analizza lo stato della rete (basandosi su parametri quali larghezza di banda,
57
pacchetti persi, priorità, etc.) e sottoscrive la regola che meglio si adatta. Se le condizioni
cambiano, il client sottoscrive una nuova regola.
Figura 8.6
Il passo successivo è il comando PLAY (figura 8.7). Subito sotto la riga evidenziata, che riporta
il nome del comando, vengono indicati: il nome dello stream (URL), il numero di sequenza che
verrà usato dal prossimo pacchetto RTP (CSeq), dati relativi al client (User-Agent), dati relativi
alla sessione multimediale in corso (Session) ed infine l’intervallo temporale di durata dello
stream (Range). Trattandosi di uno stream live, quest’ultimo parametro sarà settato con tempo di
inizio “0” (ossia istantaneamente), mentre lo stop time non verrà specificato, lasciando un
trattino “-” ad indicare l’indeterminatezza dell’istante di fine del flusso di dati.
58
Figura 8.7
Il frame che segue quello appena descritto (si veda sempre la figura 8.7) porta l’”OK” del server.
Da questo momento inizia il flusso di dati tra server e client, lo streaming vero e proprio. Mostro
ora nel dettaglio come avviene questo scambio di dati.
Il server, per evitare di incorrere in problemi con i firewall o per altre circostanze dovute alla
rete, incapsula i pacchetti RTSP in pacchetti TCP. Questa tecnica viene usata anche dal server da
me installato. Osservando l’immagine 8.8 infatti, si può vedere che il client riceve pacchetti TCP
con l’etichetta “Interleaved” che sta ad indicare appunto l’incapsulamento di un protocollo nel
TCP. Nella seconda parte della finestra di Ethereal, dove si trova la descrizione del pacchetto,
sono indicati due frame RTSP. A volte se ne trovano due insieme, a volte uno soltanto. L’inizio
del frame RTSP è indicato dal campo Magic che ha il valore esadecimale 24, corrispondente al
simbolo del dollaro in ASCII (come si vede anche dalla rappresentazione cruda dei dati nella
59
terza parte della finestra). Dal documento RFC 2326 (Request for Comments, documenti ufficiali
numerati che descrivono vari aspetti tecnici di Internet), apprendo inoltre che anche i pacchetti
RTCP possono essere incapsulati nel tunnel TCP dal server per la sincronizzazione del traffico
RTP.
Figura 8.8
Oltre a questi frame se ne vedono altri, che viaggiano sempre dal server al client, di tipo RTPS
con etichetta “Continuation” (con riferimento alla figura 8.9).
60
Figura 8.9
61
CAPITOLO 9
TEST, RISULTATI, CONFRONTI
9.1: TEST IN LOCALE
Quando il server era pronto per inviare stream live sulla rete, ho fatto alcuni test per verificare il
ritardo dovuto alla trasmissione delle immagini via cavo. Cavo inteso come cavo di rete classe 5,
100BaseTX.
Già osservando le due schermate del producer si poteva notare un leggerissimo ritardo
nell’immagine di destra, dovuto al tempo richiesto per la codifica delle immagini. Si trattava
comunque di una frazione di secondo. Decisamente più consistente era invece il ritardo che si
notava aprendo il Real Player nello stesso schermo ed affiancando le tre immagini. Il tempo di
latenza variava tra i 5 e i 6 secondi con picchi di 10-11 secondi, molto probabilmente a causa
della congestione della rete. Il ritardo medio era comunque intorno ai 6 secondi.
9.2:TEST CON CLIENTE
Abbiamo chiesto ad un cliente da Vicenza, dotato di una connessione ADSL a 1.2 Mbps, di
collegarsi al server Helix per una prova. Non ha avuto difficoltà nel visualizzare lo stream, anzi,
la qualità era ottima (il broadcast aveva un bitrate di 450 Kbps). Abbiamo effettuato un test per
studiare il ritardo: da Vicenza veniva inviato un messaggio istantaneo via chat che leggevo ad
alta voce appena veniva visualizzato sul mio monitor. Inizialmente il ritardo misurava addirittura
15 secondi ma poi mi è venuto in mente che la chat poteva introdurre un ulteriore ritardo dovuto
alla consegna del messaggio. Così abbiamo ideato un metodo empirico per misurarlo: dall’altro
capo della comunicazione mi veniva inviato un messaggio consistente in una cifra. Io, appena
ricevevo il messaggio, leggevo la cifra ad alta voce e, contemporaneamente, rispondevo con un
messaggio identico (ossia la stessa cifra). Il tempo necessario per rispondere al messaggio,
trattandosi di inviare un solo carattere, era di un secondo. Al ritardo doveva quindi essere
sottratta la metà del tempo necessario al messaggio per tornare al mittente. Il ritardo, così
misurato, si abbassava fino a 11-12 secondi circa.
62
9.3: TEST CON ADSL PRIVATA
Ho condotto un test anche connettendo un pc con Real Player al server pubblico. Anche in
questo caso l’ADSL usata aveva una larghezza di banda pari a 1.2 Mbps e, come enl caso
precedente, il broadcasting funzionava a 450 Kbps mostrando audio e video di ottima qualità.
Test ripetuti, come quello descritto sopra, hanno confermato una stima di 10 secondi circa di
ritardo.
9.4: DIMOSTRAZIONE CON UN POTENZIALE CLIENTE
Ho chiamato un potenziale cliente (la ditta “Tata”) per fargli una dimostrazione chiedendogli di
collegarsi dalla loro sede. Anche loro, come i clienti di Vicenza, erano collegati con l’ADSL ,
solo con una larghezza di banda quasi doppia (2 Mbps). Nonostante l’alta velocità del loro
collegamento, ricevevano lo stream ad un rate di appena 16 Kbps con una qualità audio e video
assai scadente. Il giorno dopo ho riprovato facendoli collegare la mattina presto, prima che gli
impiegati arrivassero ed accendessero i loro computer. Temevo che il problema fosse dovuto alla
congestione della loro rete, ma nemmeno stavolta riuscivano a vedere nulla, sebbene il log del
server mi desse la conferma del collegamento. Vista la capacità della loro connessione non
potevano ricevere dati più lentamente di un modem 56K. Così ho fatto fare loro un test che
misura la banda di cui dispongono: basta digitare su Google “bandwidth” o “speedometer” o
simili per trovare un qualunque software per la misurazione della velocità di connessione. Sono
strumenti poco affidabili in quanto di scarsa precisione, ma utili per avere una stima
approssimativa. Dopo che il test era stato condotto ripetute volte, ho notato con grande sorpresa
che i risultati erano sempre eccellenti. A questo punto ho supposto che la causa della disfunzione
fosse il loro firewall che ostacolava il traffico. Purtroppo, a causa dell’avvento delle vacanze
estive e della fine del periodo di tirocinio, non ho potuto verificare la mia ipotesi. Resto tuttavia
convinto, visti anche i risultati degli altri test, che il problema risiedeva nella loro rete e non nella
nostra.
63
9.5: CONCLUSIONI SULL’ESITO DEI TEST
Cosa ricavare dai test sopra descritti? Il ritardo può sembrare consistente, ma per una
comunicazione live di ottima qualità è il prezzo da pagare. Con uno stream a 450 Kbps le
immagini sono molto nitide e l’audio piacevolmente chiaro e comprensibile. Sarebbe stato
interessante studiare i ritardi anche con altri rate ma, per motivi di tempo, non è stato possibile
condurre un’indagine accurata in questo frangente. Tuttavia prevedo un abbassamento dei ritardi
proporzionale alla diminuzione del rate di trasmissione. L’abbassamento dei ritardi non dovrebbe
essere lineare poiché il ritardo introdotto dalla rete è impossibile da eliminare ed è quello che
incide in maniera maggiore (basti ricordare che si passa dai 5-6 secondi misurati con la LAN ai
10-12 secondi rilevati con i test dall’esterno).
64
CONCLUSIONI
In questa interessante esperienza ho approntato un server in grado di trasmettere file
multimediali sulla rete globale, accessibili a tutti da qualunque angolo del pianeta dotato di un
collegamento ad internet. Ho approntato un sistema in grado di convertire qualunque formato di
file multimediale di tipo audio/video in breve tempo e trasmetterlo al server, pronto per essere
visualizzato su richiesta. Ho costruito le basi per un sistema di videoconferenza sfruttando le
potenzialità di codifica di Helix Producer Basic 9 e le capacità del server Helix Universal Server
Basic 9, che in ambiente Linux dà il meglio di se riuscendo a gestire anche migliaia di
connessioni, come dimostrato dal test della KeyLabs. Il tutto arricchito da client embedded che
permettono di avere una vera e propria TV digitale sul monitor del proprio computer
semplicemente installando un player gratuito da pochi megabyte (sto parlando ovviamente di
Real Player).
Il tirocinio mi ha permesso di incrementare la mia conoscenza e manualità con il sistema
operativo Linux, mi ha permesso di apprendere molte conoscenze di tipo tecnico sia sulle reti di
calcolatori che sui software utilizzati. Mi ha dato modo di applicare ciò che ho imparato in questi
tre anni di università con un processo di trasformazione delle mie conoscenze teoriche in un
prodotto tangibile e, soprattutto, funzionante.
Lo streaming è un argomento affascinante che ho studiato con molto interesse, contribuendo ad
alimentare la mia passione per l’informatica ed in particolare per le tecnologie nel campo delle
reti di calcolatori e della programmazione. Questa esperienza extra-scolastica è stata un ottimo
banco di prova che mi ha permesso di conoscere meglio il mondo del lavoro, procurandomi
altresì l’occasione di mettermi in mostra nel campo lavorativo.
65
GLOSSARIO
SIMBOLI / ACRONIMI
•
LRU: Least Recently Used
•
DNS: Domain Name System. È un database distribuito che esegue la trasformazione tra
nomi simbolici (nomi a dominio) e indirizzi IP numerici dei computer.
•
RDP: RealNetworks Data Transport, usato per lo streaming di Real Media su RTSP
•
RTP (Real Time transfer Protocol)
Supporta il trasferimento real-time dei dati. Tipicamente si appoggia sul protocollo UDP
(User Datagram Protocol) un protocollo non orientato alla connessione di livello 4
(ISO/OSI).
È composto dalla parte di trasporto dati, RTP e la parte di monitoraggio RTCP (Real
Time Control Protocol). Mediante il protocollo RTCP l’applicazione viene informata
sulle statistiche della comunicazione, come la percentuale di pacchetti persi, il jitter, ed i
pacchetti ai quali le informazioni date si riferiscono.
Il protocollo RTP è descritto in [RFC1889].
•
RTSP (Real Time Streaming Protocol)
È un protocollo di controllo che si basa su TCP per comunicare e permette all’utente di
richiedere dei flussi (streams) a uno o più server, richiedere uno specifico tipo di
trasporto e destinazione dei dati, richiedere informazioni sui dati, iniziare, fermare,
sospendere l’erogazione dei dati, accedere in maniera random a varie porzioni dei dati
(un po’ come il telecomando di un videoregistratore).
Il protocollo RTSP è descritto in [RFC2326].
•
RFC (Request For Comments): documento molto utilizzato in ambiente Internet per
promulgare standard ufficiali, diffondere informazioni di ricerca, inchieste, osservazioni
e idee. Viene utilizzato anche per proporre nuove specifiche per le quali, appunto, si
richiedono commenti e giudizi. Una volta che il processo di discussione è terminato
l’RFC diventa il testo finale dello standard concordato. Tutte le RFC sono disponibili
66
presso il Network Information Center gestito dal Dipartimento della Difesa
ftp://nic.ddn.mil e presso i singoli NIC continentali tra cui ftp://ftp.rs.internic.net,
ftp://ftp.ripe.net, ftp://erasmus.terena.nl, ftp://ftp.nis.garr.it
•
DoS (Denial of Service): tipo di attacco a sistemi di computer e reti che ha lo scopo di
impedire l’accesso alle informazioni o di interrompere l’utilizzo dei sistemi. Gli attacchi
di tipo denial of service spesso intasano le reti con un tale traffico che gli utenti
autorizzati non sono più in grado di utilizzarle, oppure rallentano la velocità delle reti al
punto di rendere praticamente impossibili le trasmissioni autorizzate.
67
BIBLIOGRAFIA
•
http://service.real.com/help/library/guides/helixuniversalserver/realsrvr.htm
•
http://service.real.com/help/library/guides/helixproducer/Producer.htm
•
http://www.helixcommunity.org
•
http://www.realnetworks.com
•
http://www.axis.com/techsup/cam_servers/dev/cam_rtsp_api.htm
•
http://www.beta.it
•
http://www.ietf.org/internet-drafts/draft-ietf-mmusic-rtsp-announce01.txt
•
http://www.faqs.org/rfcs/rfc2326.html
•
http://www.cs.columbia.edu/~hgs/rtp/
•
http://www.qilinux.it
•
http://www.videolan.org/vlc/
•
http://www.chatexpert.it/
•
http://www.yle.fi/mikaeli/info/tutkimukset/wang/
68

Documenti analoghi

Corso di Applicazioni Telematiche

Corso di Applicazioni Telematiche Protocolli • Innumerevoli soluzioni per lo streaming • Approcci diversi, scarsa interoperabilità • Spesso necessari client/server dello stesso produttore

Dettagli