Sei in Home page » Documentazione

Soluzione integrata di telefonia su internet a banda larga.
Cerca su questo sito:  

Vuoi essere aggiornato in tempo reale su tutto quello che mi succede giorno per giorno?
Visita il mio nuovo blog

Streaming Howto

Abstract:

Breve guida allo streaming audio video. Questa guida è stata usata per realizzare lo streaming durante il LinuxDay 2004.

Questo documento è work in progress e in alcune cose sono andato a memoria. Fatemi sapere se trovate problemi.

Introduzione

Per lo streaming è stata usata la piattaforma ffmpeg/ffserver

Perche?

  1. E' OpenSource

  2. Supporta svariati formati in input e output

  3. Supporta praticamente tutti i client da Mplayer a Windows Media Player

  4. Supporta il Video4Linux e quindi si adatta a praticamente tutte le schede di acquisizione video

N.B. Lo streaming fatto con VideoLan funziona solo se il client e' VideoLan e ha un numero limitattissimissimissimo di schede di acquisizione supportate.

Le prove sono state fatte su piattaforma RedHat9, Fedora Core 1, Mandrake 10.0, Slackware 10 e alla fine si e' deciso di usare la Slackware 10 perchè, per esempio, sulla macchina di prova (Pentium II 800), in una situazione in cui la macchina faceva da encoder, server di streaming e un client in ascolto, su Mandrake il carico della macchina era di 1.00 mentre su Slackware, nelle stesse condizioni, e' risultato di 0.60.

Implementazione del sistema.

L'idea era quella di distribuire il carico su due macchine, una (Pentium II 800), con scheda di acquisizione e ffmpeg che fornisse il flusso video, l'altra, un Pentium IV 2600, con sopra ffserver, che raccogliesse il flusso video per ridistribuirlo ai vari client che ne avessero fatto richiesta. Purtroppo, in tutte le prove fatte, tranne in un caso, con due macchine Mandrake, l'ffserver andava in segfault alla prima connessione di un client, per cui, alla fine si è deciso di mettere tutto sul Pentium IV e di far girare ffmpeg e ffserver sulla stessa macchina, che comunque, da prove effettuate, rimane sempre sotto un load di 0.4.

Configurazione

Per prima cosa è stato necessario far funzionare la scheda di acquisizione video che, nel nostro caso, è stata una Hauppauge WinTV con chipset BT878.

In tutti i casi, il modulo bttv.o dei vari kernel >2.4.24 e 2.6.9 hanno riconosciuto correttamente la scheda in questione attivando l'interfaccia /dev/video0. In Mandrake e' stato necessario mettere il modprobe bttv nel modules.conf a mano. In Slackware il demone hotplug ha invece rilevato correttamente e automaticamente la scheda. E' stato pero', in questo caso, necessario mettere nella blacklist di hotplug il modulo audio della bttv che altrimenti andava in conflitto con la scheda di rete realmente presente nel server.

Per impostare poi la scheda WinTV (selezionare l'ingresso corretto, vedere cosa si vedeva, etc.) si è scaricato e installato XawTV e con questo si seleziona la sorgente da cui far leggere il flusso video, una volta impostata, si puo' anche chiudere il programma. E' possibile tenere aperto XawTV contemporaneamente all'acquisizione di ffmpeg, non vanno in conflitto e nessuno dei due fa il lock de device, ah, potenza di Linux :-)

XawTV e' stato compilato e installato con questa righe:

# ./configure ????
# make; make install

 

Prima di scaricare ffmpeg, una nota. Alcune distribuzione, tipo la Mandrake, possiedono già un pacchetto per l'ffmpeg. Non fidatevi, ma scaricate e ricompilate. Per esempio, il pacchetto standard di Mandrake non ha attivato il supporto per l'audio mp3 e quindi solo mp2 con conseguente incompatibilità con alcuni client.

Prima di scaricare ffmpeg, per avere il supporto audio MP3, scarichiamo e installiamo le librerie mp3lame.

# wget ttp://puzzle.dl.sourceforge.net/sourceforge/lame/lame-3.96.1.tar.gz
# tar zxvf lame-3.96.1.tar.gz
# cd lame-3.96.1
# ./configure --prefix=/usr
# make
# make install

 

Ora possiamo scaricare e installare ffmpeg con il supporto mp3. Ho provato, a causa del sigfault di cui accennavo sopra, quasi tutte le release, comprese le CVS, ma la più stabile è risultata la 0.4.8, per cui consiglio ed ho utilizzato quella

# wget http://puzzle.dl.sourceforge.net/sourceforge/ffmpeg/ffmpeg-0.4.8.tar.gz
# tar zxvf ffmpeg-0.4.8.tar.gz
# cd ffmpeg-0.4.8
# ./configure --enable-mp3lame --prefix=/usr --enable-pthreads
# make
# make install

 

Ok, ora bisogna creare il file di configurazione in /etc/ffserver.conf.

Questo è quello da noi utilizzato [commentare le varie opzioni][questo non è quello definitivo][mettere i commenti in modo più "carino"]

  • FileMaxSize 10G di modo da avere il file completo dell'evento per postprocessing e avere gli eventi online anche in futuro, magari dopo averli separati in più file, uno per ogni evento.

  • Feed in avi e asf perchè Windows Media Player non capisce lo streaming avi e quindi, per lui ci vuole un feed a posta. Gli altri leggono tutti, con il codec corretto, il feed asf, ma ci sembrava brutto fare il LinuxDay con uno streaming basato solo sul codec MS Mpeg4 :-)

Port 80
BindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 2000
CustomLog -
NoDaemon

<Feed ld2004.ffm>
File /tmp/ld2004.ffm
FileMaxSize 10G
# Only allow connections from localhost to the feed
ACL allow 127.0.0.1
</Feed>

<Stream ld2004_high.avi>
Feed ld2004.ffm
Format avi
AudioBitRate 64
AudioChannels 1
VideoBitRate 256
VideoFrameRate 15
VideoSize cif
AudioCodec mp3
VideoCodec mpeg4
VideoQMin 3
VideoQMax 31
VideoHighQuality
VideoGopSize 30
</Stream>

<Stream ld2004_low.avi>
Feed ld2004.ffm
Format avi
AudioBitRate 32
AudioChannels 1
VideoBitRate 32
VideoFrameRate 15
VideoSize qcif
AudioCodec mp3
VideoCodec mpeg4
VideoQMin 3
VideoQMax 31
VideoHighQuality
VideoGopSize 30
</Stream>

<Stream ld2004_low.asf>
Feed ld2004.ffm
Format asf
AudioBitRate 32
VideoFrameRate 15
VideoSize qcif
VideoBitRate 32
VideoGopSize 30
VideoCodec msmpeg4v2
AudioCodec mp3
VideoHighQuality
StartSendOnKey
</Stream>

<Stream ld2004_high.asf>
Feed ld2004.ffm
Format asf
AudioBitRate 64
VideoFrameRate 15
VideoSize cif
VideoBitRate 256
VideoGopSize 30
VideoCodec msmpeg4v2
AudioCodec mp3
VideoHighQuality
StartSendOnKey
</Stream>

##################################################################
# Special streams

# Server status

<Stream stat.html>
Format status
ACL allow localhost
</Stream>

# Redirect index.html to the appropriate site

<Redirect index.html>
URL http://www.telug.it/linuxday-2004/streaming.php
</Redirect>

Ok. Abbiamo finito.

Possiamo far partire il server

# ffserver &

e iniziare lo streaming

# ffmpeg -vd /dev/video0 http://localhost/ld2004.ffm




 Copyright© 1997-2006 Emiliano Bruni Online dal 16/08/1998 con visitatori Scrivimi all'indirizzo: