This is really cool. Since I own the whole I/O stack, I could also make it run
over QUIC or some compressed format or anything I like.
And I can probably sniff the first packet by hand to suport both Vorbis and
Opus. That would cover most of my music library.
It was a combination of two bugs:
1. For some reason, libswresample sometimes returns more data than you need.
Like, it'll return X samples but _more than_ 8X bytes, for f32 stereo.
2. I wasn't supposed to be calling `flush`. I should have been calling
`run` with a dummy frame. This isn't intuitive to me, and it required
me to construct a dummy frame and keep it around in my code. I think
this is pretty inelegant. And looking at the ffmpeg code, I think it's
a flaw in the API design of the `ffmpeg_next` crate. I may ask them
about it in the future.