我需要实时解码来自 websocket 的异步音频流(最好是 vorbis/opus 编码的 ogg),但我找不到合适的板条箱来帮助我完成这项工作。
几乎每个板条箱都有依赖于
std::io::Read
的同步 API,这不适合这种情况。我能找到的唯一箱子是ogg,但它不会将ogg数据包解码为PCM样本,将其委托给“其他一些箱子,例如lewton”。事实证明,它发出的数据包数据既与 lewton
也不与 symphonia
的 VorbisDecoder
兼容。
您能给我指出任何异步解决方案吗?
事实证明,
ogg
的异步PacketReader
可以与symphonia
的VorbisDecoder
成功结合。为此,我们需要使用第一个(id)和第三个(设置)流数据包的内容作为 CodecParameters::extra_data
,同时跳过第二个(注释)。其余的数据包可以送入VorbisDecoder
。感谢est31(ogg
的作者)给予的帮助。