Installer et configurer un serveur icecast

Icecast est un serveur de flux multimédia multiplateforme. Il peut servir des flux ogg, mpeg, theora, à qui les demande, sur une simple requête HTTP. Dans sa version actuelle, il saura fonctionner aussi bien en ipv6 qu’en ipv4.
Icecast a besoin d’un ou plusieurs clients. Je devrais dire source parce que ça peut induire en erreur.
Les sources veillent à procurer au serveur un flux à retransmettre. Une source est avant tout un logiciel, qui saura alimenter icecast.
Nous allons voir comment installer et configurer un serveur

1. Quelques banalités

Pour servir un flux de qualité acceptable, mon avis est qu’il faut un débit d’au moins 160 kbits/s.

1 flux = 160 kbits/s = 20 Koctets/s.
5 flux = 800 kbits/s = 100 Koctets/s.

Tout cela revient au même que les 5 flux soient différents, ou pas. Il faut donc adapter la qualité du flux à la bande passante du lien réseau où icecast est installé.
Cependant, le débit de 320 kbits/s est un luxe qu’il faut pouvoir se permettre.

Deux cas de figure :

- icecast se trouve derrière une box aDSL, auquel cas le débit montant est plutôt faible, entre 50 et 800 Koctets/s.

- icecast se trouve sur un serveur dédié dans ton cloud ou derrière une box FTTH.
Cette situation convient mieux à un serveur icecast. En effet, le FTTH offre dans la plupart des cas un débit montant de 10 Mbits/s, tandis que la plupart des clouds garantiront 100 Mbits/s ou plus.

Autant dire qu’on peut servir plus d’une centaine de flux *tranquillou* en bonne qualité dans le cas du cloud/dédié.

2. Installation

En root, dans un terminal :

# apt-get install icecast2 -y

Voilà c’est installé, merci et au revoir !!

3. Configuration

Icecast est bien installé mais pas encore en état de servir des flux.

Pour éditer le fichier de configuration principal d’icecast :

# vi /etc/icecast2/icecast.xml

Oui oui c’est un fichier xml, on redoublera donc d’attention à l’édition de ce dernier, à ne pas briser l’indentation par exemple, car c’est bel et bien du code. Les commentaires y sont balisés comme suit :
<!-- Les commentaires se placent entre ces flèches de part et d'autre -->

- Le paragraphe ’limits’ renseigne des options générales.

   <limits>
       <clients>100</clients>
       <sources>2</sources>
       <queue-size>102400</queue-size>
       <client-timeout>30</client-timeout>
       <header-timeout>15</header-timeout>
       <source-timeout>10</source-timeout>
       <burst-on-connect>1</burst-on-connect>
       <burst-size>65536</burst-size>
   </limits>

clients = au total, combien le serveur acceptera de connexions clientes. À adapter à votre bande passante.
sources = au total, combien le serveur acceptera de connexions sources.
Sauf exception, les autres champs devraient être laissés en l’état.

- Le paragraphe ’authentication’ contient les identifiants et mots de passe.
service

   <authentication>
       <source-password>changezmoi</source-password>
       <relay-user>relay</relay-user>
       <relay-password>changezmoi</relay-password>
       <admin-user>admin</admin-user>
       <admin-password>changezmoi</admin-password>
   </authentication>

source-password = mot de passe de la source, sachant que l’identifiant est ’source’
relay-user = si utilisé, peut être laissé par défaut.
relay-password = doit être changé
admin-user = peut être changé, pour plus de sécurité.
admin-password = mot de passe de l’administrateur.

- Le paragraphe ’directory’ spécifie l’emplacement de l’annuaire communautaire icecast.

   <directory>
       <yp-url-timeout>10</yp-url-timeout>
       <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
   </directory>

Il n’y a pas de changement à apporter à cette section. Il est possible que l’url diffère selon l’ancienneté ou l’origine du paquet installé.

- Ce paragraphe renseigne des généralités

   <hostname>FQDN_de_la_machine</hostname>
   <location>Somewhere</location>
   <admin>admin@icecast.org</admin>
   <fileserve>0</fileserve>
   <server-id>icecast 2.3</server-id>

hostname = le FQDN de la machine
location = à votre convenance, ce champ est totalement descriptif.
admin = laissez celle par défaut, cela élimine un trou à spam potentiel.
fileserve = positionnez à 1 pour pouvoir uploader des images par exemple

- le paragraphe ’mount’

   <mount>
       <mount-name>/live</mount-name>

       <username>à_définir</username>
       <password>à_changer</password>

       <max-listeners>50</max-listeners>
       <dump-file>/tmp/dump-example1.ogg</dump-file>
       <burst-size>65536</burst-size>
       <fallback-mount>/example2.ogg</fallback-mount>
       <fallback-override>1</fallback-override>
       <fallback-when-full>1</fallback-when-full>
       <intro>/example_intro.ogg</intro>
       <hidden>1</hidden>
       <no-yp>0</no-yp>
       <authentication type="htpasswd">
               <option name="filename" value="myauth"/>
               <option name="allow_duplicate_users" value="0"/>
       </authentication>
       <on-connect>/home/icecast/bin/stream-start</on-connect>
       <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
   </mount>

4. Mise en service

Le général est un fichier texte et doit être édité en dernier.

# vi /etc/default/icecast2

Éditez comme suit :

# Full path to the server configuration file
CONFIGFILE="/etc/icecast2/icecast.xml"

# Name or ID of the user and group the daemon should run under
USERID=icecast2
GROUPID=icecast

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true

Notez le paramètre "ENABLE" qui doit être passé à "true" pour pouvoir démarrer le serveur.

Enregistrez puis démarrez le serveur :

# systemctl restart icecast2.service

Check des logs, et permissions sur ces derniers :

# ls -l /var/log/icecast2

tout doit appartenir à icecast2 dans le groupe icecast

# tail -f /var/log/icecast2/*.log /var/log/daemon.log

Assurez vous qu’un port ou plusieurs ports ont bien été ouverts :

# netstat -plantu | grep icecast

Si cela renvoie au moins deux lignes, c’est bon signe.

Démarrez maintenant un lecteur multimédia et ouvrez votre flux qui devrait être http://<FQDN_de_votre_serveur>:8000/<point_de_montage>