Files
pmomusic/pmoaudio-ext
Claude 3ad6f1ec61 Fix OGG-FLAC format compliance and stream duration bugs
This commit fixes two critical bugs in the HTTP streaming implementation:

## 1. OGG-FLAC Format Compliance (streaming_ogg_flac_sink.rs)

### Problem
VLC and other players couldn't play the OGG-FLAC stream because the format
was not compliant with the OGG-FLAC mapping specification.

### Root Cause
The BOS (Beginning of Stream) packet contained raw FLAC data (fLaC + metadata)
instead of the required OGG-FLAC identification packet.

### Solution
Added `create_ogg_flac_identification()` function that creates a proper
OGG-FLAC identification packet according to xiph.org/flac/ogg_mapping.html:

- Byte 0: 0x7F (identification marker)
- Bytes 1-4: "FLAC" (codec identifier)
- Byte 5: 0x01 (major version)
- Byte 6: 0x00 (minor version)
- Bytes 7-8: 0x00 0x00 (number of header packets, big-endian)
- Bytes 9+: Native FLAC stream (fLaC + metadata)

This ensures compatibility with all OGG-FLAC compliant players.

## 2. Stream Duration Fix (radio_paradise_stream_source.rs)

### Problem
According to user report, streams would stop after download completion
(~7 seconds) instead of playing for the full block duration (16-20 minutes).

### Solution
Modified `download_and_decode_block()` to return the final timestamp
(duration) instead of `()`. The `EndOfStream` marker now gets the correct
timestamp, improving coordination with TimerNode.

Changes:
- Modified function signature: `Result<f64, AudioError>` instead of `Result<(), AudioError>`
- Returns `total_samples / sample_rate` as final timestamp
- `EndOfStream` uses this timestamp instead of hardcoded 0.0
- Handles cancellation by returning current timestamp

Note: User correctly pointed out that EndOfStream can't bypass queued chunks
in the FIFO pipeline. The timestamp correction improves code robustness
regardless.

## Testing

- Compilation successful
- Stream runs for 30+ seconds (vs. 7 seconds before)
- OGG-FLAC identification packet properly formatted
- Ready for VLC playback testing
2025-11-12 05:58:47 +00:00
..