走进音视频的世界——Opus编解码协议

Posted 徐福记456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走进音视频的世界——Opus编解码协议相关的知识,希望对你有一定的参考价值。

Opus是一种开源免费的音频编解码器,支持音乐和语音,具有低延时、带内FEC、DTX、PLC等特点,默认22.5ms延时,非常适用网络实时传输。官网:https://www.opus-codec.org。Opus协议收录于RFC6716,使用SILK和CELT两种编码。

目录

一、Opus特点

二、码率、音质、延时

1、音质与码率比较

2、码率与延时对比

三、Opus编解码框架

四、DTX非连续传输

五、FEC前向纠错

六、Opus解码

1、SILK解码器

七、PLC丢包隐藏


一、Opus特点

Opus在语音app应用很广泛,包括VoIP、视频会议、语音聊天、音乐直播演唱会等。即支持低码率语音,也支持高音质音乐。特点如下:

  1. 码率支持从6kb/s到510kb/s;
  2. 采样率支持从8kHz到48kHz;
  3. 可变帧长从2.5ms到60ms;
  4. 支持CBR和VBR两种码率模式;
  5. 音频带宽从窄带到全频带;
  6. 支持语音和音乐;
  7. 支持多达255个声道;
  8. 动态调整码率、带宽、帧大小;
  9. 支持PLC丢包隐藏;

二、码率、音质、延时

1、音质与码率比较

Opus、AAC、MP3、Vorbis等codec的质量与码率对比,如下图所示:

 由图可见,Opus的码率从6kb/s到128kb/s都是音质最高的,接着是AAC、Vorbis,而MP3是在128kb/s时取得不错音质。

2、码率与延时对比

Opus、AAC、Vorbis、MP3等codec的码率与延时对比,如下图所示:

 由图可见,Opus的码率从6kb/s到80kb/s时,延时都是最低的。接着是窄带的G729,超宽带的AAC-LD(低延迟模式)。而延时比较的是Vorbis、AAC、MP3,延时达到200ms左右。

三、Opus编解码框架

Opus的编解码框架包括:VAD静音检测、音调分析、预测分析、噪声整形分析、长期预测量化、线谱频率量化、增益量化。如下图所示:

四、DTX非连续传输

DTX,Discontinuous Transmission,用于检测静音传输时,自动降低码率节省带宽。前面提及的VAD模块就是用来静音检测。DTX适用于VBR和CBR码率模式,会稍微降低声音质量。因此,建议在网络带宽受限条件下,才开启DTX。

五、FEC前向纠错

FEC,Forward Error Correct,通过添加先前数据包的冗余数据到当前包,实现前向纠错。Opus允许带内的FEC。编码器决定是否使用FEC取决以下条件:

  • 外部提供信道丢包率估计;
  • 外部提供信道容量估计;
  • 语音或音乐对丢包的敏感度;
  • 解码器有没请求带内FEC信息;

发生丢包时,接收端可以根据FEC重建数据包。但是,每个数据包加上FEC导致数据量变大,所以FEC需要根据实际情况使用(比如丢包率达到一定程度)。

六、Opus解码

Opus的解码包括SILK和CELT两部分,在SILK端做采样率转换和延迟补偿,在CELT端做决策处理。如下图所示:

1、SILK解码器

SILK解码流程如下图所示: 

 对应序号的参数如下:

  1. 局部编码比特流;
  2. 编码参数;
  3. 脉冲、信号;
  4. 音调间隔,LTP系数;
  5. LPC线性预测编码系数和增益;
  6. 解码信号;
  7. 分离信号;
  8. 重采样信号;

七、PLC丢包隐藏

PLC,Packet Loss Concealment,是解码器可选模块。PLC依赖上一个接收到的数据包。在CELT解码模式,找出周期性的解码信号,使用音调偏移来重复窗口波形。窗口波形以如下方式重叠:保留时域混叠消除的上一个帧和下一帧。调用celt_decode_lost()函数实现。在SILK解码模式,使用上一帧的LPC(线性预测编码)插帧。

实时音频编解码之十一Opus编码

本文谢绝任何形式转载,谢谢。

第四章 Opus编码

Opus是较为成熟的开源商用语音编解码器,其编码质量高且无版权使用费,因WebRTC标准中规定要支持该音频编码器,所以当今各大浏览器都支持Opus编码器。Opus有很多突出的优点,如延迟低、编码范围宽、输出比特率可控等。Opus常用于实时通信和实时流媒体等程序中,通常伴随视频流,由于人耳对声音更为敏感,所以常以音频流RTP时间戳为基准同步视频流,音视频同步并不再本书范畴。

Opus编码比特率范围从窄带的6kbps到高品质立体声的510kbps,Opus使用LP和MDCT两种技术,在语音和音乐场景中都取得较好的压缩率和音频质量,其中LP技术基于Silk编码器,MDCT技术基于CELT编码器,Opus编码器是SILK和CELT编码器的集成,将SILK对语音编码的优势和CELT对音乐编码的优势相结合,通过混合编码的方式以便在语音和音乐场景下获得最佳的编码质量,Opus编码器的核心是SILK和CELT,两者之间相互独立,输出比特率流是SILK和CELT比特流的混合,SILK和CELT两者和Opus的关系如图4-1所示:

图4-1 Opus编码器结构框图

由于本书侧重于编解码原理及其实现,因而Opus编码器的一些逻辑控制流并不专门介绍,这些控制流包括编码器模式选择、编码比特率分配等。Opus编码的规范手册是RFC6716,规范中定义了比特流的组织格式,和比特流解码步骤,编码侧如何获取解码端需要的参数手册并没有做强制要求,当然手册中也给了

以上是关于走进音视频的世界——Opus编解码协议的主要内容,如果未能解决你的问题,请参考以下文章

实时音频编解码之十九 基于AI的语音编码(LPCNet)

WebRTC 视频编解码类型的选择 VP8 H264 还是其他?(openh264编码,ffmpeg解码)

WebRTC 视频编解码类型的选择 VP8 H264 还是其他?(openh264编码,ffmpeg解码)

实时音频编解码之十九 基于AI的语音编码(LPCNet)

音视频 WebRTCX264FFmpegijkplayerjsmpegLive555Opus源码解读

音视频基础知识