Utiliser Mumble et Darkice pour stream vers Icecast en MP3

(Vieilles étapes pour) stream un mumble sur Icecast.

Cette méthode date, j'ai fait mieux en compilant butt au lieu de DarkIce :)

Woa. Deuxième fois que je le fais et cette fois je sais par où je suis passé. J'ai lu pas mal de pages web pour qu'en fait, il en ait plus que 3-4 qui me servent vraiment. Je les citerais au cours de ce post. Et je me permet donc de vous partager ma démarche !

Il se peut que ce post soit long, mais il est assez simple encore. Je n'explique pas toutes les commandes par contre.

Résultat final:

Je vous présente Derpy:

Derpy
Derpy

Pour ceux qui ne savent pas ce qu'est cette apparence et cette chose, non ce n'est pas un Windows avec un thème mais LXDE, un environnement de bureau léger et qui nous va très bien. Et oui, l'écran n'est pas du 16/9.

Mais ici, ce n'est pas un ordinateur que j'ai chez moi avec un écran branché. C'est un serveur sous Debian 7 "Wheezy" hébergé chez Online.net, et donc sans écran, ni carte son. Je vais le nommer "bot" ou "Derpy" durant ce post. Mais grâce à la magie du VNC, nous allons lui donner un affichage et pouvoir y accéder à volonté depuis partout (avec un mot de passe, heh).

1. Installer LXDE et VNC

Dans ce tuto, j'ai utilisé TightVNC. Si vous avez déjà un serveur VNC installé sur votre machine bot, vous pouvez passer à l'étape suivante.

Je vous propose quand même de mettre à jour votre machine avant toute chose. Lancez votre terminal ou PuTTY et connectez-vous à votre machine distante. Vous remarquerez que je préfère aptitude mais apt-get fonctionnera aussi. sudo aptitude update puis sudo aptitude upgrade.

Et donc, installons notre serveur avec la commande sudo aptitude install tightvncserver

Une fois que c'est fait, il va nous falloir installer LXDE (et XServer). Simple encore, juste un sudo aptitude install lxde puis acceptez qu'il télécharge le tout.

Maintenant, tapez juste vncserver, donnez-lui des bon mot de passe, y compris pour le mode "vue uniquement", puis il vous lancera un écran ":1".

Utilisez maintenant un logiciel client VNC sur votre ordinateur. Si vous être sur Mac, je vous propose Chicken que vous pouvez retrouver ici. Entrez vous informations de connexion. Le port par défaut est 5900 ou 5901, l'affichage reste "1" si vous n'avez pas lancé plusieurs fois vncserver. Je vous recommande même, si votre client le permet volontiers, de passer via SSH. Voici un exemple pour Chicken:

Une connexion VNC via SSH
Une connexion VNC via SSH

Et en vous connectant donc enfin, vous tomberez sur un bureau. Hourra ! Maintenant, passons à nos quelques logiciels...

2. Ajouter nos sources, installer et compiler...

2.1 Ajouter la source Deb Multimedia

Voici donc une source à ajouter sur notre machine Debian ! Tout d'abord, nous allons installer un packet qui contiendra les clés de sécurité pour le répo. sudo aptitude install deb-multimedia-keyring puis quand il vous demande d'accepter ou non le packet, tapez "O" (ou "Y" s'il vous parle anglais) ! Si vous faites juste entrée, le fichier ne sera pas installé.

Faites aptitude update puis ouvrez le fichier "/etc/apt/sources.list" avec sudo nano /etc/apt/sources.list et ajoutez-y ceci avec une ligne à la fin: deb http://www.deb-multimedia.org stable main non-free.

Faites CTRL+X, puis "O" (ou "Y" s'il vous parle anglais) et un autre sudo aptitude update puis même un sudo aptitude upgrade pour mettre à jour vos packets vers des version plus récentes.

2.2 Installer Mumble, Pulseaudio et Alsa

Très court: sudo aptitude install mumble pulseaudio alsa. Il fera de la magie par après ! Oh et s'il vous demande d'enlever certaines choses, acceptez simplement.

2.3 Installer Icecast2

Alors il a deux choses. Soit vous utilisez le bot sur la même machine qui diffuse, soit vous allez streamer vers un autre serveur distant. Dans mon cas, je stream vers un serveur distant MAIS je vais quand même installer Icecast sur la machine bot pour pouvoir avoir la possibilité de mettre de la musique de fond ! J'en parlerai plus tard dans le chapitre 4.

  1. Cette première étape doit donc être fait sur au moins une machine, selon vos choix comme dit dans les quelques lignes d'au-dessus. Faites aptitude install Icecast2 et donnez-lui des mots de passe pour: le client qui va streamer, les relais et pour l'administrateur. Avoir un mot de passe client différent que celui de l'administrateur peut être utile, pour pouvoir donner un accès à un ami de pouvoir envoyer lui-même son son.
  2. Faites sudo nano /etc/default/icecast2 et changer le ENABLE= à la fin pour qu'il devienne ENABLE=true. Puis vous pouvez faire un sudo service icecast2 restart pour démarrer Icecast.

Voilà, un Icecast basique !

2.4 Installer nos codecs.

Celui-ci m'a énervé car il était nécessaire pour l'étape 2.5. Je me suis basé sur ce post de Steffen Müller pour ce chapitre 2.4 et 2.5. Mais j'ai du adapter car nous ne sommes pas sous un Raspberry Pi.

On va installer pleins de paquets. Voir pas mal. Il se peux que certains nous nous servent pas en fait, mais ce n'est pas forcément grave en soi.

sudo aptitude install build-essential devscripts autotools-dev fakeroot dpkg-dev debhelper autotools-dev dh-make quilt ccache libsamplerate0-dev libpulse-dev libaudio-dev lame libjack-jackd2-dev libasound2-dev libtwolame-dev libfaad-dev libflac-dev libmp4v2-dev libshout3-dev libmp3lame-dev

S'il vous dit qu'il faudra enlever certains paquets, ça ne devrais pas être grave (surtout si c'est jack en fait). Et après nous pouvons passer à l'étape suivante.

2.5 Compiler notre Darkice

Car Darkice est un peu bête, il va pas trouver certaines librairies comme Lame, Vorbis ou ALSA du premier coup. On va s'en assurer que tout se passe bien.

Nous allons donc travailler dans un nouveau dossier, car les étapes suivantes vont en mettre de partout. Je vous propose de faire mkdir src && cd src/. Ensuite, je vais utiliser apt-get car je ne sais pas s'il a un équivalent sous aptitude. On va récupérer les sources de Darkice depuis nos répo sudo apt-get source darkice.

Maintenant, nous allons adapter la configuration pour pouvoir le compiler. Allez dans le dossier des sources avec cd darkice-1.0/ puis nous allons éditer notre fichier voulu avec sudo nano debian/rules.

Si vous me faites confiance, effacez tout en appuyant à répétition sur "CTRL+K" et copiez-collez le code au complet ci-dessous Attention aux tabulations. Sinon, observez les changements et modifiez-vous même:

#!/usr/bin/make -f

%:
	dh $@

.PHONY: override_dh_auto_configure
override_dh_auto_configure:
	ln -s /usr/share/misc/config.guess .
	ln -s /usr/share/misc/config.sub .
	dh_auto_configure -- --prefix=/usr --sysconfdir=/usr/share/doc/darkice/examples --with-vorbis-prefix=/usr/lib/x86_64-linux-gnu/ --with-jack-prefix=/usr/lib/x86_64-linux-gnu/ --with-alsa-prefix=/usr/lib/x86_64-linux-gnu/ --with-faac-prefix=/usr/lib/x86_64-linux-gnu/ --with-aacplus-prefix=/usr/lib/x86_64-linux-gnu/ --with-samplerate-prefix=/usr/lib/x86_64-linux-gnu/ --with-lame-prefix=/usr/lib/x86_64-linux-gnu/

Faites "CTRL+X" puis "O" (ou "Y" s'il vous parle toujours en anglais) pour sauvegarder.

Puis, on va juste éviter qu'une mise à jour du packet officiel casse tout. On va donc passer notre Darkice en version très élevée. Certains vont crier, mais c'est peut-être mieux au final. En cas de mise à jour importante de Darkice à faire, il faudra simplement refaire ce chapitre 2.5 une seconde fois.

On va donc lancer sudo debchange -v 1.0-999~mp3+1 dans notre console. Il va vous ouvrir votre éditeur de texte et il va falloir ajouter une note de version. Naviguez jusqu'à l'astérisque " * " puis ajoutez-y à côté "Support MP3 et plus". Vous aurez quelque chose du genre:

darkice (1.0-999~mp3+1) UNRELEASED; urgency=low

  * Support MP3 et plus

 --  <mkody@Derpy>  Sun, 11 May 2014 16:35:06 +0200

Et on va donc enfin compiler tout ça avec sudo dpkg-buildpackage -rfakeroot -uc -b ! Allez vous faire un petit café ou mettre à chauffer votre eau pour votre thé en attendant.

Une fois terminé, on va installer le paquet compilé avec la commande sudo dpkg -i ../darkice_1.0-999~mp3+1_amd64.deb. Si le fichier n'est pas trouvé, entrez sudo dpkg -i ../darkice_1.0-999~mp3+1_ puis appuyez sur la touche de tabulation (Celle-ci), ajoutez deb après le point et envoyez la commande ! Une fois que c'est fait, il ne reste plus qu'à configurer le tout !

3. Configurer et lancer

Dans cette étape, nous allons configurer Darkice, lancer Pulseaudio avec ses deux sorties et Mumble. Et tout ceci doit être fait sur l'écran distant. Cliquez sur le petit écran dans la barre en bas à gauche.

3.1 Lançons Mumble

Avant-tout, on lance juste une fois pulseaudio avec sudo pulseaudio -D --system. Il se peut que Pulseaudio soit déjà lancé avant. Si vous n'avez pas un "Accès refusé" lors de l'étape 3.2, il faudra relancer la sessions VNC.

Ouvrez le "menu démarrer" en cliquant sur le petit oiseau design dans la barre et ouvrez Mumble qui est dans la partie "Internet". Il va vous ouvrir la configuration audio pour commencer. Lors de l'étape de la sélection du périphérique, sélectionnez bien le système "PulseAudio" puis la première "Sortie vide" et, si possible, l'entrée en "OSS". Comme ceci:

Mumble Audio
Mumble Audio

Continuez toujours sans toucher jusqu'à l'étape de la Détection de l'Activité Vocale. Choisissez Appuyer pour Parler et donnez-le une touche pas très utilisée comme le "alt" de droite.

Config Vocal
Config Vocal

Passez à l'étape suivant et mettez la qualité sur Haut et désactivez la synthèse vocale, puis vous pouvez terminer par un "suivant" et "terminer" ! Ensuite, il faudra suivre les étapes pour générer un certificat et vous connecter sur votre Mumble. Faites un tour dans la configuration en mode "Avancé" pour désactiver les sons de notification. Je vous recommande de mettre exactement comme ceci !

Notifications
Notifications

Puis après, mettez-vous dans le salon que vous voulez diffuser et/ou donnez au bot les droits nécessaire !

3.2 Lancer Pulseaudio

Maintenant, on va lancer deux fois la même commande: sudo pactl load-module module-null-sink sink_name=stream. Vous devriez avoir deux nombres consécutifs qui doivent venir. Normalement 22 et 23.

Si vous avez deux "Access Denied", vérifiez que vous aviez lancé le daemon de Pulseaudio comme indiqué au début du chapitre 3.1. Si vous en avez qu'un, relancez tout l'affichage VNC comme indiqué dans les notes à la fin du post.

3.3 La configuration de Darkice

Je vous propose qu'on ne touche pas au fichier de configuration par défaut de Darkice et que nous copions le fichier dans votre dossier home. Faites sudo cp /usr/share/doc/darkice/examples/darkice.cfg ~/. Maintenant, allons configurer les entrées et sorties de Darkice.

Allons dans notre home avec cd ~/ et ouvrons notre fichier avec nano darkice.cfg.

Maintenant, ça deviens tricky. Je vous montre déjà ma configuration, avec les mots de passes cachés évidemment:

# this section describes general aspects of the live streaming session
[general]
duration        = 0         # duration of encoding, in seconds. 0 means forever
bufferSecs      = 1         # size of internal slip buffer, in seconds
reconnect       = yes       # reconnect to the server(s) if disconnected
realtime        = yes       # run the encoder with POSIX realtime priority
rtprio          = 3         # scheduling priority for the realtime threads

# this section describes the audio input that will be streamed
[input]
device          = pulse                             # pulseaudio
sampleRate      = 22050                             # 11025, 22050 or 44100
bitsPerSample   = 16                                # bits per sample. try 16
channel         = 2                                 # channels. 1 = mono, 2 = stereo
paSourceName    = stream.monitor                    # source pulseaudio
paSourceName    = default                           # fallback source pulseaudio

# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode     = vbr                               # average bit rate
quality         = 0.5
format          = mp3
bitrate         = 96                                # bitrate of the stream
server          = IP
port            = 8000
password        = PASSWORD
mountPoint      = MOUNTPOINT
name            = NAME
description     = DESCRIPTION
url             = http://www.MYWEBSITE.TLD/    # URL related
genre           = GENRE
public          = no                                # advertise this stream?

Ici, c'est bien la configuration d'Icecast de SORTIE. Celle qui sera disponible au publique et que les gens écouteront. Si vous êtes flemmard et que c'est bien sur un serveur Icecast2 que vous allez stream, effacez votre fichier complet et collez celui-ci tout en changeant certains points:

  • IP par l'IP du serveur distant, ou simplement 127.0.0.1 si Icecast est sur la même machine.
  • PASSWORD par le message de source d'Icecast, normalement le premier que vous aviez donné à l'étape 2.3
  • MOUNTPOINT c'est le nom du fichier que les gens doivent entrer pour écouter. Il peut simplement s'appeler "live" ou vous pouvez mettre "live.mp3"
  • NAME et DESCRIPTION je pense que c'est assez explicit...
  • MYWEBSITE.TLD par l'URL de votre site web par exemple
  • GENRE par le genre du stream. Par exemple "talk".
  • Vous pouvez dire "yes" à public si vous voulez être dans certains répertoires qui liste les streams Icecast. Ce que je ne recommande pas si votre Mumble est utilisé que pour certains live par exemple.

Ici, je vous ait donné la configuration pour du MP3. Mais si vous voulez faire un stream en OGG, c'est simple aussi ! Vous pouvez remplacer format = mp3 par format = vorbis et mettre une dièse "#" devant bitrate !

Et si vous voulez un stream en MP3 et OGG. Copiez toute la partie de [icecast2-0], collez en dessous et renommez le second [icecast2-0] en [icecast2-1]. Puis effectuez les changements comment dit juste dans ce paragraphe (ne mettez pas deux fois le même mountPoint par contre).

ENFIN, dans votre console dans votre affichage VNC, lancez darkice -c ~/darkice.cfg et laissez cette fenêtre ouverte ! Si tout c'est bien passé, il ne devrait pas se terminer et vous permettre de lancer une autre commande dans cette fenêtre.

4. BONUS: VLC et musique de fond.

Si vous avez un autre bon logiciel audio qui permet de lire un flux Icecast, MP3 ou OGG, et de pouvoir s'y reconnecter s'il plante, vous pouvez m'envoyer un tweet ou un mail (le say hello au fond du blog).

Installez VLC avec simplement (oui, encore simple !) sudo aptitude install vlc. TADA ! Oh mais attendez. Si vous avez lancé vncserver avec sudo, il vous sera impossible de lancer VLC ! Mais on peux y remédier. Ce post par cgelici est simple. Voici les étapes:

  • Exécutez sudo nano /usr/bin/vlc
  • Faites "CTRL+W", puis "CTRL+R"
  • Entrez geteuid puis la touche entrée
  • Entrez getppid puis la touche entrée et enfin "T".
  • Enfin, faites "CTRL+X" et "O" (ou "Y" s'il vous parle en anglais) !

Pour de la musique de fond, lancez simplement VLC depuis le "menu démarrer" situé dans "Son et vidéo". S'il ne s'affiche pas après 30 secondes, je vous recommande de vérifié si vous avez modifié le fichier dans VLC comme expliqué juste plus haut.

Une fois lancé, il a deux méthode. Soit vous avez déjà la musique sur le disque dur de la machine, soit vous allez streamer depuis votre ordinateur uniquement la musique, comme moi (mais je le fais depuis mon Raspberry Pi). Si vous devez le stream, il faudra que depuis votre ordinateur vous diffusiez votre logiciel audio vers le icecast de la machine bot dans un "mountpoint" différent de celui de Darkice, par exemple bgaudio. Puis ensuite, cliquez dans VLC sur "Media" -> "Ouvrir un flux réseau..." puis entrez http://127.0.0.1:8000/bgaudio (changez "bgaudio" par ce que vous aviez indiqué comme "mountpoint"). Puis activez la répétition en boucle. Si le stream plante quelques secondes, il va réessayer de se connecter. Mais attention, si vous arrêtez de diffuser, il va falloir cliquer sur Stop dans VLC, sinon il va essayer en boucle de se connecter et donner un log d'erreur énorme !

5. On est en direct !

On a fini d'installer, de compiler et de configurer... Si tout s'est bien passé, c'est fini ! Il ne vous reste plus qu'à accéder à l'Icecast vers lequel Darkice diffuse. Si vous aviez mis qu'il diffuse sur la machine en lui-même, allez sur son IP ou adresse puis ajoutez :8000 derrière. Par exemple http://derpy.kdy.ch:8000/. Ensuite, vous pouvez écouter en allant sur le lien M3U du Mount Point de votre Darkice. Et voilà !

Ensuite, tout le reste reste de la configuration avec Icecast pour pouvoir changer de "Mount Point" entre votre direct ou non. Avec un peu de technique et de recherche sur Google, vous devriez trouver comment faire un "fallback" ;)

Notes

  • 12 mai 2014 02:15 : Pour fermer complètement une session VNC, faites vncserver -kill :1 (:1 étant le numéro de l'écran démarré). A utiliser si vous n'avez pas lancé, par exemple, dans l'ordre les étapes du chapitre 3 puis à relancer avec vncserver.