写点什么

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

  • 2019-11-29
  • 本文字数:1927 字

    阅读完需:约 6 分钟

声网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:001032

评论

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

lazada 商品详情 API 的获取与应用

科普小能手

API 接口 API 测试 lazada商品评价接口 lazada API接口 lazada API

30岁转行学 IT 如何避免内卷?

高端章鱼哥

如何在软件工程团队中提升领导力

爱吃小舅的鱼

领导力

浅谈inBuilder中元数据的灰度更新方案

inBuilder低代码平台

低代码 元数据 低代码中的元数据

0基础真的能学会java吗?

伤感汤姆布利柏

贝锐花生壳内网穿透:无需公网IP,远程访问自建WebDAV文件共享!

贝锐

内网穿透 NAS 群晖

java和前端,选哪个好点?

秃头小帅oi

附演讲视频|隐语城市行·北京站:行业发展趋势、大模型前沿技术、实践落地案例干货打包

隐语SecretFlow

2024 OPPO开发者大会召开,携手火山引擎加速迈进AI语音交互新时代

新消费日报

C#常见的四种经典查找算法

快乐非自愿限量之名

Java C# 算法

@开发者,请查收新书《MindSpore大语言模型实战》

Geek_2d6073

【DevOps系列】DevOps全过程质量管控

嘉为蓝鲸

DevOps

《使用Gin框架构建分布式应用》阅读笔记:p143-p207

codists

Scale Prometheus: K8s 部署 GreptimeDB 集群作为 Prometheus 长期存储

Greptime 格睿科技

数据库 k8s 集群

场景题:百万数据插入Redis有哪些实现方案?

王磊

关于C语言指针类型的总结

EquatorCoco

数据结构 算法 C语言

可视化数学分析软件MathWorks MATLAB R2023a for Mac

Mac相关知识分享

Illustrator 2023版 for mac(Ai2023矢量设计应用程序)

Mac相关知识分享

iPaaS 平台在企业中的定位及集成方式

RestCloud

API网关 应用集成 ipaas api可视化编排

QCN9274 and Mesh Networks: A Game-Changer for Seamless Connectivity

wallyslilly

工业互联网引领制造业革命:智能化升级与创新亮点揭秘!

EquatorCoco

低代码 工业互联网

【DevOps系列】DevOps工具链选型指南

嘉为蓝鲸

DevOps 工具链

豆包MarsCode Agent 登顶 SWE-bench Lite 评测集

豆包MarsCode

AI

智能体一体机,大模型时代一叶见菩提

脑极体

AI

创新实践:基于边缘智能+扣子的智能取物机器人解决方案

火山引擎边缘云

物联网 机器人 智能IoT边缘服务 AI Agents 边缘智能

【DevOps系列】CICD流程建设之警惕反模式

嘉为蓝鲸

DevOps CI/CD 反模式

一文教会你如何使用 iLogtail SPL 处理日志

阿里巴巴云原生

阿里云 云原生 SPL

抽象最佳实践提供一键复用体验,火山引擎进一步简化 AI 能力落地难度

新消费日报

数据为王 存储先行 | 数智化转型中的数据存储需求变革

Geek_2d6073

Tecplot 360 EX 2021 R1 for Mac CFD可视化和分析工具

Mac相关知识分享

声网Agora开源抗丢包音频编解码器Agora SOLO_文化 & 方法_声网_InfoQ精选文章