2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

书山有路,AI为径:科大讯飞如何在智能教育硬件赛场突出重围?

脑极体

支付通道接口异常统计上报

try catch

Java 失败上报

我是一个下「笨功夫」的人

非著名程序员

个人成长 认知提升 个人提升 8月日更

我要上首页!自荐好文,官方百万流量扶持

InfoQ写作社区官方

9月日更 11月日更 12月日更 热门活动 10月月更

react脚手架create-react-app学习笔记

Tao

React

保险污名化?区块链赋予保险的「四个机会」

CECBC

人类高质量程序员如何过七夕?

InfoQ写作社区官方

话题讨论

惨遭泄密!阿里P8大佬的架构笔记外泄:微服务分布式架构实践手册

Java 编程 架构 面试 架构师

想不到阿里内部的神级项目和JDK源码阅读指南竟惨遭GitHub开源

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

站在巅峰的阿里面试参考指南!居然能让我成功拿下 12 家大厂 offer?

Java 程序员 架构 面试 IT

神啦!最全“Java面试宝典+Java核心知识集”,一箭双雕杠秋招

Java 程序员 架构 面试 IT

什么是通证经济?它和区块链又有什么关系呢?

CECBC

解读区块链技术在中小企业中的4种常见用例

CECBC

2021 年最新版,阿里巴巴 / 今日头条 / 京东 Java 面经大合集(含答案)

Java 编程 面试 IT 计算机

【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(中)

码界西柚

SpringCloud OpenFegin Fegin 8月日更

滚雪球学 Python 第三轮,Python Web 之 Django 的世界

梦想橡皮擦

8月日更

入职那天“直接起飞”!双非渣本后端,两个月逆袭字节?

Java 编程 程序员 面试 计算机

我终于在六月份实现了跳槽九连杀:字节跳动 Java 研发岗

Java 编程 面试 IT 计算机

为了彻底搞懂 hashCode,我钻了一下 JDK 的源码

沉默王二

Java

合并两个有序数组

Memorys

Java 面试 算法

同事吃透了这份“阿里 Java 面试核心知识手册”6月份居然斩获 11 张大厂 Offer!

Java 编程 架构 面试 IT

链路压测中的支路问题初探

FunTester

性能测试 测试框架 压力测试 全链路压测 测试开发

字节大牛把算法常见面试:哈希、链表、队列、递归全部总结出来了

Java 程序员 面试 算法 计算机

在小厂工作三年的程序员喊话大厂:Java 中高级岗面试为何越来越难?

Java 程序员 架构 面试 IT

如何利用 Apache APISX 提升 Nginx 的可观测性

API7.ai 技术团队

nginx 开源 网关 APISIX

高可用架构(上)

编号94530

微服务 数据库设计 架构设计 高可用架构 高可用集群

阿里 Java 面试爆出内幕?十万字内部面试题总结(2021合格版)全网开源!

Java 编程 程序员 架构 IT

涨薪 150%,从小厂逆袭,坐上美团 L8 技术专家(面经 + 心得)

Java 编程 程序员 架构 IT

迈入 8K 时代,AI 驱动超高清 “视” 界到来

阿里云CloudImagine

阿里云 高清视频 视频处理 视频制作 视频云

AlertManager 告警发送频率探究

greatersecurity

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