Subsonic
Subsonic est un serveur de contenu audio et vidéo en streaming avec une interface web (via http ou https) et une gestion de plusieurs utilisateurs, ainsi que l'authentification LDAP.
La musique est encodée à la volée, par défaut grâce à FFmpeg et lame en MP3 pour l'audio et FLV pour la vidéo. Ces paramètres se changent très aisément. Un grand nombre de format est reconnu par défaut, ainsi que les tags correspondant avec la possibilité d'édition, notamment pour les formats MP3, AAC, OGG, FLAC, WMA et APE.
Subsonic est traduit dans de nombreuses langues, dont le français, avec 24 thèmes par défaut. Il offre la possibilité de lire la musique dans le lecteur web, comme dans un lecteur externe (avec gestion des playlists), de contrôler la musique à distance grâce à votre téléphone, ainsi que de télécharger la musique, piste par piste, comme un album entier.
Des applications existent pour Android, iPhone/iPad, Windows Phone 7/8, Windows, Mac, Linux et BlackBerry PlayBook. Il y a une gestion de la bande passante en limitant le bitrate, la musique sera automatiquement réencodée avec le bon débit binaire.
Subsonic fonctionne sur la plupart des plateformes grâce à la technologie Java, notamment sur Windows, Mac, Linux et autres variantes Unix.
Pré-requis
- Disposer des droits d'administration.
- Disposer d'une connexion à Internet configurée et activée.
Installation
Si vous souhaitez essayer Subsonic avant de l'installer vous pouvez vous rendre ici.
Téléchargez ensuite la dernière version de Subsonic ici en choisissant Debian/Ubuntu.
Double-cliquez ensuite sur le fichier, l'installation se lancera ou en CLI:
sudo dpkg -i subsonic-6.1.3.deb
Le Daemon ne se lance pas automatiquement après l'installation, pour lancer Subsonic nous allons faire:
sudo systemctl start subsonic
Félicitation!, vous venez d'installer votre propre serveur de streaming audio/vidéo, le port d'écoute qu'utilise Subsonic par défaut et le port 4040, ouvrez donc votre navigateur internet puis saisissez dans la barre d'adresse ceci:
http://localhost:4040
Vous obtiendrez quelque chose semblable à ceci, je dis semblable car vous aurez pas ce thème par défaut à votre premier lancement de Subsonic :
Vous pouvez changer la langue en vous rendant dans Settings > Personal, puis suivre les instructions de la page d'accueil.
Une fois le ou les dossiers contenant les médias choisi, le service est fonctionnel. L'utilisation et la configuration sont très intuitives et ne présentent aucune difficulté particulière.
Il existe différentes applications disponible sur le site officiel. Pour contrôler la musique à distance grâce à un téléphone, se rendre sur cette page :
http://votre_ip_ou_votre_nom_de_domaine:4040/wap
Configuration
Si vous désirez changer le port de Subsonic, allouer plus de mémoires vives à Java ou bien sais-je .. vous devez éditer le fichier suivant:
/etc/default/subsonic
Voici à quoi ressemble ce fichier de configuration:
Étudions maintenant à quoi servent les variables de ce fichier :
La variable SUBSONIC_ARGS permet de définir le port d'écoute de Subsonic, la mémoire allouée à Java, de définir le port https si vous désirez utiliser le SSL pour cette application.
La variable SUBSONIC_USER permet de définir sous quel utilisateur tournera le Daemon Subsonic, par défaut Subsonic utilise root !.
Les logs de Subsonic se trouvent dans:
/var/subsonic/
Voici à quoi ressemble le subsonic.log :
Utiliser un certificat signé par une autorité de certification avec Subsonic
Ici nous allons voir comment utiliser un certificat acheté chez Namecheap, vous pouvez obtenir chez eux un certificat Comodo pour €8,23/yr.
Ici nous verrons pas comment générer un CSR etc, je pars du principe que vous avez votre .zip avec ces 3 fichiers:
- AddTrustExternalCARoot.crt.
- PositiveSSLCA2.crt.
- trucmuche.crt.
et bien sûr votre clé privé.
Nous devons absolument stopper notre daemon Subsonic auparavant:
sudo systemctl stop subsonic
Bon trêve de blabla on passe à la pratique, voici les commandes que vous devez effectuer pour utiliser votre certificat signé par l'autorité Comodo .
Ici nous allons combiner 3 fichiers, votre clé privé, le certificat du serveur, et le certificat intermédiaire pour se faire nous allons faire:
cat myserver.key trucmuche.crt AddTrustExternalCARoot.crt > subsonic.crt
Ensuite nous devons convertir notre certificat subsonic.crt à la norme PKCS12, c'est ce qu'utilise notre Tomcat ne l'oublions pas .
openssl pkcs12 -in subsonic.crt -export -out subsonic.pkcs12
Ensuite nous devons créer notre Java keystore pour se faire nous allons faire ceci:
keytool -importkeystore -srckeystore subsonic.pkcs12 -destkeystore subsonic.keystore -srcstoretype PKCS12 -srcalias 1 -destalias tomcat
Ensuite nous importons notre subsonic.keystore dans le subsonic-booter-jar-with-dependencies.jar.
zip /usr/share/subsonic/subsonic-booter-jar-with-dependencies.jar subsonic.keystore
Et voilà, ensuite vous devez configurer votre /etc/default/subsonic pour qu'il utilise https :
sudo nano /etc/default/subsonic
Chercher la ligne suivante:
Modifier le --port=blah et le --https-port=blah, vous pouvez mettre --port=0 pour désactiver le http et --https-port=4242 pour activer le SSL sur le port 4242, mais attention!, vous devez absolument choisir un port > à 1024 si votre daemon ne tourne pas en root, ce qui est préférable d'ailleurs .
Ensuite nous relançons notre daemon Subsonic via la commande suivante:
sudo systemctl start subsonic
Et zou magie vous aurez plus aucune erreur de certificat sur votre navigateur web, comme vous pouvez voir ci dessous:
Les entrailles de Subsonic
Dossier de musique
La fonction Dossier de musique permet de déterminer l'emplacement de vos musiques ainsi que de vos vidéos, comme vous pouvez voir, vous pouvez en définir plusieurs, c'est grâce à cette fonction que Subsonic sera où trouver vos vidéos ainsi que vos musiques.
La fonction Scan media folders permet de déterminer la date à laquelle Subsonic effectuera un scan de vos dossiers ou de votre dossier .. à fin de mettre à jour votre bibliothèque.
La fonction Scan media folders now permet de scanner dans l'immédiat les dossiers ou bien le dossier .. que vous avez prédéfinis auparavant à fin de mettre à jour votre bibliothèque, vous devez re scanner vos/votre dossier(s) après avoir appliqué cette fonction .
La fonction Fast access mode permet de minimiser l'accès à vos disques, cette fonction peut être utile si vous utilisez un NAS par exemple .
La fonction Clean-up database permet comme indique la fonction, de nettoyer la base de donnée de Subsonic, Subsonic stocke des informations dans vos fichiers multimédias.
Général
Extensions des fichiers vidéo: Permet d'indiquer les types de fichier reconnu quand vous naviguez dans vos dossiers vidéo.
Extensions des fichiers des jaquettes: Permet d'indiquer les types de fichier utilisés pour les jaquettes des albums.
Index: Permet de régler l'affichage de l'index (situé à gauche de l'écran). Les fichiers et dossiers situés directement à la racine du dossier de musiques/vidéos seront facilement accessibles en utilisant cet index. Les éléments de la liste des entrées de l'index doivent être séparés par un espace. Normalement chaque entrée est un caractère simple, mais vous pouvez choisir d'en afficher plusieurs. Par exemple, l'entrée Les rassemblera les dossiers et fichiers dont les noms commencent par Les. Vous pouvez également créer une entrée entre parenthèse qui regroupes plusieurs caractères. Par exemple, l'entrée A-E(ABCDE) affichera A-E et regroupera tous les fichiers et dossiers dont les noms commencent par A,B,C,D ou E. Cette option peut être utile pour regrouper les caractères les moins utilisés (comme les lettres x,y et z) ou les caractères accentués (comme À). Les fichiers et dossiers non indexés seront regroupés à l'entrée # .
Articles à ignorer: Permet de lister les articles à ignorer hors de la création de l'index (par exemple, "le", "The"….).
Raccourcis: Permet d'afficher une liste de raccourcis au sommet de la liste des dossiers, par exemple: Nouveau Podcast.
Langue par défaut: Permet de choisir la langue utilisé par défaut.
Thème par défaut: Permet de choisir le thème utilisé (couleurs, apparence, polices,images…) par défaut.
Avancé
Nombre maximum de jaquettes: Permet de définir le nombre maximum de jaquettes à afficher sur une page, le nombre 0 équivaut à illimité.
Limite de la vitesse de téléchargement (Kbps): Permet de limiter l'utilisation de la bande passante pour les téléchargements de fichiers, le nombre 0 équivaut à illimité.
Port pour les flux non-SSL: Cette option n'est utile que si vous utilisez Subsonic sur un serveur utilisant la technologie SSL (HTTPS). Certain lecteurs (comme Winamp) ne supportent pas le streaming par SSL. Si vous ne voulez pas que le flux soit transmis par SSL, indiquez un numéro de port pour une utilisation http (généralement 80 ou 4040). Notez que ce flux ne sera pas chiffré, (0 = Désactivé).
Autoriser l'authentification LDAP: Les utilisateurs peuvent être authentifiés par un serveur LDAP externe (dont Windows Active Directory). Quand ces utilisateurs se connectent sur Subsonic, leur nom d'utilisateur et mot de passe sont vérifiés par le serveur externe et non par Subsonic.
Encodage
Je sais ce que vous allez me dire, mais c'est quoi ce charabia , vous allez voir c'est relativement simple, ici je vais vous détailler les options de ffmpeg .
Audio
ffmpeg -i %s -ab %bk -v 0 -f mp3 -
Cette commande a pour but de ré-encoder à la volée les formats audio: ogg, oga, aac, m4a, flac, wav, wma, aif, aiff, ape, mpc, shn au format mp3 nous allons voir à quoi ressemble cette commande.
- Le -i signifie input file, ce qui signifie entrée du fichier.
- Le -ab permet de choisir le codec.
- Le -v est le mode verbose ou bien verbeux en Français , par défaut il est à 0.
- Le -f veut dire force, ici on force le format MP3.
- %s est le chemin du fichier à transcoder.
- %bk est le maximum du débit binaire utilisé pour l'encodage final vers le format MP3, le k signifie kilobyte.
Modification des sources
Se placer dans le dossier contenant les sources :
cd subsonic-code
Le patch à appliquer est le suivant :
Index: subsonic-main/src/main/java/net/sourceforge/subsonic/service/SettingsService.java =================================================================== --- subsonic-main/src/main/java/net/sourceforge/subsonic/service/SettingsService.java (revision 4101) +++ subsonic-main/src/main/java/net/sourceforge/subsonic/service/SettingsService.java (working copy) @@ -647,14 +647,11 @@ } public boolean isLicenseValid() { - return isLicenseValid(getLicenseEmail(), getLicenseCode()) && licenseValidated; + return true; } public boolean isLicenseValid(String email, String license) { - if (email == null || license == null) { - return false; - } - return license.equalsIgnoreCase(StringUtil.md5Hex(email.toLowerCase())); + return true; } public LicenseInfo getLicenseInfo() { @@ -1264,36 +1261,8 @@ private void validateLicense() { String email = getLicenseEmail(); Date date = getLicenseDate(); - - if (email == null || date == null) { - licenseValidated = false; - return; - } - licenseValidated = true; - - HttpClient client = new DefaultHttpClient(); - HttpConnectionParams.setConnectionTimeout(client.getParams(), 120000); - HttpConnectionParams.setSoTimeout(client.getParams(), 120000); - HttpGet method = new HttpGet("http://subsonic.org/backend/validateLicense.view" + "?email=" + StringUtil.urlEncode(email) + - "&date=" + date.getTime() + "&version=" + versionService.getLocalVersion()); - try { - ResponseHandler<String> responseHandler = new BasicResponseHandler(); - String content = client.execute(method, responseHandler); - licenseValidated = content != null && !content.contains("false"); - if (!licenseValidated) { - LOG.warn("License key is not valid."); - } - String[] lines = StringUtils.split(content); - if (lines.length > 1) { - licenseExpires = new Date(Long.parseLong(lines[1])); - } - - } catch (Throwable x) { - LOG.warn("Failed to validate license.", x); - } finally { - client.getConnectionManager().shutdown(); - } + return; } public synchronized void scheduleLicenseValidation() { Index: pom.xml =================================================================== --- pom.xml (revision 4101) +++ pom.xml (working copy) @@ -102,6 +102,13 @@ <module>subsonic-assembly</module> </modules> </profile> + <profile> + <id>debian</id> + <modules> + <module>subsonic-booter</module> + <module>subsonic-installer-debian</module> + </modules> + </profile> </profiles> @@ -170,4 +177,4 @@ </plugins> </build> -</project> \ No newline at end of file +</project>
Pour appliquer un patch, copiez le contenu du patch ci-dessus dans un nouveau fichier nommé "no_license.patch", et placez-le dans le dossier "subsonic-code". Appliquez ensuite le patch grâce à la commande :
patch -p0 < no_license.patch
Il reste à compiler tout ça :
mvn -P debian install
Maven va télécharger de nombreux plugins, cela peut prendre du temps ;) Si tout s'est bien passé, vous devriez obtenir :
[INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Subsonic .......................................... SUCCESS [1.889s] [INFO] Subsonic Main ..................................... SUCCESS [15.290s] [INFO] Subsonic Booter ................................... SUCCESS [5.499s] [INFO] Subsonic Installer for Debian ..................... SUCCESS [10.345s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 33.277s [INFO] Finished at: Thu Jan 09 22:06:15 CET 2014 [INFO] Final Memory: 13M/106M [INFO] ------------------------------------------------------------------------
Il ne nous reste plus qu'à installer le paquet créé :
sudo dpkg -i subsonic-installer-debian/target/subsonic*.deb
Ça marche pas...
Si vous avez un problème de compilation (le patch fonctionne pour la révision 4101, version 5.0 de Subsonic, mais il ne pourrait plus fonctionner pour les versions ultérieures), voici quelques explications qui vous permettront d'adapter les modifications vous-même.
Tout d'abord, dans le fichier "pom.xml", on ajoute le profil "debian", pour ne compiler que ce qui est nécessaire à Ubuntu, grâce aux lignes 105 à 111 (fichier exemple modifié, révision 4101) :
<profile> <id>debian</id> <modules> <module>subsonic-booter</module> <module>subsonic-installer-debian</module> </modules> </profile>
Ensuite, pour le fichier de licence proprement dit "subsonic-main/src/main/java/net/sourceforge/subsonic/service/SettingsService.java", 3 méthodes sont modifiées :
public boolean isLicenseValid() { return true; } public boolean isLicenseValid(String email, String license) { return true; } private void validateLicense() { String email = getLicenseEmail(); Date date = getLicenseDate(); licenseValidated = true; return; }
Voici la source avec la licence active, et la source avec la licence désactivée (valable pour la révision 4101). Bon courage !
Désinstallation
Pour supprimer cette application, il suffit de supprimer son paquet. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.
Fork de Subsonic : Airsonic
- Airsonic, Open Source et Libre, compatible avec Subsonic et disponible sur des multiples plate-formes.
Voir aussi
- Jinzora, un autre serveur de streaming.
- iceCast2, un autre serveur de streaming.
- Gnump3d, un serveur de streaming plus simple, mais avec moins de fonctionnalités.
Contributeurs principaux : clement.analogue, BeAvEr (Refonte de la documentation).