对中国开发者最具吸引力的科技企业有哪些?快来为你 pick 的企业投票! 了解详情
写点什么

声网 Agora 开源抗丢包音频编解码器 Agora SOLO

2019 年 11 月 29 日

声网Agora开源抗丢包音频编解码器Agora SOLO

10 月 24 日,RTC 2019 第五届实时互联网大会在北京悠唐皇冠假日酒店如期举行。在下午的编解码技术专场上,声网 Agora 技术 VP 高泽华正式宣布,开源声网自研抗丢包音频编解码器 Agora SOLO。


为什么做一款抗丢包音频编解码器?

在近些年比较火的应用场景有这么几类:游戏,比如多人在线对战游戏、狼人杀等,多人组队,还需要实时语音;互动直播,比如主播与观众连麦、主播与其他主播进行跨直播间连麦,需要实时的互动;在线教育,其中有很多细分的场景,1 对 1、1 对多、双师等,在当前互动网络教育中最难解决的问题还是实时性,就是老师跟学生怎么能够更好的互动。


以上这些实时互动场景,在当前网络环境下,给技术提出了更高的要求,既要低延时,又要实现高质量的音视频互动。但是,如果承载信息的包没有按时到达,即出现丢包,就会产生声音断断续续、音质低等情况,直接影响实时互动的质量。然而,传统的抗丢包策略不是会浪费带宽,就是会影响音频质量,所以我们结合信源和信道编码的特点,利用充分包交换网络的特性,基于此,研发出了声网新的编解码器——Agora SOLO。


Agora SOLO 是什么?

Agora SOLO(以下简称“SOLO”)是由声网 Agora 自主研发的一款面向不稳定网络的音频编解码器,它以 Silk 为基础,融合了带宽扩展(BWE)和多描述编码(MDC)等技术,使其能在较低复杂度下拥有弱网对抗能力。SOLO 编解码器兼容 WebRTC,可集成到基于 WebRTC 自主研发的产品中。



图 1. SOLO 编码器架构



图 2. SOLO 解码器架构


SOLO 的抗丢包策略与传统方法不同。从通信原理来说,信源编码是尽可能去追求高压缩比,去冗余。而信道编码是追求强纠错,靠加冗余来实现纠错。Agora SOLO™就是把加冗余和减冗余结合起来,不重要的地方减冗余,重要的地方加冗余。


在传输过程中,它会将一个包拆分为两个进行传输,如果对端收到其中一个,则解码恢复出一个有限失真的信号;如果对端收到两个包,则可解码恢复出一个高质量的信号。即 SOLO 不需要等待对当前网络丢包状态的统计,只需要直接把抗丢包做到编解码内部。好处有三点:1.可实现更低延时;2.可实现更高质量,当收到一个包时质量达到的普通编解码器水平,收到两个包达到高质量编解码水平;3. 可面向多人环境。


SOLO 关键技术

01 带宽扩展

SOLO 使用带宽扩展的主要原因是希望减少计算复杂度,在 Silk WB 模式中,16khz 的信号都会进入后续处理模块,而对于语音来说,8khz 以上的信息是非常少的,这部分信息进入到后续处理模块,会带来一定的计算资源浪费。MDC 因为要引入额外分析模块处理多条码流,又会引入额外的复杂度,这是 MDC 在近些年来落地不顺畅的重要原因之一。为了减少复杂度,我们在编码宽带信号前,将其分为 0-8k 的窄带信息和 8-16k 的高频信息。只有窄带信息会进入到后续正常分析、编码流程中,这样后续的计算量就减少了一半,同时得益于带宽扩展算法,整体质量不会有明显下降。高频信息部分,SOLO 使用独立的分析与编码模块,默认将高频信息压缩成 1.6kbps 的码流。这部分高频信息可以在解码器内结合低频信号恢复出高频信号。


02 结合 delay-decision 的 MDC

在 Silk 中,delay-decision 模块是一个滞后计算编码误差的模块,它可以从多个候选码流中选择误差最小的码流作为编码输出,一定程度上来说,它使得标量量化拥有了矢量量化的性能。SOLO 利用 delay-decision 模块,实现了多描述码流的分析与构建。SOLO 的 MDC 主要作用于滤波器输出的残差信号, SOLO 会根据当前信号状态,对残差信号做多增益控制:计算出 MD 增益 a(0 < a < 1),将 a 作用于奇数子帧,并将(1-a)作用于偶数子帧以产生两段互补的残差信号,这里记作 residual 1 和 residual 2。



图 3. 多描述残差信号产生


随后,这两段残差信号会进入到新的 delay-decision 模块中,每个残差信号使用不同的抖动和量化方法,一共可以产生 8 种不同的备选状态,两两组合起来共有 64 种备选合成状态,新的 delay-decision 模块会对每个残差信号的独立误差和两个残差信号的合成误差进行加权求和,决定出最佳的两个残差信号进入到编码模块。


03 输出码流组包


图 4. 编码器码流整合及组包


SOLO 默认配置为每次输入 40ms(2 帧),输出两段互补的多描述码流,解码器接收到任一段码流,即可解码出 40ms 的信号。为了方便接收端区分码流的顺序,码流第一个字节的右数第 4 个 bit 是码流顺序标志位,第一段码流标志位的值是 0,第二段码流标志位的值是 1。接收端在进行码流处理时,可依据此标志位进行码流顺序判断。


集成方法已经详细写在 Github 中,请点击「阅读原文」浏览。当然,如果你对于 SOLO 有任何疑问,欢迎在 RTC 开发者社区中讨论。


本文转载自公众号声网 Agora(ID:shengwang-agora)。


原文链接:


https://mp.weixin.qq.com/s/wUbPaxM46w9YGVmiqpUm9Q


2019 年 11 月 29 日 17:00268

评论

发布
暂无评论
发现更多内容

新纪元·新生态!聚焦前沿科技,拥抱万物智联——2021开源科技节重磅来袭!

Geek_459987

Java架构速成笔记:七大专题,1425页考点,挑战P8岗

周老师

Java 编程 程序员 架构 面试

IDEA 文档插件 DocView 版本更新:支持编辑文档注释

程序员小航

IDEA idea插件 文档生成 Doc View

MVVP:一种基于状态的架构模式的设计与实现

行者

字节跳动上亿级别秒杀系统优化,用这个方案可行吗?

Java架构师迁哥

Elasticsearch入门,看完又要会!慎点

比伯

Java 架构 面试 程序人生 架构师

国产「网络安全」正稳步前进中!

Machine Gun

网络安全 信息安全 渗透测试 WEB安全 前端技术

四面字节斩获offer,二十不惑的年纪我的人生就这样第一次的走上了正轨,看到了前途希望与光明

钟奕礼

Java 编程 程序员 架构 面试

架构学习模块一作业

架构实战营

史上最全的Java面试题库宝典,Github上标星200k,太香了!

Java架构之路

Java 程序员 架构 面试 编程语言

项目优化-代码拆分

Darren

android 组件化 代码优化

情指行一体化平台建设,智慧公安可视化大数据分析系统开发

WX13823153201

你的Parquet该升级了:IOException: totalValueCount==0问题定位之旅

华为云开发者社区

sql spark ETL任务 Parquet totalValueCount

两面翻转盒子案例(3d效果)

赫鲁小夫

4月日更

阿里团队教科书:SpringBoot全优笔记,面面俱到太全了

Java架构师迁哥

辽宁重点人员管控系统搭建,指挥调度系统搭建

13823153121

架构实战营 模块一 作业

PB

架构实战营

涨薪15K,从小公司成功逆袭,拿到美团P2-3级offer(面经+心得)

Java架构师迁哥

量化策略交易系统,马丁策略平台搭建

13823153121

阿里的调优方案,不愧是业界最强,吹爆这份Java性能调优手册

Crud的程序员

Java 编程 程序员 架构 架构师

2021最新分享阿里P6面经及心得

比伯

Java 架构 面试 程序人生 计算机

解决了这5大障碍,才能用好混合云!

浪潮云

混合云

工作中的设计模式 —— 原型模式

程序员小航

Java 设计模式

低代码平台选型的道与术

人称T客

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

周老师

Java 编程 程序员 架构 面试

HDFS的block块和副本机制

大数据技术指南

hadoop hdfs 4月日更

匪夷所思?双非本末的我是如何六面阿里 --最终斩获Java岗P7offer

钟奕礼

Java 编程 程序员 架构 面试

架构实战训练营

Nick~毓

我能斩获自己跳动offer,全靠在一周内肝完这426页阿里面试通关手册,

钟奕礼

Java 编程 程序员 架构 面试

架构实战营模块一作业

冷大大

作业 架构实战营 模块一

音频应用类开源 Demo 大盘点

anyRTC开发者

ios android 音视频 WebRTC RTC

滴滴 Logi 日志管理与分析平台

滴滴 Logi 日志管理与分析平台

声网Agora开源抗丢包音频编解码器Agora SOLO-InfoQ