opus基础简介(github)

news/2024/10/4 19:37:43 标签: github, opus

== 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 编译器也支持)。


http://www.niftyadmin.cn/n/5690277.html

相关文章

畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)

畅阅读系统小程序 目录 基于java的畅阅读系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

【运维类资料集】实施运维方案(word)

编写目的&#xff1a; 作为项目运维服务质量管理的总纲&#xff0c;规范和指导公司运维服务质量管理&#xff0c;加强运维服务质量管理的有效性。保证运维服务的整体质量&#xff0c;提升公司运维服务的整体质量水平。使公司能够为客户提供更高质量的运维服务&#xff0c;保障公…

LabVIEW混合控制器质量检测

随着工业自动化水平的提高&#xff0c;对控制器的精度、稳定性、可靠性要求也在不断上升。特别是在工程机械、自动化生产、风力发电等领域&#xff0c;传统的质量检测方法已无法满足现代工业的高要求。因此&#xff0c;开发一套自动化、精确、可扩展的混合控制器质量检测平台成…

数据工程师岗位常见面试问题-3(附回答)

数据工程师已成为科技行业最重要的角色之一&#xff0c;是组织构建数据基础设施的骨干。随着企业越来越依赖数据驱动的决策&#xff0c;对成熟数据工程师的需求会不断上升。如果您正在准备数据工程师面试&#xff0c;那么应该掌握常见的数据工程师面试问题&#xff1a;包括工作…

`git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支

git restore 和 git checkout 都可以用于丢弃工作区的改动 但它们有一些区别&#xff0c;尤其是在 Git 2.23 引入了新的命令后。 主要区别 git checkout 是一个多用途命令&#xff1a; 它用于切换分支。它还可以用于恢复工作区中特定文件的更改。由于功能过于复杂&#xff0c…

高性能防静电主轴4033 AC-ESD 在线路板切割中的非凡表现

随着电子产品的日益小型化/集成化&#xff0c;线路板的制造也面临着更高的挑战。线路板分板作为电子制造流程中的关键环节&#xff0c;其效率和精度直接影响到最终产品的质量和市场竞争力。因此专用的高性能防静电主轴SycoTec 4033 AC-ESD凭借其卓越的性能&#xff0c;成为众多…

同轴电缆笔记

同轴电缆笔记 射频同轴电缆的阻抗标准为什么是50Ω或75Ω呢&#xff1f; 在PCB设计中&#xff0c;在合理的范围内&#xff0c;传输线阻抗的具体数值并不重要。只要控制好整条传输线的阻抗&#xff0c;不要出现阻抗不连续的情况就好了。设计中的其他因素往往决定了我们用什么样…

OpenCV threhold()函数

OpenCV threhold()函数的主要用途是将灰度图转换为二值图像,实现灰度图的二值化&#xff0c;在机器视觉中使用频度较高&#xff0c;如尺寸量测&#xff0c;物体识别等。其原型如下&#xff1a; 函数参数&#xff1a; src 输入数组&#xff08;多通道、8 位或 32 位浮点&#xf…