Pour mettre en place cette configuration, j'utiliserai icecast2 et ices2 disponibles sous ubuntu/debian.




Environnement

Je vais utiliser 2 machines physiques différentes afin de "coller" un peu à la réalité: etch28 sera le serveur icecast tandis que mon desktop p733 lancera ices2 qui "alimentera" en flux audio le serveur icecast. Le flux audio pourra être au choix une playlist ou un microphone.



1) Le générateur de flux audio:

root@p733:~# uname -a
Linux p733 2.6.28.7 #2 SMP Sat Feb 21 09:09:49 CET 2009 x86_64 GNU/Linux

root@p733:~# cat /etc/issue
Ubuntu 8.04.2 \n \l

root@p733:~# free
             total       used       free     shared    buffers     cached
Mem:       4047200    2474720    1572480          0     171356    1482188
-/+ buffers/cache:     821176    3226024
Swap:      3903784          0    3903784

root@p733:~# cat /proc/cpuinfo | egrep 'processor|model\ name'
processor    : 0
model name    : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
processor    : 1
model name    : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
processor    : 2
model name    : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
processor    : 3
model name    : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz

root@p733:~# ip addr ls br0
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
    link/ether 00:19:db:66:e8:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.22/24 brd 192.168.0.255 scope global br0
    inet6 fe80::219:dbff:fe66:e87b/64 scope link
       valid_lft forever preferred_lft forever

root@p733:/# lspci && lsmod | grep snd



2) Le serveur icecast2

etch28:~# cat /etc/issue
Debian GNU/Linux 5.0 \n \l

etch28:~# uname -a
Linux etch28 2.6.26-1-686-bigmem #1 SMP Sat Jan 10 19:13:22 UTC 2009 i686 GNU/Linux

etch28:~# free
             total       used       free     shared    buffers     cached
Mem:       1035940     234984     800956          0      28720     169924
-/+ buffers/cache:      36340     999600
Swap:      3903784          0    3903784

etch28:~# cat /proc/cpuinfo | egrep 'processor|model\ name'
processor    : 0
model name    : AMD Athlon(tm) XP 2800+





Configuration du serveur icecast2

etch28:~# apt-get install icecast2

etch28:~# cat /etc/default/icecast2 |egrep -v '^#|^$'

CONFIGFILE="/etc/icecast2/icecast.xml"
USERID=icecast2
GROUPID=icecast
ENABLE=true

etch28:~# cat /etc/icecast2/icecast.xml






Configuration du générateur de flux

root@p733:/# apt-get install ices2

root@p733:~# dpkg -L ices2



Comme on le constate ices2 n'installe rien dans les scripts de démarrage pas plus que dans une éventuelle configuration.
Pour rester dans la logique d'install des paquets on va donc créer différents répertoires:

root@p733:/# mkdir -p /var/log/ices2 /etc/ices2 /etc/ices2/music

Puis récupérer les fichiers d'exemples pour créer des fichiers de config.

root@p733:/etc/ices2# cp /usr/share/doc/ices2/examples/ices-alsa.xml .
root@p733:/etc/ices2# cp /usr/share/doc/ices2/examples/ices-playlist.xml .

Création d'un script de démarrage:

root@p733:/etc/init.d# cat ices2




root@p733:/etc/ices2# cat ices-playlist.xml




Ices2 ne sait, à priori, générer que des playlists à base de fichiers .ogg. Si vous ne disposez que de mp3, il faudra les convertir avec l'outil: dir2ogg.

root@p733:/etc/ices2# apt-cache search dir2ogg
dir2ogg - audio file converter into ogg-vorbis format

root@p733:/etc/ices2# apt-get install dir2ogg




root@p733:/etc/ices2# cat playlist.txt

/home/pme/Public/sdc7/Mp3/mp3/mi2.ogg
/home/pme/Public/sdc7/Mp3/mp3/MichelPolnareff-Lipstick.ogg
/home/pme/Public/sdc7/Mp3/mp3/U2-WalkOn.ogg

(Je précise pour les défenseurs d'HADOPI que je possède les originaux et que cette playlist n'est utilisée qu'à des fins de tests !)



Test avec une playlist

root@p733:/etc/ices2# ../init.d/ices2 startpl
Starting ices2: ices2.

Je vérifie :

root@p733:/etc/ices2# ps ax|grep ice

13200 ?        Sl     2:49 /usr/bin/ices2 /etc/ices2/ices-playlist.xml



root@p733:/var/log/ices2# tail ices.log

[2009-03-19  18:15:51] INFO ices-core/main IceS 2.0.1 started...
[2009-03-19  18:15:51] INFO signals/signal_usr1_handler Metadata update requested
[2009-03-19  18:15:51] INFO playlist-basic/playlist_basic_get_next_filename Loading playlist from file "/etc/ices2/playlist.txt"
[2009-03-19  18:15:51] INFO playlist-builtin/playlist_read Currently playing "/home/pme/Public/sdc7/Mp3/mp3/mi2.ogg"
[2009-03-19  18:15:51] INFO stream/ices_instance_stream Connected to server: 192.168.0.4:8000/etch28.ogg
[2009-03-19  18:15:51] DBUG reencode/reencode_page Reinitialising reencoder for new logical stream
[2009-03-19  18:15:51] INFO encode/encode_initialise Encoder initialising in VBR mode: 2 channels, 44100 Hz, nominal 64000

Ices2 est bien démarré et commence à jouer en boucle la playlist. J'accède ensuite à l'url du serveur icecast depuis mon desktop.

etch28:/var/log/icecast2# tail access.log

192.168.0.22 - - [19/Mar/2009:18:25:50 +0100] "GET /etch28.ogg.m3u HTTP/1.1" 200 86 "http://192.168.0.4:8000/admin/listmounts.xsl" "Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.7) Gecko/2009030423 Ubuntu/8.04 (hardy) Firefox/3.0.7" 0
192.168.0.22 - - [19/Mar/2009:18:26:40 +0100] "GET /etch28.ogg HTTP/1.0" 200 381693 "-" "xine/1.1.11.1" 50




Test avec un microphone


root@p733:/etc/ices2# cat ices-alsa.xml



Toute l'astuce est sur la ligne: <param name="device">hw:0,0</param> qui sélectionne le périphérique audio d'entrée. J'arrête donc la diffusion de la playlist et je lance la diffusion en live:

root@p733:/var/log/ices2# /etc/init.d/ices2 stop
root@p733:/var/log/ices2# /etc/init.d/ices2 startmic

Un coup d'oeil aux logs me confirme que tout se passe bien.

root@p733:/var/log/ices2# tail ices.log


[2009-03-19  19:31:51] INFO ices-core/main IceS 2.0.1 started...
[2009-03-19  19:31:51] INFO input-alsa/alsa_open_module Opened audio device hw:0,0
[2009-03-19  19:31:51] INFO input-alsa/alsa_open_module using 2 channel(s), 44100 Hz, buffer 371 ms
[2009-03-19  19:31:51] INFO input-alsa/alsa_open_module Starting metadata update thread
[2009-03-19  19:31:51] INFO signals/signal_usr1_handler Metadata update requested
[2009-03-19  19:31:51] DBUG metadata/metadata_thread_signal meta thread wakeup
[2009-03-19  19:31:51] INFO audio/downmix_initialise Enabling stereo->mono downmixing
[2009-03-19  19:31:51] WARN metadata/metadata_thread_signal Failed to open file "test" for metadata update: No such file or directory
[2009-03-19  19:31:51] INFO audio/resample_initialise Initialised resampler for 1 channels, from 44100 Hz to 22050 Hz
[2009-03-19  19:31:51] INFO encode/encode_initialise Encoder initialising in VBR mode: 1 channel(s), 22050 Hz, quality 0.000000
[2009-03-19  19:31:51] INFO stream/ices_instance_stream Connected to server: 192.168.0.4:8000/livemic.ogg

De la même façon que pour la plylist, je me connecte sur http://192.168.0.4:8000/livemic.ogg.m3u et j'entends bien ce que je suis en train de dire dans le microphone avec bien sûr un léger décalage (environ 20 secondes tout de même).

Pour y accéder depuis l'extérieur, il faudra simplement configurer le nat de votre routeur et rediriger le port 8000 (si c'est celui que vous utilisez dans la config) sur l'ip de votre serveur icecast.

De plus il est bien évident que vous avez intérêt à modifier le mot de passe de l'admin (hackme) du serveur icecast.


Autre méthode:

http://savonet.sourceforge.net/index.html
http://www.generation-linux.fr/index.php?post/2009/01/17/Mise-en-place-d-une-webradio-avec-Icecast-et-Liquidsoap