xiph/opus

GitHub: xiph/opus

Opus 是一种专为互联网设计的开源免版税音频编解码器,覆盖从低码率窄带语音到高质量立体声音乐的广泛音频应用,具有低延迟和强抗丢包能力。

Stars: 3080 | Forks: 761

== Opus 音频编解码器 == Opus 是一种用于通过 Internet 进行交互式语音和音频传输的编解码器。 Opus 能够处理广泛的交互式音频应用,包括 IP 语音、视频会议、游戏内聊天,甚至是远程现场音乐 表演。它的范围可以从低比特率窄带语音扩展到非常高质量的 立体声音乐。 Opus 在结合适当的容器格式时,也适用于 非实时的存储文件应用,例如音乐发行、游戏 原声带、便携式音乐播放器、点唱机,以及其他 历史上曾使用高延迟格式(如 MP3、AAC 或 Vorbis)的应用。 ``` Opus is specified by IETF RFC 6716: https://tools.ietf.org/html/rfc6716 ``` Opus 格式及其本实现受 COPYING 文件中指定的 免版税专利和版权许可证的约束。 本软件包实现了一个用于编码和解码原始 Opus 比特流的共享库。原始 Opus 比特流应根据 https://tools.ietf.org/html/rfc7587 通过 RTP 使用。 该软件包还包含许多测试工具,用于测试 库的正确操作。这些工具读写的 比特流不应用于 Opus 文件分发:它们包含 额外的调试数据且不支持随机访问。 存储在文件中的 Opus 应使用 Ogg Opus 封装格式,该格式 描述于: https://tools.ietf.org/html/rfc7845 提供了一个 opus-tools 软件包,支持对 Ogg 封装的 Opus 文件进行编码和解码,并包含许多有用的功能。 Opus-tools 可以在以下地址找到: https://gitlab.xiph.org/xiph/opus-tools.git 或者在 Opus 官方网站上: https://opus-codec.org/ == 深度学习与 Opus == 丢包网络仍然是实时通信面临的一项挑战。 虽然 Opus 的原始实现提供了出色的丢包 隐藏机制,但团队仍在不断推进所用的方法论,以 改善挑战性网络环境下的音频质量。 在 Opus 1.5 中,我们添加了一个基于深度学习的冗余编码器,它通过 在每个数据包的填充数据中嵌入一秒的恢复数据, 来增强丢包网络中的音频。编码和解码 恢复数据背后的底层算法称为深度冗余(DRED)算法。通过利用 数据包内的填充数据,Opus 1.5 完全向后兼容 以前的 Opus 版本。请参阅“dnn”子目录下的 README 来 了解 DRED。 DRED 由 Amazon Web Services 最初赞助的团队开发, 他们开源了该实现,并启动了 IETF 的标准化进程: https://datatracker.ietf.org/doc/draft-ietf-mlcodec-opus-extension/ Opus 背后的许可证或 Opus 的知识产权状况 不会随 Opus 1.5 而改变。 == 编译 libopus == 要从发行版压缩包构建,只需执行以下操作: ``` % ./configure % make ``` 要从 git 仓库构建,需要执行以下步骤: 0. 设置开发环境: 在 Ubuntu 或 Debian 系列的 Linux 发行版上: ``` % sudo apt-get install git autoconf automake libtool gcc make ``` 在基于 Fedora/Redhat 的 Linux 上: ``` % sudo dnf install git autoconf automake libtool gcc make ``` 或者对于较旧的 Redhat/Centos Linux 版本: ``` % sudo yum install git autoconf automake libtool gcc make ``` 在 Apple macOS 上,安装 Xcode 和 brew.sh,然后在终端中输入: ``` % brew install autoconf automake libtool ``` 1. 克隆仓库: % git clone https://gitlab.xiph.org/xiph/opus.git % cd opus 2. 编译源码 % ./autogen.sh % ./configure % make 在 x86 架构上,最好使用允许使用 AVX2 的 -march= 选项。 3. 安装编解码器库(可选) % sudo make install 编译完编解码器后,顶层目录中将生成一个 opus_demo 可执行文件。 用法:opus_demo [-e] [options] opus_demo -d [options] 模式:voip | audio | restricted-lowdelay 选项: -e : 仅运行编码器(输出比特流) -d : 仅运行解码器(读取比特流作为输入) -cbr : 启用恒定比特率;默认:可变比特率 -cvbr : 启用受限可变比特率;默认: 不受限 -bandwidth : 音频带宽(从窄带到全频带); 默认:采样率 -framesize <2.5|5|10|20|40|60> : 帧大小,单位为毫秒;默认:20 -max_payload : 最大负载大小,单位为字节;默认:1024 -complexity : 复杂度,0(最低) ... 10(最高);默认:10 -inbandfec : 启用 SILK 带内 FEC -forcemono : 强制单声道编码,即使输入为立体声 -dtx : 启用 SILK DTX -loss : 模拟丢包,百分比形式(0-100);默认:0 输入和输出为小端序 16 位有符号 PCM 文件,或是带有简单 opus_demo 专有帧格式的 Opus 比特流。 == 测试 == 本软件包包含一系列自动化单元测试和系统测试, 在编译软件包后务必运行这些测试,尤其是 首次在新平台上运行时。 要运行集成测试: ``` % make check ``` 还有一系列标准测试向量,由于体积原因 未包含在本软件包中,但可以从以下地址获取: https://opus-codec.org/docs/opus_testvectors-rfc8251.tar.gz 要将代码与这些测试向量进行比较: ``` % curl -OL https://opus-codec.org/docs/opus_testvectors-rfc8251.tar.gz % tar -zxf opus_testvectors-rfc8251.tar.gz % ./tests/run_vectors.sh ./ opus_newvectors 48000 ``` == 在 Windows 及其他构建系统上编译 libopus == 参见 cmake/README.md 或 meson/README.md。 == 可移植性说明 == 本实现默认使用浮点运算,但可以通过设置 --enable-fixed-point(如果使用 autoconf)或定义 FIXED_POINT 宏(如果手动构建)来编译为 仅使用定点运算。 定点实现在音频质量上略低,且 在具有快速 FPU 的平台上速度较慢,通常只在嵌入式 环境中使用。 该实现可以使用 C89 或 C99 编译器进行编译。 虽然它不依赖于 C89 或 C99 所定义的任何未定义行为,但它 依赖于针对二进制补码架构的常见实现定义行为: o 负值的右移与二进制补码算术一致, 即 a>>b 等价于 floor(a/(2^b)), o 对于转换为 N 位有符号整数,该值对 2^N 取模以符合该类型的范围, o 负值的整数除法结果向零截断,以及 o 编译器提供 64 位整数类型(这是 C99 的要求, 大多数 C89 编译器都支持)。
标签:Bash脚本, DNS解析, IETF标准, Opus, RFC 6716, VoIP, 丢包隐藏, 多媒体, 实时通信, 客户端加密, 开源项目, 无损音频, 流媒体, 深度学习, 游戏语音, 编解码库, 网络传输, 网络音频, 视频会议, 语音通话, 音频压缩, 音频编解码器, 预握手, 高保真