nRF52-QA-opus编译

Opus 音频编解码器

Opus 是一种用于互联网互动语音和音频传输的编解码器。

Opus 可以处理广泛的互动音频应用,包括语音通信、视频会议、游戏内聊天,甚至是远程现场音乐表演。它可以从低比特率的窄带语音扩展到非常高质量的立体声音乐。

Opus 与适当的容器格式结合时,也适用于非实时存储文件应用,如音乐分发、游戏原声带、便携式音乐播放器、点唱机以及其他历史上使用高延迟格式(如 MP3、AAC 或 Vorbis)的应用。

Opus 的规格由 IETF RFC 6716 规范: https://tools.ietf.org/html/rfc6716

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

此软件包实现了一个用于编码和解码原始 Opus 比特流的共享库。原始 Opus 比特流应根据 RFC 7587 通过 RTP 使用。

该软件包还包括多个用于测试库正常工作的测试工具。这些工具读取/写入的比特流不应用于 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 的许可或知识产权位置在 Opus 1.5 中没有变化。

编译 libopus

要从发行版 tarball 构建,只需执行以下操作:

% ./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] <application> <sampling rate (Hz)> <channels (1/2)> <bits per second> [options] <input> <output>
opus_demo -d <sampling rate (Hz)> <channels (1/2)> [options] <input> <output>

模式: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 <bytes>:最大有效载荷大小(字节),默认:1024
  • -complexity <comp>:复杂度,0(最低)… 10(最高);默认:10
  • -inbandfec :启用 SILK 带内 FEC
  • -forcemono :强制单声道编码,即使输入是立体声
  • -dtx :启用 SILK DTX
  • -loss <perc> :模拟丢包,百分比(0-100);默认:0

输入和输出为小端有符号 16 位 PCM 文件或 opus 比特流,具有简单的 opus_demo 专有封装。

测试

此软件包包含一组自动化单元和系统测试,应在编译软件包后运行,特别是首次在新平台上运行时。

运行集成测试:

% 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 定义的任何 未定义行为,但它依赖于两补码架构的常见 实现定义行为

  • 负值的右移与两补码算术一致,因此 a»b 相当于 floor(a/(2^b))。
  • 对于转换为 N 位的有符号整数,值会模 2^N 以保持在类型范围内。
  • 负值的整数除法结果被截断至零。
  • 编译器提供 64 位整数类型(C99 要求,大多数 C89 编译器支持)。

使用 CMake 构建 Opus 项目

本指南提供了使用 CMake 构建 Opus 项目的说明,包括各种配置选项。CMake 是一种广泛使用的构建系统生成器,帮助在不同平台上管理构建过程。

注意:请注意,软件文档有时可能会随着新版本的发布而过时。建议始终参考官方 CMake 文档,以获取最新和准确的信息。您可以在 cmake.org/documentation 找到官方 CMake 文档。

前提条件

在继续之前,请确保您已安装以下前提条件:

  • CMake
  • Git(可选,但建议用于版本控制集成)
  • 工作中的 C 编译器

构建说明

按照以下步骤使用 CMake 构建 Opus 项目:

  1. 使用 Git 克隆 Opus 仓库:

     git clone https://gitlab.xiph.org/xiph/opus
    
  2. 在 Opus 仓库中创建构建目录:

     cd opus
     mkdir build
     cd build
    
  3. 使用 CMake 配置构建。您可以使用 CMake 的 -D 标志设置所需的配置选项。以下是一些可用的选项:

    • OPUS_BUILD_SHARED_LIBRARY:构建共享库。
    • OPUS_BUILD_TESTING:构建测试。
    • OPUS_BUILD_PROGRAMS:构建程序。
    • OPUS_CUSTOM_MODES:启用非 Opus 模式,例如 44.1 kHz 和 2^n 帧。

    例如,要启用自定义模式并构建程序,请使用以下命令:

     cmake .. -DOPUS_BUILD_PROGRAMS=ON -DOPUS_BUILD_TESTING=ON
    
  4. 构建 Opus 项目:

     cmake --build .
    
  5. 成功构建后,您可以在构建目录中找到编译好的 Opus 库和相关文件。

使用 CTest 进行测试

Opus 提供了一个全面的测试套件,以确保项目的功能和正确性。您可以使用 CTest 执行测试,CTest 是 CMake 构建系统的一部分。CTest 允许自动化测试,并提供管理和评估测试结果的有用功能。

要使用 CTest 运行 Opus 测试,请按照以下步骤操作:

  1. 在用 CMake 配置并构建项目后,导航到构建目录:

     cd build
    
  2. 使用 CTest 执行测试:

     ctest
    

注意:在 Windows 上,您需要指定要测试的配置

ctest -C Debug

平台支持和错误报告

CMake 旨在提供广泛的平台支持,允许在主要操作系统和平台上构建和使用 Opus 项目。支持的平台包括:

  • Windows
  • macOS
  • Linux
  • Android
  • iOS

CMake 通过生成针对特定平台的构建文件(例如,Makefile、Visual Studio 项目)来实现平台支持。这允许开发人员在不同操作系统和环境中一致地构建和配置 Opus 项目。

虽然 CMake 力求确保跨平台的兼容性和稳定性,但在特定配置中仍可能会出现错误或问题。如果在配置过程中或构建 Opus 项目时遇到任何问题,我们鼓励您在 项目的问题跟踪器 中报告问题。

报告问题时,请提供以下信息,以帮助我们有效地了解和重现配置问题:

  1. 问题的详细描述,包括任何错误消息或观察到的意外行为。
  2. 重现问题的步骤,包括 CMake 命令和任何使用的特定配置选项。
  3. 操作系统和版本(例如,Windows 10,macOS Big Sur,Ubuntu 20.04)。
  4. CMake 版本(例如,CMake 3.21.1)。
  5. 有关平台、工具链或依赖项的任何相关信息。
  6. 可能有助于排除故障的其他上下文或细节。

通过提供详细的信息来报告配置问题,您将有助于改善 Opus 项目在不同平台上的兼容性和可靠性。

我们感谢您在识别和解决任何配置相关问题方面的帮助,以确保所有 Opus 项目的用户都能获得更好的体验。

平台特定示例

注意:示例可能会过时。始终参考文档以获取最新的参考信息。

为 Android 进行交叉编译

cmake .. -DCMAKE_TOOLCHAIN_FILE=${ANDROID_HOME}/ndk/25.2.9519653/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a

有关为 Android 进行交叉编译的更多信息,请参阅 Cross compiling for Android documentation

为 iOS 进行交叉编译

cmake .. -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64

有关为 iOS 进行交叉编译的更多信息,请参阅 Cross compiling for iOS documentation

Windows Visual Studio

cmake .. -G "Visual Studio 17 2022" -A x64

有关 Visual Studio 生成器选项和其他自定义设置的更多信息,请参阅 [官方文档]。

使用 Meson 构建系统构建 Opus 项目

本指南提供了使用 Meson 构建系统构建 Opus 项目的各种配置选项的说明。Meson 是一个快速高效的构建系统,旨在易于使用和理解。

请注意,软件文档可能会随着新版本的发布而过时。有关最新和最准确的信息,请参阅官方 Meson 文档,网址为 mesonbuild.com

先决条件

在继续之前,请确保已安装以下先决条件:

  • Meson
  • Ninja(推荐作为构建后端,尽管其他后端也可用)
  • Git(可选,但建议用于版本控制集成)
  • 一个有效的 C 编译器

构建和测试说明

按照以下步骤使用 Meson 构建 Opus 项目。

检出源代码

使用 Git 克隆 Opus 仓库:

git clone https://gitlab.xiph.org/xiph/opus
cd opus

配置

要使用 Meson 配置构建,您可以使用 -D 标志后跟选项名称和值来设置所需的配置选项。有关 Opus 项目特定的构建选项,请参阅 meson_options.txt 文件。要获取 Meson 的一般选项,请使用命令 meson setup --help

例如,要设置并禁用测试,请使用以下命令:

meson setup builddir -Dtests=disabled

构建

meson compile -C builddir

构建成功后,您可以在 builddir 目录中找到编译后的 Opus 库及相关文件。

使用 Meson 测试

Opus 提供了一个全面的测试套件,以确保项目的功能和正确性。您可以使用 Meson 的内置测试功能来执行测试。

要使用 Meson 运行 Opus 测试:

meson test -C builddir

平台支持和错误报告

Opus Meson 构建系统旨在支持与 GStreamer 相同的平台,GStreamer 是一个广泛使用的多媒体框架。GStreamer 支持多种操作系统和平台,包括 Linux、Windows(MSVC 和 MingW)、Android、macOS、iOS 和各种 BSD 系统。

尽管我们努力确保这些平台上的兼容性和稳定性,但在特定配置中仍可能会出现错误或问题。如果在配置过程中或构建 Opus 项目时遇到任何问题,我们鼓励您在 项目问题跟踪器 中提交问题。

报告问题时,请提供以下信息,以帮助我们理解并有效地重现配置问题:

  1. 问题的详细描述,包括任何错误消息或观察到的意外行为。
  2. 重新出现问题的步骤,包括 Meson 命令和任何使用的特定配置选项。
  3. 操作系统及版本(例如,Windows 10、macOS Big Sur、Ubuntu 20.04)。
  4. Meson 版本(例如,Meson 0.60.0)。
  5. 相关的关于平台、工具链或依赖项的信息。
  6. 可能有助于故障排除的其他上下文或细节。

通过提供详尽的信息来报告配置问题,您将有助于提高 Opus 项目在不同平台上的兼容性和可靠性。

我们感谢您在识别和解决任何配置相关问题方面的帮助,以确保 Opus 项目所有用户都能获得更好的体验。

平台特定示例

注意:示例可能会过时。始终参考文档以获取最新的参考信息。

Windows Visual Studio

要生成 Visual Studio 项目,Meson 需要知道您安装的 Visual Studio 版本的设置。推荐的方法是使用 Visual Studio 命令提示符运行 Meson。

您可以通过从开始菜单中搜索来找到 Visual Studio 命令提示符。但是,名称因 Visual Studio 版本而异。对于 Visual Studio 2022,请查找“x64 Native Tools Command Prompt for VS 2022”。以下步骤保持不变:

meson setup builddir -Dtests=enabled --backend vs

有关 Visual Studio 后端选项和其他自定义的更多信息,请参阅 使用 Visual Studio 文档。

新手必知

海量第三方学习资源.

超全常用工具与文档.

本站常用资源下载.

常见问题搜索.

QQ群: 542294007.

文章引用自:元仓库 OLIB.cn.