== Opus 音频编解码器 ==
Opus 是一种用于在互联网上进行交互式语音和音频传输的编解码器。
Opus 可以处理各种交互式音频应用,包括 VoIP、视频会议、游戏聊天,甚至远程现场音乐表演。它可以从低比特率窄带语音扩展到非常高质量的立体声音乐。
当与适当的容器格式配合使用时,Opus 也适用于非实时存储文件应用,如音乐发行、游戏音轨、便携式音乐播放器、自动点唱机和其他历史上使用过高延迟格式(如 MP3、AAC 或 Vorbis)的应用。
Opus is specified by IETF RFC 6716:
http://tools.ietf.org/html/rfc6716
Opus 格式及其实现均受 COPYING 文件中指定的免版税专利和版权许可的保护。
此包实现了一个用于编码和解码原始 Opus 位流的共享库。应根据 http://tools.ietf.org/html/draft-spittka-payload-rtp-opus 使用 RTP 通过该工具读取/写入的原始 Opus 位流。
该包还包括一些用于测试库正确操作的测试工具。这些工具读取/写入的位流不应用于 Opus 文件分发:它们包含额外的调试数据,并且不支持查找。
存储在文件中的 Opus 应使用在以下位置描述的 Ogg 封装:http://wiki.xiph.org/OggOpus
有一个 opus-tools 包可用,它提供了对 Ogg 封装的 Opus 文件的编码和解码功能,并包含了许多有用的特性。
opus-tools 可以在以下位置找到:https://git.xiph.org/?p=opus-tools.git 或在主要的 Opus 网站上:http://opus-codec.org/
== 编译 libopus ==
要从分发 tarball 编译,您只需执行以下操作
% ./configure % make
要从 git 存储库编译,需要以下步骤
1) 克隆存储库
% git clone git://git.opus-codec.org/opus.git % cd opus
2) 编译源代码
% ./autogen.sh % ./configure % make
3) 安装编解码器库(可选)
% sudo make install
编译编解码器后,主目录中会有一个 opus_demo 可执行文件。
用法:opus_demo [-e] [选项] opus_demo -d [选项]
模式:voip | audio | restricted-lowdelay 选项:-e:只运行编码器(输出位流)-d:只运行解码器(以输入位流读取)-cbr:启用恒定比特率;默认:可变比特率-cvbr:启用受限可变比特率;默认:非受限-bandwidth:音频带宽(从窄带到全带);默认:采样率-framesize:帧大小(ms);默认:20-max_payload:最大有效载荷大小(字节),默认:1024-complexity:复杂度,0(最低)... 10(最高);默认:10-inbandfec:启用SILK内带FEC-forcemono:强制单声道编码,即使对于立体声输入也如此-dtx:启用SILK DTX-loss:模拟数据包丢失,百分比(0-100);默认:0
输入和输出都是小端有符号16位PCM文件或opus位流,使用简化的opus_demo专有封装。
== 测试 ==
此包包含一系列自动化单元和系统测试,应在编译此包后运行,尤其是在新平台上第一次运行时。
要运行集成测试:% make check
为了尺寸原因,此包不包括标准的测试向量,但可以从以下位置获得:http://opus-codec.org/testvectors/opus_testvectors.tar.gz
要运行比较代码与这些测试向量
% curl -O http://opus-codec.org/testvectors/opus_testvectors.tar.gz % tar -zxf opus_testvectors.tar.gz % ./tests/run_vectors.sh ./ opus_testvectors 48000
== 可移植性说明 ==
此实现默认使用浮点数,但可以通过设置--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编译器都支持)。