Implémentation du OGG chaining pour les flux audio

Cette modification introduit le support du OGG chaining dans le flux audio, permettant une transition transparente entre les pistes sans interruption. Cela inclut la gestion des encodeurs successifs dans le même canal Bytes, l'annulation des encodeurs précédents lors des transitions, et le maintien d'une connexion persistante avec backpressure TCP. Les modifications affectent les composants de sink et de pipeline audio, ainsi que les endpoints d'écoute.
This commit is contained in:
2026-02-28 12:15:02 +01:00
parent eedb0b6a0e
commit f9056f92e0
4 changed files with 191 additions and 76 deletions

View File

@@ -29,8 +29,8 @@ pub struct WebRendererInstance {
pub udn: String,
pub device_instance: Arc<DeviceInstance>,
pub state: SharedState,
/// Handle vers le sink OGG-FLAC — clonable, chaque subscribe() donne un flux live.
pub flac_handle: pmoaudio_ext::sinks::OggFlacStreamHandle,
/// Handle vers le sink OGG-FLAC — clonable, connect() crée un nouveau flux avec backpressure.
pub flac_handle: pmoaudio_ext::sinks::DirectOggFlacHandle,
pub pipeline: PipelineHandle,
pub created_at: SystemTime,
}
@@ -116,11 +116,11 @@ impl RendererRegistry {
Ok((stream_url, udn))
}
/// Retourne le OggFlacStreamHandle pour l'endpoint /stream (clonable).
/// Retourne le DirectOggFlacHandle pour l'endpoint /stream (clonable).
pub fn get_flac_handle(
&self,
instance_id: &str,
) -> Option<pmoaudio_ext::sinks::OggFlacStreamHandle> {
) -> Option<pmoaudio_ext::sinks::DirectOggFlacHandle> {
self.instances
.read()
.get(instance_id)