Nous allons étudier la mise en place d'un serveur de "streaming", ou, comment monter une webradio !
Un ami m'a parlé d'une webradio qu'il venait de mettre en place, faisant de la musique et étant fan de l'open sources, je me suis dis, et pourquoi n'essaierai-je pas de monter la mienne ? Histoire de m'endormir moins bête le soir
et surtout, de pouvoir diffuser mes mix ainsi que ceux de quelques ami(e)s et ce, all over the world !
Après une longue réflexion, d'environ 2 secondes, je me décide et je me lance !
Pour réaliser l'opération je vais avoir besoin :
* D'un serveur, celui ci enverra le flux audio au travers de la toile
* D'un streamer, c'est un programme qui enverra les données audio au serveur, tout en les "ré-échantillonnant"
* D'un programme fournissant une API qui permet aux applications de communiquer avec le serveur
Pour le serveur, mon choix c'est porté sur Icecast, pour le streamer sur Darkice-full, celui ci accepte le format Mp3 pour l'API, j'utilise la librairie Libshout.
C'est parti !
Je suis sur un système Ubuntu 6.06 serveur, commençons par installer le serveur Icecast2 avec un traditionnel apt-get !
Code BASH :
Le fichier de configuration du serveur se trouve dans le répertoire /etc/icecast2 et il est au format .XML, éditons le afin de procéder a quelques réglage, et changer le mot de passe par défaut du serveur.
Code BASH :
Voici ce que cela nous renvoi :
Code XML :
Le XML, c'est un peu comme du HTML, ce langage s'écrit sous forme de balises, sauf que dans le XML, l'ordre des balises n'a pas d'importance.
Commençons par les balises <limits></limits>, ce qui se trouve entre ces balises parle tout seul, je ne rentrerai pas dans le détail.
Puis vient les balises <authentification></authentification>, c'est entre ces balises qu'il faut modifier les mots de passe par défaut et ce, avant la mise en route du serveur pour des raison évidente de sécurité !
Ensuite, les balises <hostname></hostname>, localhost si le serveur tourne en local ou le nom de machine si le serveur diffuse sur le web.
Pour configurer l'accès au flux, c'est a dire le port d'écoute du serveur, c'est entre les balise <port></port> que cela se passe, le port par défaut et le 8000, il n'est pas vraiment utile dans le cas présent de le changer.
Voila, pour une configuration minimum et fonctionnel, reste plus qu'a préciser a init de lancer icecast2 comme un service au démarrage, pour cela, il faut modifier le fichier /etc/default/icecast2 à la ligne ENABLE=false pour la changer en ENABLE=true.
Voila, le serveur est prêt et il ne reste plus qu'a le lancer avec la commande /etc/init.d/icecast2 start.
Une fois le serveur lancé, pour verifier si il n'y a pas de mouche dans la soupe, avec votre navigateur préféré, rendez vous a l'adresse => http://localhost:8000.
Reste plus qu'a désigner des "points de montage", ces points seront en fait des playlist...La suite tout bientôt !
Edit du 15/06/2010 : Ou un de ces jours...
Un ami m'a parlé d'une webradio qu'il venait de mettre en place, faisant de la musique et étant fan de l'open sources, je me suis dis, et pourquoi n'essaierai-je pas de monter la mienne ? Histoire de m'endormir moins bête le soir
et surtout, de pouvoir diffuser mes mix ainsi que ceux de quelques ami(e)s et ce, all over the world !Après une longue réflexion, d'environ 2 secondes, je me décide et je me lance !
Pour réaliser l'opération je vais avoir besoin :
* D'un serveur, celui ci enverra le flux audio au travers de la toile
* D'un streamer, c'est un programme qui enverra les données audio au serveur, tout en les "ré-échantillonnant"
* D'un programme fournissant une API qui permet aux applications de communiquer avec le serveur
Pour le serveur, mon choix c'est porté sur Icecast, pour le streamer sur Darkice-full, celui ci accepte le format Mp3 pour l'API, j'utilise la librairie Libshout.
C'est parti !
Je suis sur un système Ubuntu 6.06 serveur, commençons par installer le serveur Icecast2 avec un traditionnel apt-get !
Code BASH :
moi@mon-serveur:~$ sudo apt-get install icecast2
Le fichier de configuration du serveur se trouve dans le répertoire /etc/icecast2 et il est au format .XML, éditons le afin de procéder a quelques réglage, et changer le mot de passe par défaut du serveur.
Code BASH :
moi@mon-serveur:~$ sudo vi /etc/icecast2/icecast.xml
Voici ce que cela nous renvoi :
Code XML :
<icecast> <limits> <clients>100</clients> <sources>2</sources> <threadpool>5</threadpool> <queue-size>524288</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>Le-mot-de-passe-que-vous-voulez</source-password> <! Relays log in username 'relay' > <relay-password>Le-même-mot-de-passe</relay-password> <! Admin logs in with the username given below > <admin-user>admin</admin-user> <admin-password>Le-mot-de-passe-que-vous-voulez</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> --> <!-- 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>> <!-- setting this makes all relays on-demand unless overridden, this is useful for master relays which do not have <relay> definitions here. The default is 0 --> <!<relays-on-demand>1</relays-on-demand>> <!-- <relay> <server>127.0.0.1</server> <port>8001</port> <mount>/example.ogg</mount> <local-mount>/different.ogg</local-mount> <on-demand>0</on-demand> <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> <fallback-override>1</fallback-override> <fallback-when-full>1</fallback-when-full> <intro>/example_intro.ogg</intro> <hidden>1</hidden> <no-yp>1</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> <mount> <mount-name>/auth_example.ogg</mount-name> <authentication type="url"> <option name="mount_add" value="http://myauthserver.net/notify_mount.php"/> <option name="mount_remove" value="http://myauthserver.net/notify_mount.php"/> <option name="listener_add" value="http://myauthserver.net/notify_listener.php"/> <option name="listener_remove" value="http://myauthserver.net/notify_listener.php"/> </authentication> </mount> --> <fileserve>1</fileserve> <!-- set the mountpoint for a shoutcast source to use, the default if not specified is /stream but you can change it here if an alternative is wanted or an extension is required <shoutcast-mount>/live.nsv</shoutcast-mount> --> <paths> <! basedir is only used if chroot is enabled > <basedir>/usr/share/icecast2</basedir> <!-- Note that if <chroot> is turned on below, these paths must both be relative to the new root, not the original root --> <logdir>/var/log/icecast2</logdir> <webroot>/usr/share/icecast2/web</webroot> <adminroot>/usr/share/icecast2/admin</adminroot> <! <pidfile>/usr/share/icecast2/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 [url=http://server]http://server[/url]:port/ to the status page --> <alias source="/" dest="/status.xsl"/> </paths> <logging> <accesslog>access.log</accesslog> <errorlog>error.log</errorlog> <! <playlistlog>playlist.log</playlistlog> > <loglevel>4</loglevel> <! 4 Debug, 3 Info, 2 Warn, 1 Error > <logsize>10000</logsize> <! Max size of a logfile > <!-- If logarchive is enabled (1), then when logsize is reached the logfile will be moved to error.log.DATESTAMP, otherwise it will be moved to error.log.old. Default is non-archive mode (i.e. overwrite) --> <! <logarchive>1</logarchive> > </logging> <security> <chroot>0</chroot> <!-- <changeowner> <user>nobody</user> <group>nogroup</group> </changeowner> --> </security> </icecast>
Le XML, c'est un peu comme du HTML, ce langage s'écrit sous forme de balises, sauf que dans le XML, l'ordre des balises n'a pas d'importance.
Commençons par les balises <limits></limits>, ce qui se trouve entre ces balises parle tout seul, je ne rentrerai pas dans le détail.
Puis vient les balises <authentification></authentification>, c'est entre ces balises qu'il faut modifier les mots de passe par défaut et ce, avant la mise en route du serveur pour des raison évidente de sécurité !
Ensuite, les balises <hostname></hostname>, localhost si le serveur tourne en local ou le nom de machine si le serveur diffuse sur le web.
Pour configurer l'accès au flux, c'est a dire le port d'écoute du serveur, c'est entre les balise <port></port> que cela se passe, le port par défaut et le 8000, il n'est pas vraiment utile dans le cas présent de le changer.
Voila, pour une configuration minimum et fonctionnel, reste plus qu'a préciser a init de lancer icecast2 comme un service au démarrage, pour cela, il faut modifier le fichier /etc/default/icecast2 à la ligne ENABLE=false pour la changer en ENABLE=true.
Voila, le serveur est prêt et il ne reste plus qu'a le lancer avec la commande /etc/init.d/icecast2 start.
Une fois le serveur lancé, pour verifier si il n'y a pas de mouche dans la soupe, avec votre navigateur préféré, rendez vous a l'adresse => http://localhost:8000.
Reste plus qu'a désigner des "points de montage", ces points seront en fait des playlist...La suite tout bientôt !
Edit du 15/06/2010 : Ou un de ces jours...
Ecrit par: le furtif, Le: 12/10/08






