From 306e691c61dd4bb256c8e80923fe9a6e1eb150b6 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Thu, 26 Feb 2026 19:58:37 +0100 Subject: [PATCH] Refactor WebRenderer to use server-side streaming with OGG-FLAC sink This commit refactors the WebRenderer to use a server-side streaming architecture with OGG-FLAC sink instead of the previous WebSocket-based approach. The changes include: - Replaced WebSocket communication with HTTP streaming using DirectOggFlacSink - Implemented a new pipeline architecture with dedicated handlers for UPnP commands - Added new modules for registration, registry, and streaming - Updated the renderer to work with a pipeline control system - Removed old WebSocket session management - Added support for HTTP streaming with gapless playback - Updated dependencies and features for the new architecture The WebRenderer now acts as a MediaRenderer UPnP device that serves audio streams via HTTP endpoints, with commands relayed to the audio pipeline through a new control system. --- .DS_Store | Bin 18436 -> 18436 bytes Cargo.lock | 9 + Cargo.toml | 1 + .../webapp/src/composables/useWebRenderer.ts | 699 +++++------------- .../webapp/src/views/UnifiedControlView.vue | 4 +- pmoaudio-ext/Cargo.toml | 4 +- pmoaudio-ext/src/lib.rs | 7 +- pmoaudio-ext/src/sinks/broadcast_pacing.rs | 44 +- pmoaudio-ext/src/sinks/direct_flac_sink.rs | 367 +++++++++ .../src/sinks/direct_ogg_flac_sink.rs | 564 ++++++++++++++ pmoaudio-ext/src/sinks/mod.rs | 18 + .../src/sinks/streaming_sink_common.rs | 8 +- pmoaudio-ext/src/sources/mod.rs | 11 + pmoaudio-ext/src/sources/pcm_decode.rs | 145 ++++ pmoaudio-ext/src/sources/playlist_source.rs | 138 +--- pmoaudio-ext/src/sources/uri_source.rs | 254 +++++++ pmoaudio/src/lib.rs | 1 + pmoaudio/src/nodes/mod.rs | 1 + pmoaudio/src/nodes/position_tracker_node.rs | 127 ++++ .../src/music_renderer/musicrenderer.rs | 4 +- pmowebrenderer/Cargo.toml | 33 +- pmowebrenderer/src/config.rs | 37 +- pmowebrenderer/src/handlers.rs | 153 ++-- pmowebrenderer/src/lib.rs | 22 +- pmowebrenderer/src/pipeline.rs | 448 +++++++++++ pmowebrenderer/src/register.rs | 72 ++ pmowebrenderer/src/registry.rs | 346 +++++++++ pmowebrenderer/src/renderer.rs | 55 +- pmowebrenderer/src/session.rs | 133 ---- pmowebrenderer/src/state.rs | 36 +- pmowebrenderer/src/stream.rs | 63 ++ pmowebrenderer/src/websocket.rs | 646 ---------------- 32 files changed, 2797 insertions(+), 1653 deletions(-) create mode 100644 pmoaudio-ext/src/sinks/direct_flac_sink.rs create mode 100644 pmoaudio-ext/src/sinks/direct_ogg_flac_sink.rs create mode 100644 pmoaudio-ext/src/sources/pcm_decode.rs create mode 100644 pmoaudio-ext/src/sources/uri_source.rs create mode 100644 pmoaudio/src/nodes/position_tracker_node.rs create mode 100644 pmowebrenderer/src/pipeline.rs create mode 100644 pmowebrenderer/src/register.rs create mode 100644 pmowebrenderer/src/registry.rs delete mode 100644 pmowebrenderer/src/session.rs create mode 100644 pmowebrenderer/src/stream.rs delete mode 100644 pmowebrenderer/src/websocket.rs diff --git a/.DS_Store b/.DS_Store index b4d7ee268acc97a010799afac4cbc01e57e486bb..8c67cf49f9d59ef73bc232093ccfd0f87fcec91d 100644 GIT binary patch delta 131 zcmZpfz}PZ@ae_Z%&&Gh={EViXc?1Gk4fz-f7;+i%8Oj+_8Il-^fMgy+3XlY`iac}j zlaq4tlNcBn1Q-|?CowRv-rF1`YQV|N%uunpS}AL!5&Hhk$^q{IkOBP%>%P5 eB;X5?fKsyyFo+J5Z!=VrIWN+YfKIaqK>Y`1RT$_1 diff --git a/Cargo.lock b/Cargo.lock index e51b3a3e..f7bd9ded 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3863,6 +3863,7 @@ version = "0.1.0" dependencies = [ "async-trait", "bytes", + "futures", "pmoaudio", "pmoaudiocache", "pmocache", @@ -3871,6 +3872,7 @@ dependencies = [ "pmometadata", "pmoplaylist", "rand 0.8.5", + "reqwest", "serde", "serde_json", "tokio", @@ -4359,19 +4361,26 @@ dependencies = [ "async-trait", "axum 0.8.7", "axum-extra", + "bytes", "futures", "parking_lot", + "pmoaudio", + "pmoaudio-ext", "pmoconfig", "pmocontrol", "pmodidl", + "pmoflac", "pmomediarenderer", + "pmometadata", "pmoserver", "pmoupnp", "pmoutils", + "reqwest", "serde", "serde_json", "thiserror 2.0.17", "tokio", + "tokio-util", "tower-http", "tracing", "uuid", diff --git a/Cargo.toml b/Cargo.toml index 9b5fb4cd..fd97a8da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ members = [ "pmocovers", "pmoaudiocache", "pmoaudio", + "pmoaudio-ext", "pmoqobuz", "pmoparadise", "pmoradiofrance", diff --git a/pmoapp/webapp/src/composables/useWebRenderer.ts b/pmoapp/webapp/src/composables/useWebRenderer.ts index 4c85c056..6255ed8e 100644 --- a/pmoapp/webapp/src/composables/useWebRenderer.ts +++ b/pmoapp/webapp/src/composables/useWebRenderer.ts @@ -1,85 +1,25 @@ /** * Composable pour gérer le WebRenderer navigateur. * - * Se connecte automatiquement au WebSocket /api/webrenderer/ws au montage - * et se déconnecte proprement au démontage ou à la fermeture de la page. + * S'enregistre via POST /api/webrenderer/register au montage + * et diffuse l'audio via un élément