opus基础简介(github)

== Opus 音频编解码器 ==

Opus 是一种用于通过互联网进行交互式语音和音频传输的编解码器。

Opus 能够处理各种交互式音频应用,包括网络语音通话 (Voice over IP)、视频会议、游戏内语音聊天,甚至远程实时音乐表演。它可以从低比特率的窄带语音扩展到非常高质量的立体声音乐。

当 Opus 与适当的容器格式结合时,它也适用于非实时的存储文件应用,例如音乐分发、游戏音轨、便携式音乐播放器、点唱机等,这些应用历史上曾使用过高延迟格式,如 MP3、AAC 或 Vorbis。

Opus 的技术规范由 IETF RFC 6716 定义: https://tools.ietf.org/html/rfc6716

Opus 格式及其实现受制于文件 COPYING 中规定的免版税专利和版权许可。

该软件包实现了一个用于编码和解码原始 Opus 比特流的共享库。应根据 https://tools.ietf.org/html/rfc7587 在 RTP 协议中使用原始 Opus 比特流。

该软件包还包括一些测试工具,用于测试库的正确操作。这些工具读取/写入的比特流不应用于 Opus 文件分发:它们包含额外的调试数据,并且不支持寻址功能。

存储在文件中的 Opus 应使用 Ogg 封装格式,详细描述请参考: 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 版本完全兼容。有关 DRED 的更多信息,请参阅 "dnn" 子目录下的 README 文件。

DRED 由亚马逊网络服务公司 (Amazon Web Services) 最初资助开发,实施已开源,并在 IETF 开始了标准化过程: https://datatracker.ietf.org/doc/draft-ietf-mlcodec-opus-extension/ Opus 1.5 的发布不会改变 Opus 的许可协议或知识产权状态。

== 编译 libopus ==

从分发的 tarball 构建时,只需执行以下步骤:

复制代码
% ./configure
% make

从 git 仓库构建时,需要执行以下步骤:

设置开发环境:

在 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

克隆仓库:

复制代码
% git clone https://gitlab.xiph.org/xiph/opus.git % cd opus

编译源码

复制代码
% ./autogen.sh % ./configure % make

在 x86 平台上,建议使用 -march= 选项来允许使用 AVX2 指令集。

安装编解码库(可选)

复制代码
% sudo make install

编译完成后,在顶层目录中会有一个 opus_demo 可执行文件。

使用方法:opus_demo [-e] <应用程序> <采样率 (Hz)> <声道 (1/2)> <比特率> [选项] <输入> <输出> opus_demo -d <采样率 (Hz)> <声道 (1/2)> [选项] <输入> <输出>

模式: voip | audio | restricted-lowdelay 选项: -e : 仅运行编码器(输出比特流) -d : 仅运行解码器(将比特流作为输入) -cbr : 启用恒定比特率;默认:可变比特率 -cvbr : 启用约束可变比特率;默认:不受约束 -bandwidth <NB|MB|WB|SWB|FB> : 音频带宽(从窄带到全带);默认:采样率 -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 宏(若手动构建)来编译为仅使用定点运算。定点实现的音质较低,并且在具有快速浮点单元的设备上速度较慢,通常仅在嵌入式环境中使用。

该实现可以使用 C89 或 C99 编译器进行编译。虽然它不依赖于 C89 或 C99 定义的任何"未定义行为",但它依赖于两补码架构的常见"实现定义行为":

o 负值的右移操作与两补码算术一致,即 a>>b 等效于 floor(a/(2^b)),

o 转换为 N 位有符号整数时,值将模 2^N 缩减到类型范围内,

o 负值的整数除法结果被截断到零方向,且

o 编译器提供了 64 位整数类型(C99 要求,大多数 C89 编译器也支持)。

相关推荐
小华同学ai13 分钟前
1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
后端·程序员·github
ON.LIN1 小时前
Git提交本地项目到Github
git·github
uhakadotcom1 小时前
使用 Model Context Protocol (MCP) 构建 GitHub PR 审查服务器
后端·面试·github
uhakadotcom1 小时前
Apache Airflow入门指南:数据管道的强大工具
算法·面试·github
uhakadotcom2 小时前
Ruff:Python 代码分析工具的新选择
后端·面试·github
uhakadotcom2 小时前
Mypy入门:Python静态类型检查工具
后端·面试·github
uhakadotcom3 小时前
构建高效自动翻译工作流:技术与实践
后端·面试·github
uhakadotcom5 小时前
AWS Lightsail 简介与实践
后端·面试·github
uhakadotcom6 小时前
OpenAI 的 PaperBench:AI 研究复现基准测试工具
算法·面试·github
weixin_387545647 小时前
探索 GitHub Copilot:当 AI 成为你的贴身编码助手
人工智能·github·copilot