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)