Implémentation du PlayerSource pour le contrôle AVTransport UPnP
Ajout de PlayerSource avec contrôle complet AVTransport (Play/Pause/Stop/Seek/LoadUri) dans le pipeline audio - Introduit PlayerSource comme nœud source audio avec gestion complète du cycle de vie UPnP - Implémente les commandes LoadUri, LoadNextUri, Play, Pause, Stop, Seek - Gestion des transitions gapless avec TrackBoundary pour un bitstream propre - Révision du pipeline audio pour utiliser PlayerSource au lieu de la logique de contrôle existante - Mise à jour des handlers UPnP pour utiliser PlayerHandle au lieu du canal de contrôle - Suppression des anciennes commandes PipelineControl et logique de gestion de source - Ajout de gestion d'événements PlayerEvent pour mise à jour de l'état UPnP - Migration vers StreamingOggFlacSink pour la diffusion audio
This commit is contained in:
@@ -226,13 +226,11 @@ pub fn get_media_info_handler(state: SharedState) -> ActionHandler {
|
||||
|
||||
// ─── RenderingControl Handlers ──────────────────────────────────────────────
|
||||
|
||||
pub fn set_volume_handler(pipeline: PipelineHandle, state: SharedState) -> ActionHandler {
|
||||
pub fn set_volume_handler(_pipeline: PipelineHandle, state: SharedState) -> ActionHandler {
|
||||
Arc::new(move |data: ActionData| -> ActionFuture {
|
||||
let pipeline = pipeline.clone();
|
||||
let state = state.clone();
|
||||
Box::pin(async move {
|
||||
let volume: u16 = get!(&data, "DesiredVolume", u16);
|
||||
pipeline.send(PipelineControl::SetVolume(volume)).await;
|
||||
state.write().volume = volume;
|
||||
Ok(data)
|
||||
})
|
||||
@@ -251,13 +249,11 @@ pub fn get_volume_handler(state: SharedState) -> ActionHandler {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn set_mute_handler(pipeline: PipelineHandle, state: SharedState) -> ActionHandler {
|
||||
pub fn set_mute_handler(_pipeline: PipelineHandle, state: SharedState) -> ActionHandler {
|
||||
Arc::new(move |data: ActionData| -> ActionFuture {
|
||||
let pipeline = pipeline.clone();
|
||||
let state = state.clone();
|
||||
Box::pin(async move {
|
||||
let mute: bool = get!(&data, "DesiredMute", bool);
|
||||
pipeline.send(PipelineControl::SetMute(mute)).await;
|
||||
state.write().mute = mute;
|
||||
Ok(data)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user