NAS, un serveur audio

Je viens de réaliser une petit prouesse qui vaut bien un billet.

La situation : j’ai une super sono qui ne marche malheureusement qu’avec une entrée optique. Et la seule machine qui a une sortie optique chez moi c’est la machine qui sur laquelle vous êtes connectée en ce moment, mon serveur. Je n’ai pas d’écrans sur ce serveur et je n’ai pas envie d’installer X.org et tout ce qui vient avec. Par contre j’ai un portable avec une belle interface graphique, seulement j’ai un son tout pourri là dessus.

L’idée est donc de faire jouer le son par le serveur et d’afficher l’image sur le portable. Ce que X.org permet par son architecture client/serveur le serveur X (mon portable) pourrait afficher l’image que lui envoie le client (mplayer sur mon serveur) et le son serait joué par le client (donc sur le serveur ici). Sauf qu’une image, et à plus forte raison une serie d’image comme un film, ça représente beaucoup de donnée à transmettre sur le réseau, et même sur le reseau local il y a des latences qui ne sont pas négligeables.

Donc je me suis dit que faire l’inverse doit être plus rapide. C’est à dire mplayer sur mon portable qui envoie les données audio par le réseau au serveur. Et c’est possible avec NAS (Network Audio System). Voilà comment faire :

Installer NAS sur le serveur (ici sur FreeBSD)

make -C /usr/ports/audio/nas install clean

La configuration par defaut marche très bien. On peut ensuite lancer NAS en tand qu’utilisateur normal :

nasd :0 -aa -b -config /usr/local/etc/nasd.conf.eg

L’option :X dis à nasd d’écouter sur le port 8000+X (je sais c’est vraiment pas convi mais bon c’est comme ça).

Et voilà pour nous (8000 + 0) c’est sur le port 8000 filtrez le comme vous voulez avec votre parre-feu.

Ensuite sur le client (mon portable) il suffit d’indiquer à mplayer l’host et le port du serveur nas comme expliqué dans la page de man. Puis lancez votre film/musique. L’host peut être une IP ou un nom de domaine peu importe.

export AUDIOSERVER=tcp/host:8000
mplayer -ao nas fichier.avi