Commit Graph

7 Commits

Author SHA1 Message Date
4e27255305 Nouvelle tentative de broadcast avec considération d'un temps d'expiration. 2025-11-15 13:53:35 +01:00
1c2d30cbe9 debuggage des stream 2025-11-15 12:21:30 +01:00
Claude
46dee1de7b Refactor: Extract FLAC frame detection to shared module
Both StreamingFlacSink and StreamingOggFlacSink had duplicate FLAC frame
detection logic. The OGG-FLAC sink had the improved validation, but the
regular FLAC sink was still using the old unvalidated detection.

Changes:
- Created new module: pmoaudio-ext/src/sinks/flac_frame_utils.rs
  * parse_flac_block_size() - comprehensive frame header validation
  * find_complete_frames_boundary() - for regular FLAC streaming
  * find_complete_frames_with_samples() - for OGG-FLAC with granule tracking
  * Includes unit tests for validation

- Updated streaming_ogg_flac_sink.rs:
  * Removed duplicate functions
  * Now uses shared flac_frame_utils module

- Updated streaming_flac_sink.rs:
  * Removed old unvalidated find_complete_frames_boundary()
  * Now uses shared flac_frame_utils with improved validation
  * Benefits from same false positive prevention as OGG-FLAC

- Updated mod.rs to include flac_frame_utils module

Result: Both FLAC and OGG-FLAC streams now use the same comprehensive
frame header validation to prevent false positive sync code detection.
2025-11-13 10:23:36 +00:00
Claude
8518740f3e Add StreamingOggFlacSink foundation (WIP - cannot compile)
Created the basic structure for OGG-FLAC streaming sink with:
- OggFlacStreamHandle for HTTP client subscriptions
- OggFlacClientStream implementing AsyncRead
- StreamingOggFlacSinkLogic with metadata tracking
- TrackBoundary detection for OGG chaining (TODO)

Structure follows StreamingFlacSink pattern but designed for:
1. OGG container wrapping around FLAC frames
2. OGG chaining on TrackBoundary markers
3. Vorbis Comments metadata updates per track

LIMITATION: Cannot compile/test due to missing system dependencies
(alsa-sys, libsoxr-sys). The code structure is complete but encoding
logic needs to be implemented and tested on a machine with proper deps.

Next steps:
- Implement chunk_to_pcm_bytes conversion
- Implement OGG page wrapper task
- Implement OGG chaining logic
- Test on system with alsa-dev installed
2025-11-12 00:08:17 +00:00
Claude
b25a4f9fb3 Add StreamingFlacSink for multi-client HTTP streaming
Implements a new sink for broadcasting FLAC audio to multiple concurrent
HTTP clients (UPnP renderers, web players, etc.) with dynamic metadata updates.

Key features:
- Lazy encoder initialization (auto-detects sample rate from first chunk)
- Broadcast architecture: one encoder, multiple concurrent clients
- Dual streaming modes:
  * Pure FLAC mode (standard HTTP streaming)
  * ICY metadata mode (Icecast/Shoutcast protocol with "Now Playing")
- Automatic lifecycle management (starts on first client, stops when last disconnects)
- Full metadata support via TrackBoundary sync markers

Architecture:
  AudioSegments → PCM conversion → FLAC encoder → Broadcaster task
                                                        ↓
                                              broadcast::channel
                                                        ↓
                                     Multiple clients (FlacClientStream/IcyClientStream)

New components:
- StreamingFlacSink: Terminal sink node for audio pipeline
- StreamHandle: Clonable handle for HTTP handlers to subscribe clients
- FlacClientStream: Pure FLAC AsyncRead implementation
- IcyClientStream: ICY-wrapped FLAC with metadata injection
- MetadataSnapshot: Serializable metadata for SSE/JSON endpoints

Feature: http-stream (requires pmoflac, pmometadata, bytes, serde)
2025-11-11 19:27:39 +00:00
88349e7797 Récupération de l'erreur git cleaning 2025-11-04 21:13:06 +01:00
40950164e9 Ajout d'un noeud puis vers le cache audio 2025-11-03 14:45:37 +01:00