Logiciel client/serveur pour lire et télécharger des vidéos
Ces dernières semaines, j'ai réalisé plusieurs Pull Requests sur des projets écrits en Go. J'ai travaillé sur une fonctionnalité qui permet d'ajouter des informations dans le registre de paquet de Gitea, j'ai corrigé un bug sur l'outil d'intégration continue Woodpecker et j'ai proposé une fonctionnalité pour Codeberg/pages-server que j'utilise pour héberger des pages statiques. Ces contributions étaient mes premiers pas avec Go et j'ai vraiment apprécié ce langage.
Pour en apprendre un peu plus, j'ai décidé de réécrire un projet initialement en PHP. Le use case est très personnel, mais il peut sans doute plaire à d'autres personnes. Il s'agit d'un outil client/server en ligne de commande pour servir des fichiers vidéos distants.
Le projet s'appelle Mugo et les sources sont libres ! Je fourni un unique binaire qui permet de lancer le serveur et le client.
Côté serveur, il suffit de définir quel est le répertoire où se trouvent les vidéos, sur quel port écouter et l'adresse publique du serveur web qui sera démarré (API). Coté client, on définit l'adresse du serveur web (API) et éventuellement les filtres à appliquer.
Une fois le serveur démarré, le client peut s'y connecter et afficher les vidéos disponibles. Les vidéos pourront être sélectionnées interactivement avec leur numéro ou en spécifiant une plage.
Pour démarrer le serveur, la commande est simple : mugo serve
. Le répertoire courant sera servi par défaut et il écoutera sur le port 4000
. Il est possible de spécifier l'adresse publique du serveur avec l'argument --api-url
(si reverse proxy par exemple).
Dans mon cas, l'API exposée par le serveur est accessible via un frontend Apache2. L'adresse du proxy est sous la forme https://videos.example.com
. Mes fichiers sont stockés dans le répertoire /srv/videos
(sous répertoires inclus). Voilà comment je lance le serveur :
$ mugo serve -d /srv/videos -u https://videos.example.com
Je peux maintenant accéder à l'API via https://videos.example.com/api/list
.
Côté client, je peux afficher la liste des vidéos comme suit. Le résultat de chacunes de ces commandes sera une liste de vidéos avec un prompt interactif.
# Lire les fichiers (mpv)
$ mugo play -u https://videos.example.com
# Télécharger les fichiers (wget)
$ mugo download -u https://videos.example.com
$ mugo download -d "$HOME/Videos" -u https://videos.example.com
# Afficher que les fichiers qui contiennent "batman"
$ mugo play -u https://videos.example.com -n batman
# …et les ordonner par nom
$ mugo play -u https://videos.example.com -n batman -o name
Toutes les infos sur le projet son dispos sur Gitnet 🙂