Implémentation des pmometadata dans pmocacheaudio
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
use pmometadata::TrackMetadata;
|
||||
|
||||
@@ -158,7 +159,7 @@ impl AudioSegment {
|
||||
pub fn new_track_boundary(
|
||||
order: u64,
|
||||
timestamp_sec: f64,
|
||||
metadata: Arc<dyn TrackMetadata>,
|
||||
metadata: Arc<RwLock<dyn TrackMetadata>>,
|
||||
) -> Arc<Self> {
|
||||
let marker = Arc::new(SyncMarker::TrackBoundary {
|
||||
metadata: Arc::clone(&metadata),
|
||||
@@ -299,7 +300,7 @@ impl AudioSegment {
|
||||
}
|
||||
|
||||
/// Récupère les métadatas du track si c'est un TrackBoundary
|
||||
pub fn as_track_metadata(&self) -> Option<&Arc<dyn TrackMetadata>> {
|
||||
pub fn as_track_metadata(&self) -> Option<&Arc<RwLock<dyn TrackMetadata>>> {
|
||||
match &self.segment {
|
||||
_AudioSegment::Sync(marker) => match &**marker {
|
||||
SyncMarker::TrackBoundary { metadata } => Some(metadata),
|
||||
|
||||
@@ -107,7 +107,7 @@ impl FileSource {
|
||||
}
|
||||
|
||||
// Émettre TrackBoundary
|
||||
let track_boundary = AudioSegment::new_track_boundary(0, 0.0, Arc::new(metadata));
|
||||
let track_boundary = AudioSegment::new_track_boundary(0, 0.0, Arc::new(tokio::sync::RwLock::new(metadata)));
|
||||
self.subscribers.push(track_boundary).await?;
|
||||
}
|
||||
Err(e) => {
|
||||
|
||||
@@ -220,7 +220,7 @@ fn generate_track_path(base_path: &Path, track_number: usize) -> PathBuf {
|
||||
|
||||
/// Signal retourné par pump_segments indiquant pourquoi l'encodage s'est arrêté.
|
||||
enum StopReason {
|
||||
TrackBoundary(Arc<dyn pmometadata::TrackMetadata + Send + Sync>),
|
||||
TrackBoundary(Arc<tokio::sync::RwLock<dyn pmometadata::TrackMetadata>>),
|
||||
EndOfStream,
|
||||
ChannelClosed,
|
||||
}
|
||||
@@ -229,8 +229,8 @@ enum StopReason {
|
||||
/// Retourne une erreur si EndOfStream est reçu avant tout audio.
|
||||
async fn wait_for_first_audio_chunk_with_metadata(
|
||||
rx: &mut mpsc::Receiver<Arc<AudioSegment>>,
|
||||
) -> Result<(Arc<AudioSegment>, Option<Arc<dyn pmometadata::TrackMetadata + Send + Sync>>), AudioError> {
|
||||
let mut track_metadata: Option<Arc<dyn pmometadata::TrackMetadata + Send + Sync>> = None;
|
||||
) -> Result<(Arc<AudioSegment>, Option<Arc<tokio::sync::RwLock<dyn pmometadata::TrackMetadata>>>), AudioError> {
|
||||
let mut track_metadata: Option<Arc<tokio::sync::RwLock<dyn pmometadata::TrackMetadata>>> = None;
|
||||
|
||||
loop {
|
||||
let segment = rx
|
||||
@@ -583,7 +583,7 @@ mod tests {
|
||||
metadata.set_year(Some(2024)).await.unwrap();
|
||||
|
||||
let track_boundary =
|
||||
crate::AudioSegment::new_track_boundary(0, 0.0, std::sync::Arc::new(metadata));
|
||||
crate::AudioSegment::new_track_boundary(0, 0.0, std::sync::Arc::new(tokio::sync::RwLock::new(metadata)));
|
||||
tx.send(track_boundary).await.unwrap();
|
||||
|
||||
// Générer et envoyer des chunks audio
|
||||
|
||||
@@ -257,7 +257,7 @@ impl HttpSource {
|
||||
self.subscribers.push(top_zero).await?;
|
||||
|
||||
// Émettre TrackBoundary avec les métadonnées HTTP
|
||||
let track_boundary = AudioSegment::new_track_boundary(0, 0.0, Arc::new(metadata));
|
||||
let track_boundary = AudioSegment::new_track_boundary(0, 0.0, Arc::new(tokio::sync::RwLock::new(metadata)));
|
||||
self.subscribers.push(track_boundary).await?;
|
||||
|
||||
// Préparer la lecture des chunks audio
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
use pmometadata::TrackMetadata;
|
||||
|
||||
pub enum SyncMarker {
|
||||
TrackBoundary { metadata: Arc<dyn TrackMetadata> },
|
||||
TrackBoundary { metadata: Arc<RwLock<dyn TrackMetadata>> },
|
||||
StreamMetadata { key: String, value: String },
|
||||
TopZeroSync,
|
||||
Heartbeat,
|
||||
|
||||
Reference in New Issue
Block a user