当前位置: 首页 > article >正文

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


http://www.kler.cn/news/327553.html

相关文章:

  • 使用rsync+jenkins实现服务自动部署全流程
  • React 生命周期 - useEffect 介绍
  • WebGIS包括哪些技术栈?怎么学习?
  • 足球青训俱乐部后台:Spring Boot开发策略
  • 滚雪球学MySQL[11.1讲]:总结与展望
  • Spring Boot 点餐系统:简化您的订餐流程
  • 一个服务器可以搭建几个网站
  • vue结合element-ui实现列表拖拽变化位置,点击拖动图标拖动整个列表元素,使用tsx格式编写
  • SpringBootTest Mockito 虚实结合编写测试
  • LPDDR4芯片学习(二)——Functional Description
  • 解锁高效开发的秘密武器
  • <Rust>egui学习之部件(十三):如何为文本添加链接Link和超链接HyperLink功能?
  • 基于J2EE技术的高校社团综合服务系统
  • 设计模式---代理模式
  • webpack使用
  • 【Spring Boot 入门一】构建你的第一个Spring Boot应用
  • ECMAScript 详解
  • 新版本Android Studio如何新建Java code工程
  • MATLAB中数据导入与导出的全面指南
  • Ionic 颜色:探索前端开发的调色板
  • Spring Boot实现足球青训俱乐部管理自动化
  • ubuntu20.04系统安装zookeeper简单教程
  • Paddlets时间序列集成模型回测实战:MLPRegressor、NHiTSModel与RNNBlockRegressor
  • # VirtualBox中安装的CentOS 6.5网络设置为NAT模式时,怎么使用SecureCRT连接CentOS6.5系统?
  • 计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档
  • WPF中的switch选择
  • Visual Studio-X64汇编编写
  • stm32单片机学习 - MDK仿真调试
  • Redis篇(缓存机制 - 多级缓存)(持续更新迭代)
  • MySQL—表优化