火山引擎 RTC 自研音频编码器 NICO 实践之路

动手点关注

a56d2b609ecdd99463734ffeeba8321a.gif

干货不迷路

1. 前言

随着互联网技术的不断发展,越来越多的人开始尝试使用或者依赖实时音视频产品解决团队沟通与协作问题。在通话过程中,我们时常会遇到因为网络波动(如拥塞、丢包、延时和抖动等)而导致的音频卡顿、掉字或者杂音等问题,影响工作效率。为解决此类音频弱网问题,业界一般采用前向纠错(Forward Error Correction,FEC)或者重传等网络策略优化方法,但这些方法存在冗余率过高、带宽利用效率低等缺点,而提升音频编码器的编码效率和抗丢包能力、提高带宽利用效率,是解决音频弱网问题更为高效的一种方法。Opus 作为 RTC 领域广泛使用的音频编码器,其编码质量较高,且提供一定的抗丢包能力,但是在高丢包以及突发丢包场景,音质会明显下降,同时,其编码效率也有进一步提升的空间。RTC 自研 NICO(Network Intelligent Audio Coding,NICO)编码器在完全兼容Opus 的基础上,极大提高了编码效率,并提供了超强的抗丢包能力。目前 NICO 已经成功集成进火山引擎 RTC,并应用于抖音和视频会议等业务,极大提升了弱网场景音频体验。

2. 音频编解码技术简介

音频编码器是一种将音频信号进行压缩和解压缩的装置。一般分为 3 大类:波形编码器、参数编码器和统一编码器。

2.1 波形编码

波形编码,顾名思义就是对音频信号的波形进行数字化处理。G.711 是由 ITU-T 制定的一个典型的波形编码器,码率为 64kbps,最早应用于固定电话场景,其核心思想是将每一个 14 比特的音频采样数据压缩成 8比特 表示。G.711 利用了人耳对大能量信号不敏感的特点,幅度大的信号量化误差大,幅度小的信号量化误差小,可以将信号码率压缩 50% 左右。

396a2f6fc8029f781e675cf9edacd820.png

2.2 参数编码

随着科学家对语音信号的特性和人耳感知声音的机制理解更加深入,参数编码器逐渐在语音编码和音频编码领域成为主流。参数编码就是指通过对信号提取若干个特征参数,并对特征参数进行量化压缩的方法。参数编码不以波形匹配为准则,而是通过对信号中的关键特征进行提取,并以高效的量化方式进行压缩,达到高质量恢复信号关键信息的目的。因此,参数编码器的编码效率也要明显高于波形编码器。下面分别针对语音和音频信号的参数编码方法进行说明。

2.2.1 语音编码

下图是一个码激励线性预测(Codebook Excitation Linear Prediction,CELP)编码器系统框图,是一个典型的参数语音编码器。主要利用了语音信号具有短时相关性和长时相关性的特点,使用线性预测的方法去除相邻样点间的相关性(即短时相关性),提取到线性预测(Linear Prediction Coding,LPC)系数,通过分析语音信号中的长时相关性提取基音周期参数,去除语音信号中的长时相关性,然后利用随机码书拟合随机激励信号,通过分析合成的方式获得最佳编码参数。这种方式只需要对 LPC 系数、基音周期、随机码书和两个增益参数进行量化压缩,解码端就可以恢复高质量语音。参数编码器只需要不到 20kbps 的码率即可达到与 G.711@64kbps 相同的质量,编码效率具有明显的优势。典型的编码器有:G.729、AMR-NB 和 AMR-WB 等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值