[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


233. NetStreamer: audio attraverso la rete

Ci sono tanti modi di gestire l'audio attraverso la rete. NetStreamer è uno di quelli che usano la tecnica più semplice, anche se non è necessariamente la più efficace: una connessione TCP normale dove ogni nodo intrattiene una sessione indipendente. Si intende il limite di questo nel fatto che ogni utente che si collega aggiunge del carico alla rete. In pratica, NetStreamer può andare bene solo in reti locali poco popolate, oppure con particolari doti di velocità.

233.1 Schema di funzionamento

Lo schema di funzionamento di NetStreamer si basa su un demone, `NrServer', che comunque deve essere avviato esplicitamente sullo sfondo, il quale svolge il ruolo di ripetitore nei confronti di uno o più clienti di trasmissione. Successivamente, gli utenti che vogliono collegarsi al ripetitore per ascoltare ciò che viene trasmesso, utilizzano altri clienti specifici per la ricezione. Come accennato le connessioni sono di tipo TCP e di solito si utilizza la porta 8888.

               +-------------+             +-------------+
	       |   Servente  |------------>| Cliente per |
	+----->| NetStreamer |-------+     | l'ascolto   |
        |      +-------------+       |     +-------------+
        |                  |         V
        |                  |       +-------------+
+--------------+           |       | Cliente per |
|  Cliente di  |           |       | l'ascolto   |
| trasmissione |           |       +-------------+
+--------------+           V
                       +-------------+
                       | Cliente per |
                       | l'ascolto   |
                       +-------------+

Figura 233.1: Idea generale del funzionamento di NetStreamer che si basa su un servente in funzione di ripetitore per la rete.

Un solo servente NetStreamer può gestire più sorgenti audio (provenienti da altrettanti clienti per la trasmissione), e in questo modo, i clienti hanno la possibilità di scegliere su quale trasmissione «sintonizzarsi». In base a questo principio, NetStreamer simula la gestione di una stazione radio UHF che opera sulle frequenze tra 88 MHz e 108 MHz: i clienti di trasmissione, quando si collegano definiscono il nome della propria «stazione radio», e la «frequenza», quest'ultima attraverso un numero che rappresenta le decine di MHz; i clienti per la ricezione si sintonizzano utilizzando come riferimento il valore della frequenza utilizzata dalle stazioni di trasmissione.

È importante osservare che la ricezione delle trasmissioni attraverso diversi clienti di ricezione, non può essere sincronizzata. Ciò accade a causa dell'esigenza di accumulare una memoria tampone necessaria a garantire la continuità nel flusso della riproduzione audio.

233.2 Attivazione di un ripetitore

Il ripetitore è quindi il servente di NetStreamer. Nella stessa rete possono essere predisposti diversi serventi indipendenti, anche se questo non dovrebbe essere di alcuna utilità. Tutto si limita all'avvio di `NrServer' con l'indicazione della porta TCP da utilizzare per le comunicazioni:

NrServer :8888 &

In alternativa, è possibile indicare anche il nome del nodo, per uniformità con la notazione utilizzata dai clienti:

NrServer localhost:8888 &

Si osservi il fatto che `NrServer' deve essere messo esplicitamente in funzione sullo sfondo.

233.3 Attivazione di una trasmittente

Il cliente che trasmette al ripetitore può essere collocato indipendentemente nello stesso elaboratore del ripetitore o in un altro nodo. Naturalmente, collocandolo nello stesso elaboratore si evita di intasare ulteriormente la rete locale con questa connessione.

Si tratta di utilizzare `NrTransmitter', il quale deve avere una fonte di audio digitale, indicando in particolare il nodo del ripetitore, la porta di comunicazione, il nome della stazione radio virtuale e la frequenza virtuale di trasmissione.

Si distinguono tre situazioni importanti in funzione del modo in cui viene fornita l'informazione audio digitale al programma `NrTransmitter': i file di dispositivi standard, lo standard input o una serie di file di registrazioni precedenti, realizzati sempre con NetStreamer.

233.3.1 Audio digitale proveniente dai dispositivi standard

Quando si dispone di una scheda audio, quello che questa è in grado di catturare, ovvero il canale audio indicato per la registrazione, può essere letto dai soliti file di dispositivo già mostrati più volte. Per fare in modo che un cliente di trasmissione NetStreamer prenda questa fonte, si utilizza la sintassi seguente:

NrTransmitter Device <campionamento> <frequenza-virtuale> <nome-stazione> [<host>]:<porta>

La parola chiave `Device' posta come primo argomento serve proprio a specificare questo comportamento del cliente di trasmissione. La frequenza di campionamento è un numero che si riferisce a kHz, e comunque può essere scelto solo tra 8 e 16. La frequenza virtuale è un numero che esprime le decine di MHz a cui si vuole simulare la trasmissione radio.

A titolo di esempio, volendo trasmettere quello che viene dalla scheda audio con un campionamento di 16 kHz utilizzando la frequenza virtuale di 88,5 per la stazione radio denominata «Stazione 1», che utilizza il ripetitore `dinkel.brot.dg' alla solita porta 8888, si può utilizzare il comando seguente:

NrTransmitter Device 16 885 "Stazione 1" dinkel.brot.dg:8888 &

In alternativa, se il ripetitore si trova nello stesso elaboratore, si poteva fare riferimento al nodo `localhost', abbreviando eventualmente nel modo seguente:

NrTransmitter Device 16 885 "Stazione 1" :8888 &

233.3.2 Audio digitale proveniente dallo standard input

Quando l'audio viene fornito a `NrTransmitter' attraverso lo standard input, questo deve essere in un formato PCM, ovvero senza intestazione particolare, praticamente quello che genera `mpg123'.

mpg123 -s <file-mp3> | NrTransmitter StdIn <campionamento> <frequenza-virtuale> <nome-stazione> [<host>]:<porta> <campionamento-in-ingresso>

Rispetto alla sintassi vista per l'utilizzo dei dispositivi standard, in questo caso il primo argomento è la parola chiave `StdIn', e in coda si aggiunge un numero corrispondente alla frequenza di campionamento con cui arrivano i dati in ingresso. I due esempi seguenti sono equivalenti a quanto già visto in precedenza.

mpg123 -s mio_file.mp3 | NrTransmitter Device 16 885 "Stazione 1" (segue)
  dinkel.brot.dg:8888 44 &

mpg123 -s mio_file.mp3 | NrTransmitter Device 16 885 "Stazione 1" :8888 44 &

233.3.3 Audio digitale contenuto all'interno di «nastri»

Attraverso NetStreamer è possibile registrare dei file con un formato audio digitale speciale, che nella logica di questo applicativo sono dei nastri, esattamente come si farebbe in una stazione radio. Verrà mostrato in seguito come realizzare tali file; per il momento si tenga presente che devono avere l'estensione `.tape'.

NrTransmitter Directory <campionamento> <frequenza-virtuale> <nome-stazione> [<host>]:<porta> <directory-dei-nastri>

Rispetto a quanto visto in precedenza, si osserva che il primo argomento è la parola chiave `Directory', e in coda si nota l'indicazione di una directory all'interno della quale `NrTransmitter' va a cercare i file che terminano con l'estensione `.tape'. Questi file vengono scelti con una sequenza casuale e trasmessi in continuazione. Vengono riproposti i due esempi già visti in precedenza; in particolare, si fa riferimento ai file contenuti probabilmente in un disco montato per l'occasione: `/mnt/musica'.

NrTransmitter Directory 16 885 "Stazione 1" dinkel.brot.dg:8888 /mnt/musica &

NrTransmitter Directory 16 885 "Stazione 1" :8888 /mnt/musica &

233.4 Ricezione di una stazione radio virtuale

La ricezione è un procedimento più semplice; tutto quello che serve è indicare la frequenza virtuale e il ripetitore a cui ci si vuole collegare:

NrReceiver <frequenza-virtuale> [<host>]:<porta>

Il risultato viene passato ai file di dispositivo per l'input dell'audio digitale. Per esempio, per ascoltare la trasmissione proveniente dal ripetitore collocato nel nodo `dinkel.brot.dg' (alla solita porta) alla frequenza virtuale di 88,5 MHz, si può usare il comando seguente:

NrReceiver 885 dinkel.brot.dg:8888

In alternativa a `NrReceiver' si può utilizzare `NrRecFrontend' che come suggerisce il nome è un programma frontale, e precisamente per X. In tal caso si indica solo il ripetitore a cui collegarsi, perché la frequenza è specificata attraverso il pannello di questo programma.

NrRecFrontend [<host>]:<porta>

La figura 233.2 mostra come si può presentare `NrRecFrontend' quando è collegato alla stazione radio virtuale vista tante volte in questi esempi.

184.jpg

Figura 233.2: Pannello frontale del ricevitore di NetStreamer.

Come si può osservare, appare anche il pulsante >record<. Questo permette di iniziare una registrazione in un file `.tape' di NetStreamer. Per la precisione, si registra la trasmissione nel file `~/default.tape'. Questo file può essere poi rinominato e utilizzato per le trasmissioni.

233.5 Creazione di nastri

Oltre alla possibilità di registrare dei file `.tape' per NetStreamer attraverso il pannello di un ricevitore `NrRecFrontend', si può usare il programma `NrEncoder' che è in grado di generare tali file a partire da un formato PCM.

NrEncoder <campionamento-in-ingresso> <campionamento-in-uscita>

Lo schema sintattico mostra che gli unici argomenti sono il campionamento in ingresso e quello in uscita espressi in kHz. L'input viene fornito attraverso lo standard input e l'output si ottiene dallo standard output. Per esempio, con l'aiuto di `mpg123' si può convertire un file MP3:

mpg123 -s mio_file.mp3 | NrEncoder 44 16 > mio_file.tape

Il formato di questi file di NetStreamer è precisamente: CCITT ADPCM.

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]