.Shad. Posté(e) le 3 juin 2023 Partager Posté(e) le 3 juin 2023 (modifié) 1. Préambule Mopidy est un serveur musical open source et modulaire permettant de streamer localement votre musique, ainsi que d'intégrer un nombre conséquent de services de streaming audio tels que Soundcloud, Youtube, Youtube Music, Tidal, etc... (Spotify n'est plus pris en charge actuellement). Il intègre également de nombreux protocoles de communication : mqtt, json rpc, tcp, etc... et le rend donc adapté à un large panel d'utilisations. Iris est une extension web de Mopidy, qui fournit une interface graphique moderne et l'intégration de différentes extensions de Mopidy et autre protocoles. Snapcast, enfin, qui est un logiciel permettant la diffusion de musique par le réseau. C'est une alternative libre et bon marché à des systèmes tels que ceux proposés par Sonos ou Apple. C'est un tutoriel que j'essaie de rédiger depuis un petit temps déjà, mais : je ne voyais pas comment présenter ça de façon simple et compréhensible par tous je n'étais pas satisfait des images Docker existantes l'intégration de Snapcast avec Iris n'était pas heureuse via Docker Depuis, une image Docker facilitant l'interconfiguration des services a été publiée, et me permet aujourd'hui de vous présenter cette pépite. 2. Objectifs Si vous naviguez un peu sur le site de Mopidy, vous verrez qu'un nombre conséquent d'intégrations sont possibles, de fait, je ne vais pas m'étendre sur tout ce qu'on peut réaliser, mais plutôt sur la fonctionnalité diffusion multiroom, qui n'est pas forcément bien documentée que ce soit sur le Github d'Iris ou de Snapcast. Encore moins dans le cadre d'un NAS, qui est pourtant une idée relativement logique dans le cadre d'un serveur de musique centralisé. Ce qui sera abordé dans ce tutoriel : L'installation et la configuration de deux instances de Mopidy (à multiplier suivant le nombre de flux différents que vous souhaitez pouvoir diffuser) La diffusion de bibliothèque musicale locale La configuration des clients Ce qui sera abordé dans un second temps si engouement pour le sujet : L'utilisation d'un proxy inversé avec Iris => quelques bugs que je trouve personnellement gênants mais certains y tiendront sûrement 😉 L'intégration des différents services de streaming online supportés par Mopidy (voir extensions) => chaque extension possède sa propre manière d'être configurée, voir la doc associée ; dans tous les cas cela passe par la modification des fichiers mopidy.conf et l'ajout de fichiers supplémentaires parfois 3. Principe de fonctionnement Configuration du système : Une seule interface pour accéder aux différentes instances, à laquelle on accède depuis PC, mobile, tablette, etc... Des clients Le NAS, qui hébergera les différents services Remarque : Un client statique est un client de type "headless", qui n'accèdera pas à l'interface d'Iris mais recevra uniquement le flux depuis Snapcast. Un client dynamique peut être le smartphone avec lequel vous ajoutez des morceaux en liste de lecture, il peut également devenir un périphérique recevant des informations de Snapcast. 5. Prérequis Difficulté : Moyenne Un NAS compatible Docker Des clients Ports 1780, 6600, 6700, 6680 et 6780 (si deuxième instance) du NAS accessibles aux clients 6. Hypothèses IP du NAS : 192.168.100.100 FQDN (nom d'hôte avec domaine) du NAS : nas.xxxxxx.synology.me => à adapter à votre domaine utilisé en local (voir tutoriel sur la mise en place d'un serveur DNS local) 7. Installation 7-A. Fichier compose L'installation se fera principalement en SSH. Avec la version 7.2 de DSM, il est possible de rédiger le fichier compose via l'interface de Container Manager (nouveau nom du paquet Docker), restent certaines commandes qui ne peuvent être accomplies que par terminal, à vous de voir ce que vous préférez, si vous savez le faire en lignes de commande vous n'aurez aucune difficulté à le faire via Container Manager. Vous pouvez consulter mon tutoriel introductif à Docker pour plus d'informations sur les étapes qui vont suivre. Et maintenant, c'est parti ! On crée le dossier pour Iris dans le dossier partagé docker : mkdir -p /volume1/docker/iris Puis on crée le fichier compose : nano /volume1/docker/iris/docker-compose.yml Révélation version: "2.1" services: iris-snapserver: image: jaedb/snapserver container_name: iris-snapserver network_mode: host volumes: # for fifo stream output - /tmp/snapserver:/tmp # snapserver config - /volume1/docker/iris/snapserver/snapserver.conf:/etc/snapserver.conf:ro # mopidy iris stream plugin - /volume1/docker/iris/snapserver/meta_mopidy.py:/usr/share/snapserver/plug-ins/meta_mopidy.py:ro depends_on: - iris-instance1 - iris-instance2 restart: unless-stopped iris-instance1: image: jaedb/iris container_name: iris-instance1 network_mode: host #environment: #- PIP_PACKAGES=Mopidy-YTMusic Mopidy-Tidal Mopidy-SoundCloud volumes: # iris-specific storage - /volume1/docker/iris/instance1/data:/var/lib/mopidy/iris # playlists - /volume1/docker/iris/playlists:/var/lib/mopidy/m3u # config - /volume1/docker/iris/instance1/config:/config:ro # local - /volume1/docker/iris/local:/var/lib/mopidy/local # music files - /volume1/music/bibliotheque:/var/lib/mopidy/media:ro # for fifo stream output - /tmp/snapserver:/tmp restart: unless-stopped iris-instance2: image: jaedb/iris container_name: iris-instance2 network_mode: host #environment: #- PIP_PACKAGES=Mopidy-YTMusic Mopidy-Tidal Mopidy-SoundCloud volumes: # iris-specific storage - /volume1/docker/iris/instance2/data:/var/lib/mopidy/iris # playlists - /volume1/docker/iris/playlists:/var/lib/mopidy/m3u # config - /volume1/docker/iris/instance2/config:/config:ro # local - /volume1/docker/iris/local:/var/lib/mopidy/local # music files - /volume1/music/bibliotheque:/var/lib/mopidy/media:ro # for fifo stream output - /tmp/snapserver:/tmp restart: unless-stopped Remarques : On regroupe tout dans une seule stack, les services n'ayant pas vocation à fonctionner individuellement On se place sur l'hôte directement, pour faciliter la détection en broadcast sur le réseau local // IMPORTANT \\ On ne peut pas directement monter le dossier partagé "music" dans le conteneur, c'est valable pour tout autre dossier partagé a fortiori. Et ce, pour des raisons de permission : en effet les dossiers partagés ne sont pas soumis aux ACL de DSM Donc par exemple, créer un dossier intermédiaire, "bibliothèque" dans mon cas // IMPORTANT \\ On différencie l'emplacement des playlists qu'on va créer de l'emplacement des musiques car : on va chowner le dossier contenant les playlists Mopidy, on évite de faire ça sur un dossier utilisé par d'autre programmes on va monter notre médiathèque en lecture seule pour éviter toute modification accidentelle, ce qui en revanche posera problème pour des playlists qu'on sera amené à modifier J'ai nommé mes instances "iris-instance1" et "iris-instance2", à adapter à votre guise dans la suite du tutoriel. Je crée un dossier "local" commun, qui contiendra les métadonnées des morceaux scannés, ça m'évitera de devoir scanner pour chaque instance. Si pour une raison ou une autre, vous ne souhaitez pas disposer de la même bibliothèque sur l'une et l'autre des instances, créez deux dossiers "local" dans instance1 et instance2. La variable d'environnement PIP_PACKAGES est utile pour installer des extensions Mopidy supplémentaires, commentée par défaut car intégrations non traîtées ici. 7-B. Préparation des dossiers et fichiers 7-B-1. Dossiers de configuration Pas spécialement adapté pour s'installer sur un NAS, OS base Linux avec ses restrictions, on va créer en amont les dossiers dont les services auront besoin lors de la création de la stack. En SSH, connectez-vous avec un utilisateur disposant des droits d'écriture dans le dossier partagé docker : mkdir -p /volume1/docker/iris/instance1/config \ /volume1/docker/iris/instance1/data \ /volume1/docker/iris/instance2/config \ /volume1/docker/iris/instance2/data \ /volume1/docker/iris/snapserver \ /volume1/docker/iris/local \ /volume1/docker/iris/playlists On va maintenant changer la propriété des dossiers pour respectivement : pouvoir télécharger les métadonnées de nos morceaux, albums, artistes, etc... écrire et modifier des playlists Mopidy ajouter des token d'identification pour les services de stream online (non traîté ici) sudo chown 105:users /volume1/docker/iris/instance1/config \ /volume1/docker/iris/instance1/data \ /volume1/docker/iris/instance2/config \ /volume1/docker/iris/instance2/data \ /volume1/docker/iris/local \ /volume1/docker/iris/playlists Remarque : L'utilisateur d'ID 105 est celui qui écrira dans ces dossiers, or il n'est évidemment pas repris par les ACL DSM, donc pour ne pas toucher aux ACL Synology et garantir l'accès aux dossiers en question, on ne chmod pas mais on chown. 7-B-2. Fichiers de configuration On va créer un fichier de configuration qui écrasera les paramètres par défaut du serveur Mopidy, pour l'adapter à notre besoin. 7-B-2-a. Instance1 nano /volume1/docker/iris/instance1/config/mopidy.conf Révélation # To check the actual config for a running iris container : # # docker exec -it <iris container name> mopidy config ################ # CORE PLUGINS # ################ [core] data_dir = /var/lib/mopidy [audio] output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/stream1_fifo [file] enabled = false [http] hostname = 0.0.0.0 default_app = iris allowed_origins = nas.xxxxxx.synology.me:6680 192.168.100.100:6680 [mpd] hostname = 0.0.0.0 [m3u] playlists_dir = /var/lib/mopidy/m3u ########## # ADDONS # ########## [local] media_dir = /var/lib/mopidy/media scan_timeout = 5000 excluded_file_extensions = .cue .directory .html .jpeg .jpg .log .nfo .pdf .png .txt .zip .db .ini .m3u .m3u8 [musicbox_webclient] enabled = false ######## # IRIS # ######## [iris] snapcast_enabled = true snapcast_host = nas.xxxxxx.synology.me snapcast_ssl = false snapcast_stream = STREAM1 #################### # STREAM PROVIDERS # #################### [spotify] enabled = false [youtube] enabled = false [ytmusic] enabled = false [soundcloud] enabled = false 7-B-2-b. Instance2 nano /volume1/docker/iris/instance2/config/mopidy.conf Révélation # To check the actual config for a running iris container : # # docker exec -it <iris container name> mopidy config ################ # CORE PLUGINS # ################ [core] data_dir = /var/lib/mopidy [audio] output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/stream2_fifo [file] enabled = false [http] hostname = 0.0.0.0 port = 6780 default_app = iris allowed_origins = nas.xxxxxx.synology.me:6680 192.168.100.100:6680 [mpd] hostname = 0.0.0.0 port = 6700 [m3u] playlists_dir = /var/lib/mopidy/m3u ########## # ADDONS # ########## [local] media_dir = /var/lib/mopidy/media scan_timeout = 5000 excluded_file_extensions = .cue .directory .html .jpeg .jpg .log .nfo .pdf .png .txt .zip .db .ini .m3u .m3u8 [musicbox_webclient] enabled = false ######## # IRIS # ######## [iris] snapcast_enabled = true snapcast_host = nas.xxxxxx.synology.me snapcast_ssl = false snapcast_stream = STREAM2 #################### # STREAM PROVIDERS # #################### [spotify] enabled = false [youtube] enabled = false [ytmusic] enabled = false [soundcloud] enabled = false Remarques : Dans instance1, on pense à modifier nas.xxxxxx.synology.me par son nom de domaine Dans instance2, on a modifié le port de l'instance pour éviter la collision avec la première, on utilise le port 6780 7-B-2-b. Snapserver On va télécharger le fichier de configuration depuis le Github : wget https://raw.githubusercontent.com/badaix/snapcast/master/server/etc/snapserver.conf -P /volume1/docker/iris/snapserver/ qu'on édite ensuite : nano /volume1/docker/iris/snapserver/snapserver.conf en commentant la ligne (on ajoute un # devant) : source = pipe:///tmp/snapfifo?name=default et on ajoute les lignes suivantes directement à la suite : source = pipe:///tmp/stream1_fifo?name=STREAM1&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me source = pipe:///tmp/stream2_fifo?name=STREAM2&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me%20--mopidy-port=6780 Remarque : On pense à modifier nas.xxxxxx.synology.me par son nom de domaine On va également télécharger le script python faisant le lien entre Iris et Snapcast : wget https://raw.githubusercontent.com/badaix/snapcast/master/server/etc/plug-ins/meta_mopidy.py -P /volume1/docker/iris/snapserver/ 7-B-3. Dossiers de stream On crée un dossier qui accueillera nos fifo de stream Snapcast, et je les rends accessible par tous en écriture : mkdir -p /tmp/snapserver && sudo chmod 777 /tmp/snapserver 7-C. Création de la stack On est prêt, plus qu'à lancer la stack : sudo docker-compose -f /volume1/docker/iris/docker-compose.yml up -d && sudo docker-compose -f /volume1/docker/iris/docker-compose.yml logs -f Les logs devraient donner quelque chose de la sorte : Révélation iris-snapserver | 2023-06-04 21-37-22.392 [Info] (Snapserver) Version 0.27.0, revision 54a3d862 iris-snapserver | 2023-06-04 21-37-22.404 [Info] (Snapserver) Adding source: pipe:///tmp/stream1_fifo?name=STREAM1&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me iris-snapserver | 2023-06-04 21-37-22.404 [Info] (Snapserver) Adding source: pipe:///tmp/stream2_fifo?name=STREAM2&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me%20--mopidy-port=6780 iris-snapserver | 2023-06-04 21-37-22.404 [Notice] (init) Settings file: "/root/.config/snapserver/server.json" iris-snapserver | 2023-06-04 21-37-22.404 [Info] (Snapserver) Using HTTP host name: NAS iris-snapserver | 2023-06-04 21-37-22.404 [Error] (Avahi) Failed to create client: Daemon not running iris-snapserver | 2023-06-04 21-37-22.404 [Info] (PcmStream) PcmStream: STREAM1, sampleFormat: 48000:16:2 iris-snapserver | 2023-06-04 21-37-22.405 [Info] (PipeStream) PipeStream mode: create iris-snapserver | 2023-06-04 21-37-22.405 [Info] (Server) Stream: {"fragment":"","host":"","path":"/tmp/stream1_fifo","query":{"chunk_ms":"20","codec":"flac","controlscript":"meta_mopidy.py","controlscriptparams":"--mopidy-host=nas.xxxxxx.synology.me","name":"STREAM1","sampleformat":"48000:16:2"},"raw":"pipe:////tmp/stream1_fifo?chunk_ms=20&codec=flac&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me&name=STREAM1&sampleformat=48000:16:2","scheme":"pipe"} iris-snapserver | 2023-06-04 21-37-22.405 [Info] (PcmStream) PcmStream: STREAM2, sampleFormat: 48000:16:2 iris-snapserver | 2023-06-04 21-37-22.405 [Info] (PipeStream) PipeStream mode: create iris-snapserver | 2023-06-04 21-37-22.405 [Info] (Server) Stream: {"fragment":"","host":"","path":"/tmp/stream2_fifo","query":{"chunk_ms":"20","codec":"flac","controlscript":"meta_mopidy.py","controlscriptparams":"--mopidy-host=nas.xxxxxx.synology.me --mopidy-port=6780","name":"STREAM2","sampleformat":"48000:16:2"},"raw":"pipe:////tmp/stream2_fifo?chunk_ms=20&codec=flac&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me --mopidy-port=6780&name=STREAM2&sampleformat=48000:16:2","scheme":"pipe"} iris-snapserver | 2023-06-04 21-37-22.405 [Info] (FlacEnc) Init - compression level: 2 iris-snapserver | 2023-06-04 21-37-22.463 [Error] (PosixStream) Exception: end of file iris-snapserver | 2023-06-04 21-37-22.463 [Info] (FlacEnc) Init - compression level: 2 iris-snapserver | 2023-06-04 21-37-22.464 [Error] (PosixStream) Exception: end of file iris-snapserver | 2023-06-04 21-37-22.464 [Info] (ControlServer) Creating TCP acceptor for address: 0.0.0.0, port: 1705 iris-snapserver | 2023-06-04 21-37-22.464 [Info] (ControlServer) Creating HTTP acceptor for address: 0.0.0.0, port: 1780 iris-snapserver | 2023-06-04 21-37-22.464 [Info] (StreamServer) Creating stream acceptor for address: 0.0.0.0, port: 1704 iris-snapserver | 2023-06-04 21-37-22.464 [Info] (Snapserver) Number of threads: 4, hw threads: 4 iris-instance2 | INFO 2023-06-04 21:37:34,067 [7:MainThread] mopidy.__main__ iris-instance1 | INFO 2023-06-04 21:37:34,066 [7:MainThread] mopidy.__main__ iris-instance1 | Starting Mopidy 3.4.1 iris-instance2 | Starting Mopidy 3.4.1 iris-instance1 | INFO 2023-06-04 21:37:34,796 [7:MainThread] mopidy.config iris-instance1 | Loading config from builtin defaults iris-instance1 | INFO 2023-06-04 21:37:34,799 [7:MainThread] mopidy.config iris-instance1 | Loading config from file:///config/mopidy.conf iris-instance1 | INFO 2023-06-04 21:37:34,800 [7:MainThread] mopidy.config iris-instance1 | Loading config from command line options iris-instance1 | INFO 2023-06-04 21:37:35,170 [7:MainThread] mopidy.internal.path iris-instance1 | Creating dir file:///var/lib/mopidy/.cache/mopidy iris-instance2 | INFO 2023-06-04 21:37:34,796 [7:MainThread] mopidy.config iris-instance2 | Loading config from builtin defaults iris-instance2 | INFO 2023-06-04 21:37:34,799 [7:MainThread] mopidy.config iris-instance2 | Loading config from file:///config/mopidy.conf iris-instance2 | INFO 2023-06-04 21:37:34,800 [7:MainThread] mopidy.config iris-instance2 | Loading config from command line options iris-instance2 | INFO 2023-06-04 21:37:35,170 [7:MainThread] mopidy.internal.path iris-instance2 | Creating dir file:///var/lib/mopidy/.cache/mopidy iris-instance2 | INFO 2023-06-04 21:37:39,210 [7:MainThread] mopidy.__main__ iris-instance1 | INFO 2023-06-04 21:37:39,210 [7:MainThread] mopidy.__main__ iris-instance1 | Enabled extensions: local, m3u, iris, mpd, softwaremixer, stream, http iris-instance1 | INFO 2023-06-04 21:37:39,211 [7:MainThread] mopidy.__main__ iris-instance1 | Disabled extensions: file, musicbox_webclient, youtube, spotify, ytmusic, soundcloud iris-instance2 | Enabled extensions: m3u, local, softwaremixer, stream, mpd, iris, http iris-instance2 | INFO 2023-06-04 21:37:39,210 [7:MainThread] mopidy.__main__ iris-instance2 | Disabled extensions: soundcloud, file, ytmusic, spotify, musicbox_webclient, youtube iris-instance1 | INFO 2023-06-04 21:37:40,694 [7:MainThread] mopidy.commands iris-instance2 | INFO 2023-06-04 21:37:40,715 [7:MainThread] mopidy.commands iris-instance2 | Starting Mopidy mixer: SoftwareMixer iris-instance2 | INFO 2023-06-04 21:37:40,716 [7:MainThread] mopidy.commands iris-instance2 | Starting Mopidy audio iris-instance2 | INFO 2023-06-04 21:37:40,718 [7:MainThread] mopidy.commands iris-instance2 | Starting Mopidy backends: LocalBackend, M3UBackend, StreamBackend iris-instance2 | INFO 2023-06-04 21:37:40,976 [7:Audio-2] mopidy.audio.actor iris-instance2 | Audio output set to "audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/stream2_fifo" iris-instance1 | Starting Mopidy mixer: SoftwareMixer iris-instance1 | INFO 2023-06-04 21:37:40,695 [7:MainThread] mopidy.commands iris-instance1 | Starting Mopidy audio iris-instance1 | INFO 2023-06-04 21:37:40,696 [7:MainThread] mopidy.commands iris-instance1 | Starting Mopidy backends: LocalBackend, M3UBackend, StreamBackend iris-instance1 | INFO 2023-06-04 21:37:40,834 [7:MainThread] mopidy.commands iris-instance1 | Starting Mopidy core iris-instance1 | INFO 2023-06-04 21:37:40,840 [7:MainThread] mopidy.commands iris-instance1 | Starting Mopidy frontends: MpdFrontend, IrisFrontend, HttpFrontend iris-instance1 | ERROR 2023-06-04 21:37:40,841 [7:MainThread] mopidy.commands iris-instance1 | Frontend (MpdFrontend) initialization error: MPD server startup failed: [Errno 98] Address already in use iris-instance1 | INFO 2023-06-04 21:37:40,841 [7:IrisFrontend-7] mopidy_iris.core iris-instance1 | Starting Iris 3.67.0 iris-instance1 | INFO 2023-06-04 21:37:40,842 [7:HttpFrontend-9] mopidy.http.actor iris-instance1 | HTTP server running at [::ffff:0.0.0.0]:6680 iris-instance1 | INFO 2023-06-04 21:37:40,842 [7:MainThread] mopidy.commands iris-instance1 | Starting GLib mainloop iris-instance1 | INFO 2023-06-04 21:37:40,962 [7:HttpServer] mopidy.internal.path iris-instance1 | Creating dir file:///var/lib/mopidy/http iris-instance1 | INFO 2023-06-04 21:37:40,975 [7:Audio-2] mopidy.audio.actor iris-instance1 | Audio output set to "audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/stream1_fifo" 8. Interface IRIS 8-A. Configuration générale et Instance1 On se rend maintenant à l'adresse http://nas.xxxxxx.synology.me:6680: On se dirige ensuite vers les Settings, catégorie Server, et on renomme l'instance : On va ensuite dans Services configurer Snapcast, on modifie localhost pour le nom d'hôte de notre NAS, et on coche Enabled : On peut également se connecter à LastFM pour récupérer les vignettes des artistes, et à Genius pour que les paroles des chansons défilent pendant la lecture. // IMPORTANT \\ La librairie utilisée pour Mopidy n'est plus supportée par Spotify, évitez donc de vous y connecter. Dans Interface, j'aime bien généralement cocher "Wide scrollbars". 8-B. Instance2 On va maintenant rajouter notre seconde instance, vers laquelle on pourra facilement switcher d'un clic, on retourne dans Server, on clique sur "+ Add New Server" : Si tout s'est correctement exécuté auparavant, vous devriez obtenir le statut Connected, vous remarquerez également que les réglages des autres catégories persistent. 8-C. Exportation et sauvegarde de la configuration sur le serveur Afin d'éviter de répéter la majorité de ces étapes pour les prochains clients dynamiques, on peut aller dans la catégorie Advanced -> Share configuration => Export/share : Vous pourrez dorénavant importer la configuration depuis le serveur (il faut prélablement se connecter à une des instances depuis un nouveau périphérique) en cliquant sur Import from server. Cela ne fonctionne que pour les paramètres généraux, la deuxième instance devra être ajoutée comme initialement. 8-D. Indexation des morceaux On va maintenant lancer l'indexation des morceaux, on peut le faire par l'interface, suivant le CPU ça peut prendre plus ou moins de temps, comptez environ 1m30 par 1000 morceaux. Pour cela, deux méthodes : via le terminal : sudo docker exec -it iris-instance1 mopidy local scan Ou si je veux faire un test avec un nombre réduit de morceaux : sudo docker exec -it iris-instance1 mopidy local scan --limit 100 via l'interface, dans Advanced, on clique sur Start local scan (full scan par contre) : Une fois le scan terminé, je peux aller dans l'onglet Albums, et cliquer sur Refresh tout en haut à droite de la fenêtre : On va faire clic droit sur un album -> Add to queue, les morceaux sont maintenant dans l'onglet Now playing, en attente d'un ordre de lecture. 8-E. Lecture synchronisée Voilà, il ne reste plus qu'à tester, oui mais où ? et bien sur notre périphérique ! on retourne dans Settings -> Services -> Snapcast -> on coche Streaming enabled : Je peux renommer mon groupe, rez-de-chaussée (RDC) par exemple, et lui dire qu'il diffusera le flux Snapcast STREAM1, émis par Instance1. Dans ce groupe, j'ai renommé mon périphérique appelé par défaut "Snapweb client" en PC, plus parlant. Je vais maintenant ajouter un deuxième périphérique, par exemple mon smartphone, je vais donc importer les données de configuration précédemment enregistrées sur le serveur. En cliquant sur Streaming enabled, un nouveau groupe apparaît (j'ai renommé mon périphérique du nom de mon smartphone) : Allons maintenant dans Now playing, et lançons la musique depuis la barre de lecture en bas de page. Si tout se passe bien, vous devriez entendre la musique jouée conjointement, et en parfaite synchronisation, depuis les deux clients ! Pourquoi ne pas, par exemple, les mettre dans le même groupe ? On clique sur Group dans la tuile correspondant au 2ème périphérique (voir impression d'écran ci-dessus), et on choisit RDC. Maintenant, on peut contrôler le volume général du groupe depuis Volume (barre horizontale) et le volume individuel de chaque périphérique sinon (barre verticale). Si je ne veux plus qu'ils soient groupés, je reclique sur Group, puis New Group. Je peux également changer le flux lu par un groupe depuis Stream. Pas tout à fait synchronisés ? la barre de Latency est là pour ça, on peut ajuster le décalage en avance ou retard de phase des périphériques indépendamment. C'est notamment une fonction utile pour les périphériques clients qui diffusent via Bluetooth. 8-F. Playlists 8-F-1. Playlist locale Pour créer une playlist, je clic droit sur un morceau, Add to playlist -> je crée une nouvelle playlist ou j'en choisis une existante. Il faudra ensuite aller dans l'onglet Playlists et cliquer sur Refresh comme pour les albums pour les voir apparaître. 8-F-1. Radios Je vais vider ma liste d'attente, pour cela je clique sur Clear : Dans cette page, je clique ensuite sur Add en haut à droite, je vais ajouter l'URL d'une radio, par exemple M Disney : Je dois cliquer sur + Add à droite avant de cliquer Add en bas, la radio apparaît ensuite dans la liste des morceaux en attente, et je peux cliquer droit (ou ...) pour lancer la lecture ou pour l'ajouter à une playlist. 9. Configuration des clients statiques Nous allons maintenant voir comment configurer des clients statiques, par exemple sous Linux. sudo apt-get install snapclient Puis : sudo nano /etc/default/snapclient # Start the client, used only by the init.d script START_SNAPCLIENT=true # Additional command line options that will be passed to snapclient # note that user/group should be configured in the init.d script or the systemd unit file # For a list of available options, invoke "snapclient --help" SNAPCLIENT_OPTS="--host nas.xxxxxx.synology.me" Je lance le service : sudo systemctl start snapclient.service Je fais en sorte qu'il se lance au démarrage : sudo systemctl enable snapclient.service Entre temps, vous devriez voir un nouveau périphérique parmi les clients Snapcast dans votre interface Iris. 10. Quelques commandes utiles Pour supprimer la base de métadonnées : sudo docker exec -it <nom du conteur iris> mopidy local clear Pour vérifier la configuration utilisée par une instance (celle-ci affichera tous les champs, ceux par défaut et ceux que vous avez écrasés dans votre fichier de configuration) : sudo docker exec -it <nom du conteur iris> mopidy config 11. Conclusion Je ne couvre dans ce tutoriel qu'une petite partie des fonctionnalités disponibles, on peut trier les recherches suivant les sources, ce qui prend son importance si l'on commence à intégrer différents services de streaming. Il existe une extension MopiQTT(non officielle) qui prend en charge MQTT, ou encore la possibilité de créer des webhooks via Commands => Add : Ainsi qu'un module HomeAssistant : https://github.com/bushvin/hass-integrations Pour ceux qui sont un peu initiés, les possibilités domotiques sont énormes. MàJ : 06/06/2023 Modifié le 6 juin 2023 par .Shad. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.