== Opus 音频编解码器 =='
Opus 是一种用于在互联网上进行交互式语音和音频传输的编解码器。
Opus 可以处理各种交互式音频应用,包括 VoIP、视频会议、游戏聊天,甚至是远程现场音乐表演。它可以从低比特率窄带语音扩展到非常高质量的立体音乐。
当与适当的容器格式相结合时,Opus 同样适用于非实时存储文件应用,如音乐分发、游戏配乐、便携式音乐播放器、自动点唱机和其他传统上使用高延迟格式(如 MP3、AAC 或 Vorbis)的应用。
Opus is specified by IETF RFC 6716:
http://tools.ietf.org/html/rfc6716
Opus 格式及其实现受 COPYING 文件中指定的免专利费专利和版权许可的约束。
此包实现了一个共享库,用于编码和解码原始 Opus 比特流。原始 Opus 比特流应根据 http://tools.ietf.org/html/draft-spittka-payload-rtp-opus 使用 RTP 进行传输
该包还包括用于测试库正确操作的一些测试工具。这些工具读取/写入的比特流不应用于 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 =='
要从发行版的中继文件编译,您只需要执行以下操作
% ./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 : 框架大小(毫秒);默认: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
此外,还收集了一系列标准测试向量,由于篇幅原因未包含在本软件包中,但可以从以下网址获取: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宏(如果手动构建)来编译为仅使用定点运算。定点实现具有较低的音频质量,而且是在具有快速FPUs的平台上运行较慢,通常仅用于嵌入式环境。
此实现可以使用C89或C99编译器编译。尽管它不依赖于定义的任何C89或C99的未定义行为,但它依赖于针对二进制补码架构的共同实现定义行为。
o 负值的右移与二进制补码算术一致,因此a>>b等价于floor(a/(2^b))
o 对于转换为N位有符号整数,值减少到2^N的模以在类型范围内
o 负值整数除法的结果会截断为零
o 编译器提供了一个64位整数类型(C99的要求,大多数C89编译器都支持)