Files
pmomusic/pmomediaserver
Eric Coissac 934bbaf4b8 ⬆️ migration mdns →mddns-sd
- Remplacer la crate abandonnée `mdns` (3.0, non-UTF8) par activement maintenue et UTF‑compliant `mdns-sd` (0.19)
- Supprimer les dépendances inutiles `async‑std`, `futures-util` (uniquement utilisées dans le thread mDNS)
- Refactoriser `control_point.rs` : passer d’un bloc async bloquant à une boucle synchrone avec `ServiceDaemon.browse()` + récepteur blocant
- Simplifier drastiquement le parsing dans `chromecast_discovery.rs` via l’API haut‑niveau de mdns-sd (`ServiceInfo`, `get_property_val_str`) → ~80 lignes remplacées par 52
- Ajouter index SQLite `idx_metadata_key_value` pour accélérer les requêtes par origin_url
- Nettoyer exports inutiles dans `pmomediaserver::server_ext`
- Supprimer filtre de bruit obsolète `mdns=error` dans les logs
- Met à jour la version en 0.3.42
2026-04-09 15:50:18 +02:00
..
2026-04-09 15:50:18 +02:00

pmomediaserver

Implémentation d'un MediaServer UPnP conforme à la spécification UPnP AV Architecture.

Description

Cette crate fournit un MediaServer UPnP qui permet d'exposer et de servir du contenu audio à des clients UPnP (MediaRenderer). Elle suit le même modèle architectural que la crate pmomediarenderer.

Architecture

Le MediaServer est composé de deux services obligatoires :

  • ContentDirectory : Gestion du contenu et de la navigation dans la bibliothèque musicale
  • ConnectionManager : Gestion des connexions et des protocoles supportés

Device UPnP

  • Type : urn:schemas-upnp-org:device:MediaServer:1
  • Services : ContentDirectory:1, ConnectionManager:1

Utilisation

use pmomediaserver::MEDIA_SERVER;
use pmoupnp::UpnpServer;

// Le device est déjà configuré avec tous ses services
let server = MEDIA_SERVER.clone();

// Créer une instance du server
let instance = server.create_instance();

// Enregistrer le server sur un serveur UPnP
upnp_server.register_device(server).await?;

Dépendances

  • pmoupnp : Fournit l'infrastructure UPnP de base (devices, services, actions, state variables)
  • pmodidl : Pour la gestion des métadonnées DIDL-Lite
  • once_cell : Pour les initialisations lazy
  • bevy_reflect : Pour la réflexion et l'introspection

Services

ContentDirectory

Service de gestion du contenu conforme UPnP ContentDirectory:1. Permet de naviguer et rechercher dans la bibliothèque musicale.

Actions supportées :

  • Browse
  • Search
  • GetSearchCapabilities
  • GetSortCapabilities
  • GetSystemUpdateID
  • CreateObject (optionnel)
  • DestroyObject (optionnel)
  • UpdateObject (optionnel)

ConnectionManager

Service de gestion des connexions conforme UPnP ConnectionManager:1. Gère les protocoles supportés.

Actions supportées :

  • GetProtocolInfo
  • GetCurrentConnectionIDs
  • GetCurrentConnectionInfo
  • PrepareForConnection (optionnel)
  • ConnectionComplete (optionnel)

Licence

Voir le fichier LICENSE à la racine du projet.