Resman says hi.

TinyCast

Dans le monde des serveurs de streaming audio on trouve beaucoup d'acteurs. Les plus connus sont bien sur shoutcast et icecast, tous deux robustes et riches en fonctionnalités. Cependant ils sont également très demandeurs en ressources, et nombre de ces fonctionnalités ne sont pas indispensables pour l'usage de base. D'un autre coté je voulais écrire moi-même un serveur de streaming en perl, et c'était en soi une raison suffisante pour me lancer :) Au final TinyCast (c'est son nom) est un serveur petit (du point de vue du nombre de lignes de code, il faut tout de même l'interpréteur perl en RAM), et très modulaire.

Remarque : ce programme comme tout ce qui se trouve ici est expérimental, cependant je suis satisfait du code et la stabilité est pour le moment très bonne.

Organisation

Le programme est organisé en 3 parties :

Le serveur lui même n'est donc constitué que de deux modules perl, le travail de décodage et de réencodage en un format streamable est fait par des programmes externes, ce qui explique en partie la légèreté du code. (L'autre explication est la puissance du perl ;) )

Installation

L'installation est on ne peut plus simple, Assurez vous d'abord de disposer des modules perl suivants :

Avant de pouvoir utiliser le serveur, il y a quelques paramètres à configurer. Editez streamer.pl et modifiez les paramètres suivants à votre guise :

my $PORT = 8888;          # Port d'écoute du serveur
my $MAXCLIENTS = 10;      # Nombre maximal de clients simultanés
my $BUFSIZE = 4096;       # Taille des buffers, ne pas changer
my $CLIENTBUF = 128000;   # Buffer client autorisé avant déconnexion
my $SOURCEBUF = 65536;    # Données à conserver pour une mise en buffer rapide coté client
my $SERVERNAME = "vic development server"; # Message envoyé au client lorsqu'il se connecte
my $VERSION = "0.1";      # Plutot inutile :)
my $debug = 0;            # Affiche des infos de debug si 1, va en background si 0

Vous pouvez tout de suite lancer le serveur de streaming en tapant :

$ ./streamer.pl

Ensuite paramétrez le fichier types.conf qui définit les commandes de décodage/encodage audio. Le fichier doit contenir au moins une ligne "Bitrate N" qui détermine le débit du flix audio. Ce débit est constant pour une source donnée. On trouve également dans ce fichier un nombre quelconque de lignes "FileLike" qui indiquent les traitement à appliquer à chaque type de fichier audio. Cette commande prend deux arguments, le premier est une expression rationnelle qui permet d'identifier le fichier (par son extension en général), et le second donne la commande d'encodage. L'exemple ci-dessous prend en compte les fichiers sid (musique C64), les fichiers mp3, les fichiers ogg, les fichiers SPC (Musiques SNES) et différents types de modules. La chaîne "%F" est substituée par le nom du fichier à jouer.

Bitrate 128000
FileLike "\.sid$"               "./sid_source.pl %F |lame -S -r -s 44.1 -m s -x - -"
FileLike "\.mp3$"               "lame %F --resample 44.1 -b 128 -"
FileLike "\.ogg$"               "ogg123 %F -q -d raw -f - |lame -S -r -s 44.1 -m s -x - -"
FileLike "\.(669|mod|xm|s3m|it)$"       "mikmod -d pipe,pipe=cat -q -f 44100 -o 16s --hqmixer --surround --noloops -X %F |lame -S -r -s 44.1 -m s-x - -"
FileLike "\.spc$"               "./spcsource %F | lame -S -r -s 32 -b 128 -m s -x --resample 44.1 - -"

Bien sur il faut installer séparément les programmes de décodage/encodage, voire les coder vous-mêmes pour les formats les plus baroques (comme j'ai du le faire pour les fichiers SID et SPC).

Lancez maintenant la source, par exemple :

$ ./source.pl /home/coincoin/extremia.mod

Voilà, vous pouvez maintenant écouter le serveur à l'aide de votre lecteur préféré, en vous connectant sur le port configuré précédement.


Share this article :

Comments

Add a new comment :
Name :
Comment :

Answer the following question : Which is the smallest, eleven or twelve ?