音视频--音频实时传输

1. 编解码

1.1 音频编解码原理

参考:https://blog.csdn.net/qq_42233059/article/details/134628085

(1) 编码
音频编码的基本原理是利用声学特性和听觉心理学原理对音频信号进行压缩。具体过程包括以下几个步骤:

  • 采样:将连续的模拟音频信号转换为离散的数字信号,即进行采样操作。
  • 量化:将采样后的信号进行量化,将连续的信号值映射为离散的取值,以减小数据量。
  • 压缩编码:对量化后的信号进行编码,将信号表示为更紧凑的形式。编码方法包括预测编码、变换编码和熵编码等。
  • 打包:将编码后的数据组织为数据包,便于传输和存储。

(2) 解码
音频解码的过程则是编码过程的逆过程,包括解包、解码、反量化和重构等步骤。解码后的信号经过数字模拟转换,即可恢复为模拟音频信号,下面是音频解码的主要步骤和原理:

  • 解包(Demultiplexing):音频解码器首先需要对编码后的音频数据进行解包。编码过程中,音频数据可能被分割成多个包或帧,并与其他相关的信息(如采样率、比特率、声道数等)一起打包在一起。解包阶段的任务是从数据流中提取出音频数据和相关信息。

  • 解码(Decoding):解码是音频解码的核心步骤。在这一步骤中,音频编码器使用特定的解码算法将压缩的音频数据转换回原始的数字音频信号。解码算法根据编码过程中使用的压缩算法和编码参数,对压缩后的数据进行逆操作,还原出原始的频域或时域表示。

  • 反量化(Dequantization):在编码过程中,音频信号的频域或时域表示经过了量化操作,即将连续的信号值转换为离散的数值。在解码阶段,需要对量化后的数据进行反量化操作,将离散的数值恢复为连续的近似值。反量化过程使用与编码过程相反的量化表或算法,将离散的数据重新映射到原始的数值范围内。

  • 重构(Synthesis):重构是将解码和反量化后的数据转换为模拟音频信号的过程。根据音频编码的特性和算法,重构阶段可能涉及滤波、插值和合成等操作。这些操作的目标是将解码后的数据转换为与原始音频尽可能接近的模拟信号。

  • 数字模拟转换(Digital-to-Analog Conversion):解码和重构后的音频数据仍然是数字形式的,需要进行数字模拟转换(DAC)以将其转换为模拟音频信号。DAC将离散的数字样本转换为连续的模拟信号,以便在扬声器或耳机等音频播放设备上播放。

通过以上步骤,音频解码器能够逆向操作,从压缩的音频数据中还原出高质量的模拟音频信号。解码的过程需要根据所采用的音频编码标准和算法进行相应的解析和计算,以确保解码后的音频质量和准确性。

1.2 常用音频编解码格式

实时语音交系统常用音频编解码格式:PCMA、PCMU、Opus等

(1) MP3
这种压缩方式的全称叫MPEG Audio Layer3,MP3是利用MPEG Audio Layer 3的技术,将音乐以1:10甚至1:12 的压缩率,压缩成容量较小的file,换句话说,能够在音质丢失很小的情况下把文件压缩到更小的程度。>而且还非常好的保持了原来的音质。 * 压缩率:10~12倍 * 优点:压缩比高,适合用于互联网上的传播 * 缺点: MP3 在 128KBitrate 及以下时,会出现明显的高频丢失

(2) AAC高级音频编码
Advanced Audio Coding。一种专为声音数据设计的文件压缩格式,与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的“性价比”。利用AAC格式,可使人感觉声音质量没有明显降低aac标志的前提下,更加小巧。AAC属于有损压缩的格式,与时下流行的APE、FLAC等无损格式相比音质存在“本质上”的差距。加之,传输速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC头上“小巧”的光环不复存在了。

优点:支持多种音频声道组合,提供优质的音质。

(3) WMA
WMA的全称是Windows Media Audio,是微软力推的一种音频格式。WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18,生成的文件大小只有相应MP3文件的一半。

压缩率:10~12倍
缺点:在高比率的渲染能力低下,同音源的一个320KBPS的MP3与比较192KBPS的WMA相比,音质和渲染力很容易分别出是前者较优。因为:
当 Bitrate 小于 128K 时, WMA 最为出色且编码后得到的音频文件很小。
当 Bitrate 大于 128K 时, WMA 音质损失过大。
优点:WMA还可以通过DRM(Digital Rights Management)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。
(4) WAV
WAV是录音时用的标准的windows文件格式,文件的扩展名为“.wav”,WAVE文件作为最经典的Windows多媒体音频格式,应用非常广泛。声道有单声道和立体声之分,采样频率一般有11kHz、22kHz和44kHz三种。 WAVE文件所占容量=(采样频率×采样位数×声道)×时间/8(1字节=8bit)。

(5) OGG
OGG格式的全称应该是OGG Vobis。它是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。OGG Vobis有一个很出众的特点,就是支持多声道, OGG Vobis在压缩技术上比MP3好,而且它的多声道,免费,开源这些特点,使它很有可能成为一个流行的趋势,这也正是一些MP3播放器对其支持的原因

可以对所有的声道进行编码,而不是MP3只能编码2个声道。多声道音乐的兴起,给音乐欣赏带来了革命性的变化,尤其在欣赏交响时,会带来更多临场感。这场革命性的变化是MP3无法适应的。在以后的播放技术>不断提高以后,而且人们对音质要求不断提高,Ogg的优势将更加明显。

优点:完全免费。开放没有专利限制。支持多声道
(6) APE
APE的本质,其实它是一种无损压缩音频格式。庞大的WAV音频文件可以通过Monkey”s Audio这个软件进行“瘦身”压缩为APE。有时候它被用做网络音频文件传输,因为被压缩后的APE文件容量要比WAV源文件小一半多,可以节约传输所用的时间。更重要的是,通过Monkey”s Audio解压缩还原以后得到的WAV文件可以做到与压缩前的源文件完全一致,.。所以APE被誉为“无损音频压缩格式”

1.3 OPUS编解码

1.3.1 OPUS编码特性

OPUS被设计为低延迟的音频编解码器,适用于实时通信等对延迟要求较高的应用。OPUS的延迟主要由帧长和编码算法决定,较短的帧长可以减少延迟,但会导致较高的比特率。在VOIP模式下,OPUS可以实现非常低的端到端延迟,通常在20毫秒到60毫秒之间。

  • 容错性:OPUS具有一定的容错性,可以在网络丢包或丢失部分数据的情况下仍能提供较好的音频质量。OPUS使用了纠错编码和前向纠错技术,通过重采样、插值和隐藏丢失数据等方法来恢复丢失的音频数据。

  • 平台支持:OPUS是一种跨平台的音频编解码格式,支持在多种操作系统和硬件平台上使用。它具有广泛的应用支持,包括桌面应用、移动应用、浏览器等,可以在不同设备和平台上进行音频编解码和传输。

  • 音频质量:OPUS以其出色的音频质量而闻名。它具有广泛的音频频带宽范围(从超低频到高频),能够适应不同类型的音频内容,并提供高保真度的音频重现。

  • 低延迟:OPUS被设计为低延迟的音频编解码器,适用于实时通信应用。它可以在保持较低延迟的同时提供高质量的音频传输。

  • 高效的压缩:OPUS具有出色的压缩性能,可以在较低的比特率下提供高质量的音频。它采用了多种音频编码技术和自适应比特率控制,以提供最佳的音频编解码效率。

  • 支持多通道音频:OPUS支持多通道音频编解码,包括立体声、5.1声道和7.1声道等。这使得OPUS适用于多通道音频应用,如音频录制、音频处理和游戏音频。

  • 不同应用场景的配置参数:OPUS提供了一系列的配置参数,允许用户根据应用需求进行定制。这些参数包括帧大小、比特率、预测算法和复杂度等。通过调整这些参数,可以在音频质量、延迟和压缩率之间进行平衡。

总体而言,OPUS是一种灵活、高效和适用于多种应用场景的音频编解码格式。OPUS的编解码过程可以根据实际需求进行参数配置,以平衡音频质量、延迟和压缩率,它能够提供低延迟、高音质的音频传输和存储解决方案,广泛用于语音通信、音频会议、流媒体、语音识别和语音交互等领域。

1.3.2 OPUS为何能抗弱网

Opus编码之所以能够在弱网环境下表现出良好的抗丢包能力,主要有以下几个原因:

  • 鲁棒性设计:Opus编码器在设计时就考虑到了网络的不稳定性。它内置了多种机制来处理网络中的丢包问题,如数据包丢失隐藏(PLC)技术。当网络中的数据包丢失时,Opus能够利用已接收的数据包来预测和重建丢失的数据,从而保持音频的连续性和可听性。
  • 可变比特率(VBR)和帧大小:Opus支持可变比特率和帧大小,这意味着它可以根据网络条件实时调整编码参数。在弱网环境下,Opus可以降低比特率并减小帧大小,以减少数据包的大小和数量,从而降低网络拥塞和丢包的风险。
  • 高效的编码算法:Opus采用了先进的编码算法,能够在保证音频质量的同时,尽可能减小编码后的数据量。这使得在相同的网络带宽下,Opus能够传输更多的音频数据,从而提高了音频的流畅性和清晰度。
  • 灵活的带宽分配:Opus编码器能够动态地调整音频带宽,以适应网络带宽的变化。在弱网环境下,Opus可以减少音频带宽的使用,以确保音频数据的稳定传输。
  • 支持前向纠错(FEC):虽然Opus本身并不直接支持前向纠错,但它可以与其他支持FEC的传输协议(如RTP/RTCP)结合使用。FEC能够在传输过程中为数据包添加冗余信息,以便在接收端检测到丢包时能够恢复部分丢失的数据。这种结合使用的方式可以进一步提高Opus在弱网环境下的抗丢包能力。

综上所述,Opus编码之所以能够抗弱网,主要是因为其具备鲁棒性设计、可变比特率和帧大小、高效的编码算法、灵活的带宽分配以及支持前向纠错等特性。这些特性使得Opus能够在弱网环境下保持音频的连续性和可听性,为用户提供更好的音频体验。

1.3.2 Opus使用

可以基于libopus开源库实现原始音频数据的Opus编解码操作

2. 音频质量提升

实时音频的传输中为了提升音频质量,一般要对音频做特殊处理:降噪、回声消除、自动增益(3A算法)。通过编解码器自身的的算法特性可以实现上述内容。但是也有专门的库来帮助实现对音频质量的提升。speexdsp库可以对声音数据中的高频声音和低频声音进行抑制,并进行降噪。同时speexdsp也提供了3A算法对音频增益。

2.1 speexdsp实现降噪

参考:https://avmedia.0voice.com/?id=54262

下面是使用speexdsp库抑制声音数据中的高频声音、低频声音并进行降噪的示例代码,假设采样率为44100Hz。

#include <stdio.h>
#include <stdlib.h>
#include <speex/speex_preprocess.h>
#define FRAME_SIZE 1024
int main()
{
    // 创建Speex预处理器
    SpeexPreprocessState *preprocess_state;
    preprocess_state = speex_preprocess_state_init(FRAME_SIZE, 44100); // 根据实际采样率调整
    
    // 设置预处理参数,包括高频抑制、低频抑制和降噪
    int enabled = 1;
    speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enabled);
    speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enabled);
    speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_DEREVERB, &enabled);
    
    // 打开输入文件和输出文件
    FILE *input_file, *output_file;
    input_file = fopen("input.raw", "rb");
    output_file = fopen("output.raw", "wb");
    
    if (input_file == NULL || output_file == NULL) {
        printf("文件打开失败\n");
        return -1;
    }
    
    short in[FRAME_SIZE];
    short out[FRAME_SIZE];
    
    while (fread(in, sizeof(short), FRAME_SIZE, input_file) > 0) {
        // 处理输入数据
        speex_preprocess_run(preprocess_state, in);
        
        // 写入处理后的数据到输出文件
        fwrite(in, sizeof(short), FRAME_SIZE, output_file);
    }
    
    fclose(input_file);
	fclose(output_file);
	// 清理资源
	speex_preprocess_state_destroy(preprocess_state);
	return 0;
}

实时传输

在音频的实时传输中

抗弱网

1.1 传输层

jitterBuffer(重组)、RTCP、自动重传

1.2 编码层

opus编解码:前向纠错(FEC)、丢包隐藏(PLC)、流量控制

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值