Opus 低延迟音频编解码器API手册中文翻译

2019-04-15 19:05

Opus:IETF低延迟音频编解码器:API和操作手册

Opus简介

Opus编解码器是专门设计用于互联网的交互式语音和音频传输。它是由IETF的编解码器工作组设计的,合并了Skype的SILK和Xiph. Org的CELT技术。

Opus编解码器的设计目的是处理广泛的交互式音频应用程序,包括IP语音,视频,游戏内聊天,甚至远程现场音乐表演。它可以适用于从低码率窄带语音到非常高质量的立体声音乐。它的主要特点是:

? ? ? ? ? ? ? ? ? ?

采样率从8至48 kHz

比特率从6kb/s到510kb/s

对固定码率(CBR)和可变码率(VBR)都能支持 从窄带到宽带的音频带宽 支持语音和音乐 支持单声道和立体声

支持多通道(最多255通道) 帧规格从2.5毫秒到60毫秒

良好的损失鲁棒性和包丢失隐藏性(PLC)(注:应是指丢包也不容易被发现)

浮点和定点执行

文档包括:

? ? ? ? ? ?

Opus Encoder Opus Decoder Repacketizer

Opus Multistream API

Opus library information functions Opus Custom

1

Opus Encoder

本节描述了Opus编码器OpusEncoder的过程和函数

类型定义

typedef struct OpusEncoder

OpusEncoderOpus encoder 状态.

函数

int

OpusEncoder

*

int

opus_encoder_get_size (int channels) 获得 OpusEncoder结构的大小

opus_encoder_create (opus_int32 Fs, int channels, int application, int *error)

分配和初始化 encoder状态.

opus_encoder_init (OpusEncoder *st, opus_int32 Fs, int channels, int application)

初始化一个以前分配的编码器状态。所指向的内存圣必须至少是opus_encoder_get_size()返回的大小.

opus_int32

opus_int32

void

int

opus_encode (OpusEncoder *st, const opus_int16 *pcm, int frame_size, unsigned char *data, opus_int32 max_data_bytes) 对一个 Opus帧进行编码.

opus_encode_float (OpusEncoder *st, const float *pcm, int frame_size, unsigned char *data, opus_int32 max_data_bytes) 根据浮点输入对一个 Opus帧进行编码. opus_encoder_destroy (OpusEncoder *st)

释放一个根据opus_encoder_create()已分配的OpusEncoder 对象。 opus_encoder_ctl (OpusEncoder *st, int request,...) 向一个Opus编码器执行一个 CTL 函数.

2

详细描述

本节描述了用于编码Opus的过程和函数。

既然Opus是一个有状态的编解码器,编码过程始于创建一个编码器状态,用以下方法做到:

int error;

OpusEncoder *enc;

enc = opus_encoder_create(Fs, channels, application, &error);

从这一点上, enc可以用于编码音频流。一个编码器状态在同一时间不得用于多于一个音频流。同样,编码器状态不能对于每帧重新初始化。

当opus_encoder_create()为状态分配内存时,它也可以初始化预分配的内存: int size; int error;

OpusEncoder *enc;

size = opus_encoder_get_size(channels); enc = malloc(size);

error = opus_encoder_init(enc, Fs, channels, application);

opus_encoder_get_size()返回编码器状态要求的大小。注意,这段代码的未来版本

可能改变大小,所以没有assuptions应该对它做出。

编码器状态在内存中总是连续,复制它只要一个浅拷贝就足够了。

使用opus_encoder_ctl()接口可以改变一些编码器的参数设置。所有这些参数都已有缺省值,所以只在必要的情况下改变它们。最常见的参数设置修改是: opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate));

opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity)); opus_encoder_ctl(enc, OPUS_SET_SIGNAL(signal_type));

在这里:

? bitrate(比特率)的单位是比特/秒(b / s)

? complexity(复杂性)是一个值从1到10,1最低,10最高,值越大越复杂

? signal_type(信号的类型)包括OPUS_AUTO (缺省), OPUS_SIGNAL_VOICE, or

OPUS_SIGNAL_MUSIC。

看Encoder related CTLs 和 Generic CTLs可以获得可设置和查询的参数详细清单。在一

个音频流处理过程中,大多数参数可以设置或修改。

为了对一个帧进行编码,必须正确地用音频数据的帧(2.5, 5, 10, 20, 40 或60 毫

3

秒)来调用opus_encode() 或opus_encode_float()函数。

len = opus_encode(enc, audio_frame, frame_size, packet, max_packet);

在这里:

? audio_frame(音频帧)是opus_int16(或用于opus_encode_float()的浮点)格

式的音频数据

? frame_size(帧大小)是样本中帧的最大数(每个通道) ? packet(包)是写成压缩数据的字节数组,

? max_packet是可以写入包的字节数的最大值推荐(4000字节)。不要使用

max_packet控制VBR的目标比特率,而应该用OPUS_SET_BITRATE CTL。

opus_encode() 和opus_encode_float()返回实际写入包的字节数。返回值可以是

负数,这表明一个错误已经发生。如果返回值是1个字节,那么包不需要传播(DTX)。

一旦一个编码器状态已不再需要,可以用以下方式解构:

opus_encoder_destroy(enc);

如果编码器是用opus_encoder_init() 创建的,而不是使用opus_encoder_create()函数,那么不需要采取行动,要求从潜在的释放为它手动分配的内存(上述例子是调用 free(enc))中分离。

类型定义文档

typedef struct OpusEncoder OpusEncoder

Opus编码器状态。

这包含了一个Opus编码器的完整状态。它是位置独立的,并且可以自由复制。

函数文档

opus_int32 opus_encode ( OpusEncoder * const opus_int16 * pcm, int frame_size, unsigned char * data, opus_int32 max_data_bytes ) 对一个Opus帧进行编码。

4

st,

参数:

[in] st OpusEncoder*:编码器状态

[in] pcmopus_int16*: 输入信号(如果是2 通道有交叉). 长度是 frame_size*channels*sizeof(opus_int16)

[in] frame_size int:输入信号的每通道样本数. 这必须是编码器采样率的Opus帧大小。比如,48 kHz 下允许值有120, 240, 480, 960, 1920, 和 2880。少于10毫秒的采样(48 kHz 有480个样本),将阻止编码器使用LPC或混合模式。

[out] 容量。

[in] max_data_bytes opus_int32: 为输出负载所分配的内存大小。可以用于限制固定比特率的最大上限,但不能用作唯一的比特率限制,可以用

OPUS_SET_BITRATE来控制比特率。

data unsigned char*: 输出负载。必须包含至少max_data_bytes 的

返回值:成功,是被编码包的长度(字节数),失败,一个负的错误代码

opus_int32 opus_encode_float ( OpusEncoder *

const float * pcm, int

frame_size,

data,

st,

unsigned char * opus_int32

max_data_bytes

)

根据浮点输入对一个 Opus帧进行编码. 参数:

[in] st OpusEncoder*:编码器状态

[in] pcmfloat*:浮点格式的输入(如果是2 通道有交叉),正常范围在+/-1.0之间. 超过该范围的采样也是支持的,但它将被解码器用整型API截取,并且只能在知道远端支持扩展的动态范围的情况下使用。长度是 frame_size*channels*sizeof(float)

[in]

frame_size int: 输入信号的每通道样本数. 这必须是编码器采样率

的Opus帧大小。比如,48 kHz 下允许值有120, 240, 480, 960, 1920, 和 2880。

5


Opus 低延迟音频编解码器API手册中文翻译.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:java程序设计课程--实验指导书--实验1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: