Le but de cette page est de vous aider à mettre en place une “radio internet” qui diffuse les morceaux de musique d'une liste de lecture au format ogg
Insérer une note à propos du format MP3 sur Fedora ici? — calimarno
Installons icecast
qui est le serveur de streaming audio. Vous avez le choix d'installer un paquet binaire précompilé ou de le compiler vous-mêmes :
.rpm
(http://www.icecast.org/download.php) et installez-le avec la commande :rpm -i icecast-2.0.0-0.fdr.1.1.i386.rpm
tar xvfz icecast-2.2.0.tar.gz cd icecast-2.2.0 ./configure make make install
Installez ensuite Ices
2.0.0 qui est le client-source officiel de Icecast c'est à dire l'application qui va alimenter Icecast en son à diffuser. Il permet de diffuser du format ogg sur un serveur Icecast2. Ce logiciel peut recupérer le son du périphérique /dev/dsp
pour diffuser ce qui passe sur la carte son mais nous nous limitons ici à la diffusion d'une playlist.
NB : Notez qu'il existe également d'autres logiciels client-source et d'autres logiciels équivalent à Icecast comme shoutcast.
.rpm
ou les sources (http://www.icecast.org/ices.php) que vous installerez comme le logiciel précédent.La configuration est relativement simple en se basant sur les fichiers par défaut fournis qui sont au format xml, donc très compréhensibles.
Tout d'abord icecast.xml
<icecast> <limits> <clients>100</clients> <sources>2</sources> <threadpool>5</threadpool> <queue-size>102400</queue-size> <client-timeout>30</client-timeout> <header-timeout>15</header-timeout> <source-timeout>10</source-timeout> <!-- If enabled, this will provide a burst of data when a client first connects, thereby significantly reducing the startup time for listeners that do substantial buffering. However, it also significantly increases latency between the source client and listening client. For low-latency setups, you might want to disable this. --> <burst-on-connect>1</burst-on-connect> <!-- same as burst-on-connect, but this allows for being more specific on how much to burst. Most people won't need to change from the default 64k. Applies to all mountpoints --> <burst-size>65535</burst-size> </limits> <authentication> <!-- Sources log in with username 'source' --> <source-password>PASSWORD</source-password> <!-- Relays log in username 'relay' --> <relay-password>PASSWORD</relay-password> <!-- Admin logs in with the username given below --> <admin-user>ADMINUSER</admin-user> <admin-password>PASSWORD</admin-password> </authentication> <!-- Uncomment this if you want directory listings --> <!-- <directory> <yp-url-timeout>15</yp-url-timeout> <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url> </directory> <directory> <yp-url-timeout>15</yp-url-timeout> <yp-url>http://www.oddsock.org/cgi-bin/yp-cgi</yp-url> </directory> --> <!-- This is the hostname other people will use to connect to your server. It affects mainly the urls generated by Icecast for playlists and yp listings. --> <hostname>localhost</hostname> <!-- You can use these two if you only want a single listener --> <!--<port>8000</port> --> <!--<bind-address>127.0.0.1</bind-address>--> <!-- You may have multiple <listener> elements --> <listen-socket> <port>8000</port> <!-- <bind-address>127.0.0.1</bind-address> --> </listen-socket> <!-- <listen-socket> <port>8001</port> </listen-socket> --> <!--<master-server>127.0.0.1</master-server>--> <!--<master-server-port>8001</master-server-port>--> <!--<master-update-interval>120</master-update-interval>--> <!--<master-password>hackme</master-password>--> <!-- <relay> <server>127.0.0.1</server> <port>8001</port> <mount>/example.ogg</mount> <local-mount>/different.ogg</local-mount> <relay-shoutcast-metadata>0</relay-shoutcast-metadata> </relay> --> <!-- Only define a <mount> section if you want to use advanced options, like alternative usernames or passwords <mount> <mount-name>/example-complex.ogg</mount-name> <username>othersource</username> <password>hackmemore</password> <max-listeners>1</max-listeners> <dump-file>/tmp/dump-example1.ogg</dump-file> <burst-size>65536</burst-size> <fallback-mount>/example2.ogg</fallback-mount> <authentication type="htpasswd"> <option name="filename" value="myauth"/> <option name="allow_duplicate_users" value="0"/> </authentication> </mount> --> <fileserve>1</fileserve> <paths> <!-- basedir is only used if chroot is enabled --> <basedir>/usr/share/icecast</basedir> <!-- Note that if <chroot> is turned on below, these paths must both be relative to the new root, not the original root --> <logdir>/home/icecast</logdir> <webroot>/usr/share/icecast/web</webroot> <adminroot>/usr/share/icecast/admin</adminroot> <!-- <pidfile>/usr/share/icecast/icecast.pid</pidfile> --> <!-- Aliases: treat requests for 'source' path as being for 'dest' path May be made specific to a port or bound address using the "port" and "bind-address" attributes. --> <!-- <alias source="/foo" dest="/bar"/> --> <!-- Aliases: can also be used for simple redirections as well, this example will redirect all requests for http://server:port/ to the status page --> <alias source="/" dest="/status.xsl"/> </paths> <logging> <accesslog>access.log</accesslog> <errorlog>error.log</errorlog> <loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error --> </logging> <security> <chroot>0</chroot> <changeowner> <user>icecast</user> <group>icecast</group> </changeowner> </security> </icecast>
Les seules choses à modifier sont le nom d'utilisateur et les mots de passe de la section <authentification>
, l'ajout du nom et du groupe de l'utilisateur qui gère Icecast dans la section <changeowner>
car Icecast ne peut pas s'executer en tant que superutilisateur (root).
Pour Ices, recopiez le fichier /usr/share/doc/ices-2.0.0/ices-playlist.xml
vers /etc/ices.xml
:
cp /usr/share/doc/ices-2.0.0/ices-playlist.xml /etc/ices.xml
Et modifiez :
<logpath>
et indiquez l'endroit où ils seront écrits.<metadata>
pour personnaliser un peu l'affichage dans les clients.<param name=“file”>/etc/playlist.txt</param>
(Une ligne par morceau avec le chemin complet.) Par exemple, pour créer la liste des fichiers ogg contenus dans /tmp/mysongs
vous pouvez utilisez la commande suivante : # find /tmp/mysongs/ | grep ogg > /etc/playlist.txt
<param name=“random”>1</param>
et <param name="once">0</param>
pour jouer aléatoirement la playlist et en boucle. (Désactivée par défaut avec la valeur 0
).
<instance>
ou le <password>PASSWORD</password>
doit correspondre au source-password
de /etc/icecast.xml
et <mount>/feelfree.ogg</mount>
pour spécifier le nom du point de montage de cette instance. Vous pouvez avoir plusieurs sections streams avec des points de montage et playlist différentes si vous proposez différents style de musiques.
ce qui donne:
Exemple :
<?xml version="1.0"?> <ices> <!-- run in background --> <background>1</background> <!-- where logs, etc go. --> <logpath>PATH_TO_LOG</logpath> <logfile>ices.log</logfile> <!-- 1=error,2=warn,3=info,4=debug --> <loglevel>4</loglevel> <!-- set this to 1 to log to the console instead of to the file above --> <consolelog>0</consolelog> <!-- optional filename to write process id to --> <pidfile>/home/icecast/ices.pid</pidfile> <stream> <!-- metadata used for stream listing (not currently used) --> <metadata> <name>ma radio internet</name> <genre>mon genre musical</genre> <description>description de la radio</description> </metadata> <!-- input module The module used here is the playlist module - it has 'submodules' for different types of playlist. There are two currently implemented, 'basic', which is a simple file-based playlist, and 'script' which invokes a command to returns a filename to start playing. --> <input> <module>playlist</module> <param name="type">basic</param> <param name="file">/etc/playlist.txt</param> <!-- random play --> <param name="random">1</param> <!-- if the playlist get updated that start at the beginning --> <param name="restart-after-reread">0</param> <!-- if set to 1 , plays once through, then exits. --> <param name="once">0</param> </input> <!-- Stream instance You may have one or more instances here. This allows you to send the same input data to one or more servers (or to different mountpoints on the same server). Each of them can have different parameters. This is primarily useful for a) relaying to multiple independent servers, and b) encoding/reencoding to multiple bitrates. If one instance fails (for example, the associated server goes down, etc), the others will continue to function correctly. This example defines two instances as two mountpoints on the same server. --> <instance> <!-- Server details: You define hostname and port for the server here, along with the source password and mountpoint. --> <hostname>localhost</hostname> <port>8000</port> <password>PASSWORD</password> <mount>/mon_flux.ogg</mount> <!-- Reconnect parameters: When something goes wrong (e.g. the server crashes, or the network drops) and ices disconnects from the server, these control how often it tries to reconnect, and how many times it tries to reconnect. Delay is in seconds. If you set reconnectattempts to -1, it will continue indefinately. Suggest setting reconnectdelay to a large value if you do this. --> <reconnectdelay>30</reconnectdelay> <reconnectattempts>5</reconnectattempts> <!-- maxqueuelength: This describes how long the internal data queues may be. This basically lets you control how much data gets buffered before ices decides it can't send to the server fast enough, and either shuts down or flushes the queue (dropping the data) and continues. For advanced users only. --> <maxqueuelength>80</maxqueuelength> <!-- Live encoding/reencoding: Currrently, the parameters given here for encoding MUST match the input data for channels and sample rate. That restriction will be relaxed in the future. --> <encode> <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps --> <samplerate>44100</samplerate> <channels>2</channels> </encode> </instance> </stream> </ices>
Il suffit de lancer icecast avec la commande
icecast -c /etc/icecast.xml
Vous pouvez ensuite connecter votre lecteur multimédia VLC, Mplayer sur votre flux http://www.maradio.com:8000/mon_flux.ogg et ecouter votre stream audio…