Implémentation du WebRenderer et améliorations du serveur

Ajout de la fonctionnalité WebRenderer permettant au navigateur de se connecter comme renderer UPnP.

- Implémentation du composant Vue useWebRenderer pour gérer la connexion WebSocket et le contrôle audio
- Ajout d'un proxy WebSocket dans Vite pour rediriger les requêtes /api/webrenderer/ws vers le serveur
- Modification du serveur pour permettre l'enregistrement dynamique de routes et extraction du JoinHandle
- Améliorations du parsing des métadonnées AVTransport pour gérer les types String et DIDLLite
- Ajout de la détection et du nommage des navigateurs dans le WebRenderer
- Mise à jour des dépendances avec tower 0.5.2
- Correction de la gestion des threads lors de l'arrêt du serveur HTTP
This commit is contained in:
2026-02-21 00:15:38 +01:00
parent 7276945b92
commit cddd2afbd8
11 changed files with 443 additions and 12 deletions

View File

@@ -31,6 +31,11 @@ fn avtransporturimetadataparser(value: &str) -> Result<Box<dyn Reflect>, StateVa
}
fn avtransporturimetadatamarshal(value: &dyn Reflect) -> Result<String, StateVariableError> {
// Si c'est déjà une String, on la retourne directement
if let Some(s) = value.as_any().downcast_ref::<String>() {
return Ok(s.clone());
}
// Sinon, on essaie de convertir depuis DIDLLite
let didl = value
.downcast_ref::<DIDLLite>()
.ok_or_else(|| StateVariableError::ConversionError("DIDLLite".into()))?;
@@ -45,6 +50,8 @@ pub static AVTRANSPORTURIMETADATA: Lazy<Arc<StateVariable>> =
sv.set_value_parser(Arc::new(avtransporturimetadataparser))
.expect("Failed to set parser");
sv.set_value_marshaler(Arc::new(avtransporturimetadatamarshal))
.expect("Failed to set marshaler");
Arc::new(sv)
});