Commit Graph

12 Commits

Author SHA1 Message Date
Claude
d9bc1cfc03 Add separate endpoints for pure FLAC and ICY streams
VLC cannot decode FLAC streams with embedded ICY metadata because
the ICY blocks break the FLAC decoder. Split into two endpoints:

- /test/stream: Pure FLAC (for VLC and standard FLAC players)
- /test/stream-icy: FLAC + ICY metadata (for ICY-aware clients)

This allows:
- VLC to play audio correctly using pure FLAC
- ICY-aware clients to receive metadata updates
- Metadata endpoint remains available for JSON queries

Fixes the "no audio" issue where VLC would connect, receive the
FLAC header with ICY metadata blocks, fail to decode, and disconnect.
2025-11-11 23:44:09 +00:00
Claude
1f5884627c Enable ICY metadata by default for all clients
Changed stream_handler to always serve ICY-wrapped FLAC instead of
checking for the Icy-MetaData header. This ensures all clients
(including VLC) receive metadata updates.

Changes:
- Removed conditional ICY/pure FLAC logic
- Always use subscribe_icy() for all connections
- Added standard ICY headers (icy-genre, icy-pub)
- Updated documentation to reflect default ICY mode

This allows clients to see "Now Playing" information without needing
to send specific HTTP headers.
2025-11-11 23:32:33 +00:00
Claude
5c29f55942 Fix incorrect VLC ICY metadata documentation
Removed references to non-existent VLC options:
- --icy-metadata (doesn't exist)
- --http-continuous (not needed)

VLC automatically sends the "Icy-MetaData: 1" HTTP header when
connecting to HTTP audio streams, and the server responds with
ICY metadata blocks. No special VLC flags are needed.

Also fixed the stream URL in help text (/stream → /test/stream).
2025-11-11 23:28:24 +00:00
Claude
2b47f851b6 Fix HTTP streaming lag warnings by adding TimerNode and increasing buffer
The streaming FLAC implementation was experiencing severe lag warnings
(clients skipping 700-2200 messages) because:
1. The broadcast channel capacity (512) was too small for network backpressure
2. The pipeline had no rate limiting, sending data faster than real-time

Changes:
- Increased BROADCAST_CAPACITY from 512 to 4096 (~5min buffer)
- Added TimerNode (3s lead time) to stream_block example pipeline
- Pipeline now: RadioParadiseStreamSource → TimerNode → StreamingFlacSink

This ensures data flows at real-time playback speed with sufficient
buffering for network jitter, eliminating client lag warnings.
2025-11-11 23:15:11 +00:00
Claude
55c66f0462 Fix stream_block example: add server.wait() to block until Ctrl+C 2025-11-11 20:03:49 +00:00
Claude
9043e54076 Fix StreamingFlacSink compilation errors
- Fix import paths to use public pmoaudio API instead of private modules
- Change AudioError::ConfigurationError to ProcessingError
- Use Node::new_with_input() instead of non-existent Node::new()
- Fix borrow checker issues in IcyClientStream::poll_read()
- Use flatten() on metadata getters to unwrap Result<Option<T>>
- Fix chunk.get_sample_rate() to chunk.sample_rate()
- Remove get_album_artist() call (not in TrackMetadata trait)
- Update pmoparadise Cargo.toml to enable pmoserver feature for axum
- Simplify example init_logging() call to match new pmoserver API
2025-11-11 19:57:03 +00:00
Claude
4884fddf0e Add stream_block example for testing HTTP streaming with VLC
Creates a new example demonstrating StreamingFlacSink usage with pmoserver
for real-world HTTP streaming testing with media players like VLC.

Features:
- Uses pmoserver instead of raw Axum for realistic testing
- Streams a single Radio Paradise block over HTTP
- Supports both pure FLAC and ICY metadata modes
- Provides /test/stream endpoint for streaming
- Provides /test/metadata endpoint for JSON metadata queries
- Includes health check endpoint

Usage:
  cargo run --example stream_block --features full -- <channel_id>

Testing with VLC:
  # Pure FLAC mode
  vlc http://localhost:8080/test/stream

  # ICY metadata mode (Now Playing)
  vlc --http-continuous --icy-metadata http://localhost:8080/test/stream

Dependencies:
- Requires pmoserver for HTTP server
- Requires StreamingFlacSink from pmoaudio-ext (http-stream feature)
- Integrated with full feature set (pmoaudio + pmoaudio-ext + pmoserver)
2025-11-11 19:33:25 +00:00
Claude
69831a17df refactor: Remove obsolete streaming API (stream.rs, track.rs, per-track feature)
The old streaming API has been completely replaced by RadioParadiseStreamSource
which integrates directly with the pmoaudio pipeline.

Removed:
- src/stream.rs (179 lines) - BlockStream, stream_block(), download_block()
- src/track.rs - Per-track extraction functionality
- examples/stream_block.rs - Obsolete streaming example
- examples/extract_track.rs - Per-track extraction example
- Feature "per-track" and dependencies (hound, tempfile)

Updated:
- Cargo.toml: Removed per-track feature and obsolete examples
- lib.rs: Removed module declarations and re-exports

The new RadioParadiseStreamSource provides:
- Direct integration with pmoaudio pipeline
- FLAC decoding via pmoflac
- Automatic TrackBoundary insertion
- Better performance and lower latency
2025-11-05 09:15:11 +00:00
fc093743c1 Refactoring du cache pour une meilleur gestion des metadonnées 2025-10-29 22:35:10 +01:00
df138565af meulleur gestion des routes de streaming 2025-10-26 09:18:22 +01:00
776c535862 amélioration de la webapp 2025-10-20 16:18:21 +02:00
ffecc219b5 implemente pmoparadise 2025-10-12 21:34:59 +02:00