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

这篇具有很好参考价值的文章主要介绍了走进音视频的世界——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编解码协议

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

2、码率与延时对比

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

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

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

三、Opus编解码框架

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

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

四、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端做决策处理。如下图所示:

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

1、SILK解码器

SILK解码流程如下图所示: 走进音视频的世界——Opus编解码协议

 对应序号的参数如下:

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

七、PLC丢包隐藏

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

到了这里,关于走进音视频的世界——Opus编解码协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [音视频处理] FFmpeg使用指北1-视频解码

    本文将详细介绍如何使用ffmpeg 4.4在C++中解码多种格式的媒体文件,这些媒体文件可以是视频、视频流、图片,或是桌面截屏或USB摄像头的实时图片。解码文件后,还将每帧图片转换为OpenCV的Mat格式以供后续使用。 目录 1 基于ffmpeg的媒体文件解码 1.1 简介 1.2 详细代码 2 ffmpeg函

    2024年02月07日
    浏览(64)
  • 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装播放流程 )

    本篇文件主要分析 音视频文件 是怎么产生的 , 以及 音视频文件是如何播放的 ; 视频文件从录像到生成文件的全过程 : 采集图像帧 : 摄像头 硬件 负责 采集画面 , 采集的 初始画面 称为 \\\" 图像帧 \\\" , 一秒钟 采集 的 图像帧 数量 称为 \\\" 帧率 \\\" , 如 : 60 帧 就是 一秒钟采集 60 个画

    2024年02月11日
    浏览(74)
  • 音视频5、libavformat-解码API详细讲解

    2024年02月20日
    浏览(47)
  • 从原理到实践:音视频编码与解码技术解析

    1.1 引言 音视频编码与解码技术在现代数字媒体领域中扮演着至关重要的角色。随着互联网和移动设备的快速发展,音视频数据的传输和处理变得越来越普遍和重要。理解音视频编码与解码的原理与实践对于开发高质量、高效率的音视频应用程序至关重要。 1.2 音视频编码与解

    2024年02月03日
    浏览(52)
  • Android 音视频开发实践系列-06-初步了解H.264视频编解码技术标准

    本文来自笔者本人的语雀博客,由于语雀升级后不再满足笔者的需求,因此之后笔者会陆续将一些之前已经发布但尚有价值的文章搬家到CSDN。 作为音视频行业从业者,怎么能不理解H.264视频编解码技术标准?本篇文章主要记录笔者学习过程中对众多优秀博客内容的摘抄整理,

    2023年04月09日
    浏览(51)
  • 在fpga上开发音视频是一种什么体验?

    今天周末回公司解决了解码播放问题,最近周末也没啥事情,一般周六都会过去公司学习音视频开源项目(过去公司,主要是住的近,所以很方便!),待在家里也是无聊,所以就回去看开源项目,提升自己的视野和水平! 然后这里也分享一些关于音视频开发的一些感悟和日记

    2024年02月08日
    浏览(45)
  • 世界杯直播 | 抖音视频编码器优化

    动手点关注 干货不迷路 对于世界杯这样的大型体育赛事而言,视频编码算法既要在高速运动、复杂纹理的场景下确保直播内容的清晰度和流畅度,保障用户的观赛体验,又要兼顾码率、延迟等对网络传输层面尤为敏感的指标。 另外,抖音实现了业界首次的世界杯比赛支持

    2023年04月09日
    浏览(50)
  • 基于新版FFmpeg(FFmpeg 6.1)的音视频复用(不涉及编解码)

    FFmpeg库常用函数介绍(一)-CSDN博客 FFmpeg库常用函数介绍(二)-CSDN博客 FFmpeg库常用函数介绍(三)-CSDN博客 这篇文章介绍的是基于新版FFmpeg(FFmpeg 6.1)的音视频复用器的实现,可以实现音频和视频文件复用为一个视频文件,具体功能如下表所示。 输入视频文件 输入音频文

    2024年01月17日
    浏览(72)
  • 从文本、图像到音视频,AIGC技术将如何重构我们的数字世界?

    1950 年,艾伦·图灵提出著名的「图灵测试」,给出判定机器是否具有智能的试验方法。16 年后,世界上第一款可人机对话的机器人“Eliza”问世,这是 AI 技术最早期的萌芽阶段。但由于当时的科技水平限制,AIGC 仅限于小范围实验。 Eliza 的出现代表了人们对人工智能和自然语

    2024年02月15日
    浏览(42)
  • 【学习】从零开发的Android音视频开发(13)——MediaCodec到OMX框架过程及其硬解码

    在讲NuPlayer时,NuPlayer解码部分会创建MediaCodec,并且最终到达OMX框架,先看MediaCodec的 init 函数 从init函数中可以看到,首先创建了 ACodec ,并且初始化了 ALooper 、 AMessage ,由于ACodec继承自 AHandler ,那么一套消息机制就有了。最后发送 kWhatInit 消息,收到消息的逻辑位于ACodec.

    2023年04月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包