关于本备忘录
本文件可能不会发布修正版本等后续工作。请注意SILK 仍然处在测试阶段,所以SILK 及其RTP 负载格式和文件存储格式都可能改变。如有疑问,请联系 [email protected]。
版权声明
版权 2009-2010,版权归Skype 所有
摘要
本文件定义了将SILK 语音频编码数据打包所用的实时传输协议(RTP)负载格式和文件存储格式,这些数据对于以最兼容的方式实现SILK 是必不可少的。并进一步描述了RTP 负载格式和文件存储格式的媒体类型注册。
目录
1. 简介
SILK 是Skype 内部开发的一个语音频编解码器,作为Skype 到Skype 调用的默认编解码器。SILK 在音频带宽、网络码率和复杂度等方面的高度可扩展性使其成为可选择多种模式和应用的编解码器。
Skype 鼓励第三方合作伙伴组织(3GPP)在可能与Skype 互操作的网络中采用SILK。因此,本文件定义了将SILK 语音频编码数据打包所用的RTP 负载格式和文件存储格式,这些数据是以最兼容方式实现SILK 必不可少的。本文件进一步描述了RTP 负载格式和文件存储格式媒体类型注册。
关于SILK 的更多信息可以通过以下链接获得:
https://developer.skype.com/silk
2. 本文件使用的公约、定义和缩略语
本文件中出现的关键词“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMEDED”,“MAY”,“OPTIONAL”的解释参见RFC 2119 [1]。
定义和缩略词:
CPU —— 中央处理单元
IP —— 网络协议
MTU —— 最大传输单元
PSTN —— 公共交换电话网
Samples —— 语音或音频采样点
SDP —— 会话描述协议
3. SILK 编解码器
SILK 语音频编解码器在音频带宽、网络码率和复杂度等方面具有高度的可扩展性。
SILK 支持四种不同的音频带宽:窄带8000 Hz 采样率,中带12000 Hz 采样率,宽带16000 Hz 采样率,超宽带24000 Hz 采样率。窄带模式应该(SHOULD)只用于PSTN 网络的接口或者用在不支持大于8000 Hz 采样率的低端设备上。中带模式应该(SHOULD)用于不支持大于12000 Hz 采样率的更低端设备或者严重的网络带宽限制的条件下(例如无线设备)。宽带模式应该(SHOULD)用于所有不支持大于16000 Hz 采样率的所有网络协议平台。超宽带模式应该(SHOULD)用于所有支持24000 Hz 或者更高采样率的平台。
平均目标网络码率在表1 对应音频带宽下规定的范围内是可变的。平均网络目标码率可以实时定义和修正,而实际码率依赖于输入信号,且随时间而改变。实际码率可能高于或低于表1 规定的自适应目标码率。推荐采用表中码率范围的上限。
表1. fs 代表以赫兹为单位的采样率,BR 代表以千位每秒为单位的自适应目标码率范围
|
Fs (Hz) |
BR (kbps) |
窄带 |
8000 |
5 – 20 |
中带 |
12000 |
7 – 25 |
宽带 |
16000 |
8 – 30 |
超宽带 |
24000 |
20 – 40 |
复杂度可扩展用于实时优化CPU 资源,多用于与网络码率的权衡。
SILK 内部帧长为20 ms。SILK 编码器可以设置为捆绑5 个内部帧为一个输出帧,允许编码语音频数据的帧长为20,40,60,80,100 ms。表2 显示了不同帧长和采样率时一帧语音或者音频包含的采样点数。
表2. 不同帧长和采样率时,一帧包含的采样点数
帧长 |
20 ms |
40 ms |
60 ms |
80 ms |
100 ms |
窄带采样点 |
160 |
320 |
480 |
640 |
800 |
中带采样点 |
240 |
480 |
720 |
960 |
1200 |
宽带采样点 |
320 |
640 |
960 |
1280 |
1600 |
超宽带采样点 |
480 |
960 |
1440 |
1920 |
2400 |
SILK 操作在非常低的算法延迟,包括算法打包延迟(例如20,40,60,80,100 ms)加上5 ms 前瞻延迟。
3.1.自适应采样频率
SILK 编码的语音频信号内部采样率可以随着传输时间而变化,这可能在以下两种情况下发生。
第一种情况是,SILK 提供一种内部逻辑,决定自动将编码的语音频信号内部采样率调整到最有效的采样率,这个最有效采样率取决于输入信号和信道容量信息。这种内部逻辑使得SILK 支持拥塞控制和网络负荷管理。
第二种情况是,SILK 提供手动设置编码的语音频信号最大内部采样率的API 功能。这个最大内部采样率不能(MUST NOT)被设置高于呼叫建立协商时商定的采样率,这是因为SILK 的早期版本不能解码内部采样率高于解码端输出采样率(解码器API 采样率)的信号。
对于以上两种情况,只有被编码成码流的语音频信号的内部采样率被切换时,SILK 编码器输入的语音频信号和解码器输出的语音频信号的采样率才能单独设置而互不影响。
会话建立的时候,解码端应该(SHOULD)将系统可以利用的所有采样率(率参数)发信号给给编码端
3.2.自适应网络码率
SILK 编码器可以设置不同的平均目标码率输出编码的语音频数据。规定的平均目标码率是为积极信号(例如非静音帧)设置的,因此每一帧的实际码率根据数据语音频信号的感知重要性而变化。平均目标码率可以以帧为单位进行调整,这使SILK 支持拥塞控制和网络负荷管理。
为了有效的实现这些,必须提供信道容量和存储设备的相关信息。这些信息可以通过多种渠道获得,但不再本文件讨论范围。
当无法获得信道容量信息时,SILK 可以以固定的平均目标码率运行。这个固定的平均目标码率必须谨慎选择,因为超过信道容量时可能导致额外的延迟和语音帧丢失。除非最宽带宽网络接口技术的信道限制是已知的,否则推荐使用表1 中提供的最大平均目标码率达到最好的语音音质。
3.3.不连续传输(DTX)
如本文件3.2 节所述,SILK 编解码器是码率自适应的。对于特定的输入信号,比如静音周期,码率会被自动削减。在连续传输模式下,当输入信号允许的时候,编码器会削减码率,但是,到接收器的传输不会被中断。因此,接收到的信号在全部传输过程中使码率最小化但保持较高水平的音质。
在SILK 的平均码率需要进一步削减的情况下,SILK 编码器可以设置成不连续传输(DTX),此时部分编码信号,即输入语音频信号的静音周期,不被传送到接收端。
在接收端,没有传送的部分将被SILK 解码器当作丢失帧处理,即产生舒适噪声信号代替没有传送的语音频信号部分。
SILK 的不连续传输模式的语音频音质会比连续模式稍差。因此,推荐(RECOMMENDED)使用SILK 的连续模式,除非网络带宽的限制比较严格。
3.4.前向差错纠正(FEC)
SILK 编解码器允许在SILK 码流中嵌入“带内”前向差错纠正(FEC)数据。这种FEC 方案将前一帧(n-1)或者前两帧(n-2)的冗余信息加到当前帧(n)。对于每一帧,编码器根据以下信息决定是否使用FEC :(1)外部提供的信道丢包率估计值;(2)外部提供的信道容量估计值;(3)语音频信号对丢包的敏感度;(4)接收端解码器是否显示可以利用“带内”FEC 信息。发送“带内”FEC 信息的决定完全受编码器控制,因此不需要关于负载或存储格式的特殊注意事项。
在接收端,当某一帧丢失而未来帧可接收到的时候,解码器可以利用这些附加信息。为了使用FEC 数据,抖动缓冲区需要提供包含SILK 未来帧的负载和相对SIK 上一解码帧偏移量的信息。一个特殊的API 函数可以搜索可用的FEC 数据,如果搜索成功的话,可以作为当前丢失帧提供给解码器。
如果这种FEC 方案没有在接收端实现的话,FEC不应该(SHOULD NOT)被使用,因为它将导致网络带宽的低效使用。解码器支持FEC 的话,应该(SHOULD)在会话建立的时候显示。