#vorbis #ogg #codec #audio-stream #api-bindings #xiph #lancer

vorbis_rs

由最佳C库的高级绑定提供Ogg Vorbis流的编解码

8个不稳定版本 (3个重大更新)

0.5.4 2023年12月10日
0.5.3 2023年12月10日
0.5.2 2023年11月25日
0.5.0 2023年8月6日
0.1.0 2022年10月21日

#41 in 音频

Download history 510/week @ 2024-04-22 121/week @ 2024-04-29 61/week @ 2024-05-06 84/week @ 2024-05-13 145/week @ 2024-05-20 119/week @ 2024-05-27 104/week @ 2024-06-03 132/week @ 2024-06-10 212/week @ 2024-06-17 184/week @ 2024-06-24 247/week @ 2024-07-01 143/week @ 2024-07-08 78/week @ 2024-07-15 239/week @ 2024-07-22 416/week @ 2024-07-29 344/week @ 2024-08-05

1,079 每月下载量
2 crates 中使用

BSD-3-Clause

2MB
45K SLoC

C 32K SLoC // 0.1% comments Visual Studio Project 7.5K SLoC Rust 4K SLoC // 0.0% comments Perl 785 SLoC // 0.1% comments M4 496 SLoC // 0.2% comments Visual Studio Solution 482 SLoC Automake 231 SLoC // 0.1% comments C++ 43 SLoC Shell 35 SLoC // 0.1% comments
vorbis-rs logo

vorbis-rs

Rust为Vorbis音频编解码器和Ogg容器封装的顶级C库提供的绑定。

CI workflow status crates.io latest version docs.rs status

crates.io downloads

此仓库中的vorbis_rs包提供了对最新参考Vorbis编解码器的更新、文档齐全且易于使用的绑定,该编解码器在此处提供:here,其中包含了aoTuVLancer补丁集。社区认为这些补丁实现了显著的编解码质量和性能改进。

支持aotuv_lancer_vorbis_sysogg_next_sys包提供了由vorbis_rs使用的自动生成的底层绑定。

此仓库中每个包的最小支持Rust版本(MSRV)为1.64。提高此版本不被视为语义版本控制目的的破坏性更改。我们只会在我们估计这种提高不会引起广泛的不便或破坏时才尝试这样做。

❓ 动机

Rust生态系统已经有了这些库的绑定(见vorbis-sysvorbis),但可用crate的质量和维护状态问题重重,似乎无法通过PR或修补来解决。

  • 高级vorbiscrate已6年未更新,有争议的代码质量(许多包含电子邮件地址等信息的panic!),并且依赖于旧版本的vorbis-sys。反过来,vorbis-sys依赖于存在已知安全漏洞的旧版本libvorbisC库。它还缺少C库提供的某些操作API,这些API对于合理的音频处理应用是必需的。
  • vorbis-sys 仅包含对 libvorbis 的绑定,但进行有意义的 Vorbis 流操作需要更新的 libvorbisencvorbisfile 绑定。这些也是不可用的。
  • crates.io 中有多个随机crate依赖于这些令人不满意的绑定项目,而且似乎不太可能它们的维护者会迅速接受对这些项目的破坏性更改,从而产生生态系统碎片化。
  • 像大多数软件库、框架甚至 Linux 发行版一样,现有的crate似乎没有注意到 aoTuV 和 Lancer 补丁集的存在,尽管它们旨在作为直接替换品。因此,用户合理地期望提及任何补丁,这也是无论如何都要做不同的绑定crate的好理由。

鉴于这些问题以及 Rust 中 Ogg Vorbis 音频处理应用程序对更好解决方案的需求,决定投入开发精力制作新的绑定:预计解决生态系统技术债务的初始成本高于从头开始绑定并定期更新库绑定。重写修补过的 Vorbis 编码器在 Rust 中被认为是不可行的。

⚖️ 许可证

本存储库中的绑定采用 BSD 3-Clause "New" 或 "Revised" 许可证(LICENSEhttps://opensource.org/licenses/BSD-3-Clause),与上游项目使用的许可协议相同。

贡献许可证

除非你明确表示,否则你提交给 vorbis_rs 的任何有意贡献都应按上述方式许可,而不附加任何额外的条款或条件。

✨ 贡献

这个存储库最初是为了解决一个 Rust 应用程序的需求而临时解决的,但它已经发展成一个独立的项目——欢迎PR!

克隆 & 更新

C库源代码由子模块管理,因此更新绑定crate以包含最新的上游更改应该很容易。

  1. 更新子模块。
  2. 在Unix-like系统(Linux、macOS、BSD)上运行 generate-bindings.sh 脚本(rust-bindgen),或者使用 cargo build --features build-time-bindgen 构建项目。这将根据最新的源代码重新生成低级 FFI 绑定。
  3. 运行 cargo test。这将执行一些基本的合理性检查,包括编码和解码示例文件,以检查绑定是否仍然有效。
  4. 审查更改并/或修复失败的测试,直到有合理的信心认为升级已成功完成。
  5. 提交更改。

在克隆存储库时,请记住还要检出包含供应商代码的子模块。您可以通过运行 git submodule update --init --recursive 来完成此操作。

每次供应商代码更新时,都必须发布新的 aotuv_lancer_vorbis_sys 和/或 ogg_next_sys 版本,以便 vorbis_rs 的用户可以下载包含更新供应商代码的绑定crate。

🤝 联系

我们欢迎友好地讨论该项目,包括提问、祝贺和建议。前往 GitHub 讨论页面 与其他用户、贡献者和开发者互动。

🧑‍🤝‍🧑 贡献者

感谢这些杰出人士(《表情键》)的贡献

Alejandro González
Alejandro González

💻 📖 💡 🚧 📆
Vivian
Vivian

💻 🤔
Martin Algesten
Martin Algesten

💻
Kyle Chen
Kyle Chen

🤔
Daniel Collin
Daniel Collin

🐛

本项目遵循all-contributors规范。欢迎各种形式的贡献!

依赖

~0.5–8.5MB
~70K SLoC