# Solo **Repository Path**: surface_xue/Solo ## Basic Information - **Project Name**: Solo - **Description**: 抗丢包音频编解码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-19 - **Last Updated**: 2024-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README *[English](README.md)|中文* # SOLO概述 抗丢包音频编解码器 SOLO 已经开源,源代码已经上传至 Github。该项目由声网Agora团队自研,以 Silk 编解码器为基础,融合BWE、MDC等技术,可以帮助WebRTC应用在较高丢包率下,仍然获得较好的实时音频体验。 SOLO是一款面向不稳定网络的编解码器,它以Silk为基础,融合了带宽扩展(BWE)和多描述编码(MDC)等技术,使其能在较低复杂度下拥有弱网对抗能力。 SOLO 特性: * 兼容 WebRTC * 以 Silk 为基础,融合了带宽扩展(BWE)和多描述编码(MDC)等技术 * 25%丢包率下,MOS 值优于 Opus 图1. SOLO编码器架构: ![solo_encoder](https://github.com/AgoraIO-Community/Solo/blob/master/imag/solo_encoder.png) 图2. SOLO解码器架构: ![solo_decoder](https://github.com/AgoraIO-Community/Solo/blob/master/imag/solo_decoder.png) # 关键技术概述 ## 带宽扩展 SOLO使用带宽扩展的主要原因是希望减少计算复杂度,在Silk WB模式中,16khz的信号都会进入后续处理模块,而对于语音来说,8khz以上的信息是非常少的,这部分信息进入到后续处理模块,会带来一定的计算资源浪费。MDC因为要引入额外分析模块处理多条码流,又会引入额外的复杂度,这是MDC在近些年来落地不顺畅的重要原因之一。为了减少复杂度,我们在编码宽带信号前,将其分为0-8k的窄带信息和8-16k的高频信息。只有窄带信息会进入到后续正常分析、编码流程中,这样后续的计算量就减少了一半,同时得益于带宽扩展算法,整体质量不会有明显下降。高频信息部分,SOLO使用独立的分析与编码模块,默认将高频信息压缩成1.6kbps的码流。这部分高频信息可以在解码器内结合低频信号恢复出高频信号。 ## 结合delay-decision的MDC 在Silk中,delay-decision模块是一个滞后计算编码误差的模块,它可以从多个候选码流中选择误差最小的码流作为编码输出,一定程度上来说,它使得标量量化拥有了矢量量化的性能。 SOLO利用delay-decision模块,实现了多描述码流的分析与构建。SOLO的MDC主要作用于滤波器输出的残差信号, SOLO会根据当前信号状态,对残差信号做多增益控制:计算出MD增益a(0