音频编码
编码标准概述
AAC(Advanced Audio Coding)
– 编码原理:基于MDCT(改进离散余弦变换)的感知编码
– Profile:LC(Low Complexity)、HE(High Efficiency)、HEv2等
– 码率范围:32kbps-320kbps,常用128kbps
– 特点:压缩率高,质量好,广泛支持
– 应用场景:音乐流媒体、视频音频轨道、广播
Opus
– 编码原理:结合CELP(语音编码)和MDCT(音频编码)
– 码率范围:6kbps-510kbps,语音常用32kbps,音乐常用128kbps
– 延迟特性:可配置延迟(2.5ms-60ms),低延迟模式适合实时通信
– 特点:压缩率高,延迟低,开源免费
– 应用场景:WebRTC、VoIP、实时通信、音乐流媒体
G.711/G.722
– G.711:对数PCM编码(A-law或μ-law),64kbps,有压缩但质量接近PCM
– G.722:子带ADPCM编码,48/56/64kbps
– 特点:延迟极低,质量一般
– 应用场景:传统电话系统、VoIP
MP3(MPEG-1 Audio Layer 3)
– 编码原理:基于MDCT和感知编码
– 特点:广泛支持,但压缩率不如AAC
– 应用场景:音乐存储、播放
| 编码标准 | 码率范围 | 压缩率 | 延迟 | 质量 | 兼容性 | 专利 |
|---|---|---|---|---|---|---|
| AAC | 32-320kbps | 高 | 中等 | 优秀 | 优秀 | 有 |
| Opus | 6-510kbps | 很高 | 低 | 优秀 | 良好 | 无 |
| G.711 | 64kbps | 低 | 极低 | 一般 | 优秀 | 无 |
| G.722 | 48-64kbps | 低 | 极低 | 良好 | 良好 | 无 |
| MP3 | 32-320kbps | 中等 | 中等 | 良好 | 优秀 | 有 |
编码核心概念
关键参数
码率(Bitrate)
– 定义:每秒传输的比特数,单位kbps或Mbps
– 语音编码推荐码率:
– 极低带宽:8-16kbps(Opus窄带)
– 语音通话:16-32kbps(Opus宽带)
– 高质量语音:32-64kbps
– 音乐编码推荐码率:
– 低质量:64-96kbps(移动网络流媒体)
– 标准质量:128kbps(在线音乐标准)
– 高质量:192-256kbps(高保真音乐)
– 极高质量:320kbps(接近无损)
– 编码器码率对比(立体声音乐):
– AAC:128kbps可达接近CD质量
– Opus:128kbps质量优于AAC同码率
– MP3:需要192kbps才能达到AAC 128kbps质量
– G.711:固定64kbps(语音)
帧长度(Frame Size)
– 定义:编码器一次处理的音频样本数
– 常见值(以48kHz采样率为例):
– 2.5ms:120样本(超低延迟)
– 5ms:240样本(低延迟)
– 10ms:480样本(实时通信标准)
– 20ms:960样本(平衡延迟和效率)
– 40ms:1920样本(高效率,延迟较高)
– 60ms:2880样本(最高效率)
– 影响:
– 帧长度越短,延迟越低,但压缩效率越低
– 帧长度越长,压缩效率越高,但延迟越高
– 选择建议:
– 实时通话:10-20ms
– 视频会议:20ms
– 音乐编码:20-40ms
– 语音识别:10-20ms
编码器特定参数
Opus编码器参数
– Application模式:
– voip:优化语音通话(低延迟、降噪)
– audio:优化音乐质量(高保真)
– lowdelay:超低延迟模式(实时交互)
– 复杂度(Complexity):0-10,默认10
– 0:最快编码,质量最低
– 10:最慢编码,质量最高
– 推荐:实时通话5-8,离线编码10
– 带宽(Bandwidth):
– narrowband:4kHz(8kHz采样)
– mediumband:6kHz(12kHz采样)
– wideband:8kHz(16kHz采样)
– superwideband:12kHz(24kHz采样)
– fullband:20kHz(48kHz采样)
AAC编码器参数
– Profile:
– AAC-LC:低复杂度,最常用
– HE-AAC(AAC+):高效率,低码率优化
– HE-AACv2(eAAC+):增强型高效率,超低码率
– 量化质量(VBR质量):0.1-2.0
– 0.1-0.4:低质量(适合语音)
– 0.4-0.6:中等质量(适合一般音乐)
– 0.6-1.0:高质量(适合高保真音乐)
采样率转换
上采样(Upsampling)
– 提高采样率,需要插值填充新样本
– 不会改善音质,但可能需要用于格式转换
– 插值算法:线性插值、样条插值、sinc插值
下采样(Downsampling)
– 降低采样率,需要抗混叠滤波(Anti-aliasing)
– 会损失高频信息
– 适用于降低带宽和数据量
重采样算法
– 线性插值:速度快,质量一般
– 样条插值:速度中等,质量较好
– sinc插值:速度慢,质量最好(理论上完美重建)
声道处理
单声道编码
– 数据量最小
– 适合语音通话、播客、有声书
– 码率需求低
立体声编码
– 简单立体声:左右声道分别编码
– 联合立体声(Joint Stereo):
– Mid-Side编码:编码中置(M = L+R)和侧边(S = L-R)信号
– 强度立体声:高频使用单声道,低频使用立体声
– 优势:相同码率下质量更好,或相同质量下码率更低
多声道编码
– 5.1、7.1环绕声编码
– 使用声道耦合(Channel Coupling)技术
– 码率需求:约为立体声的2-3倍
编码延迟
编码器延迟来源
– 算法延迟:编码器需要缓冲一定数据才能开始编码
– 帧缓冲延迟:编码器按帧处理,需要等待完整帧
– 预处理延迟:滤波、变换等预处理操作
低延迟编码器
– 减少缓冲,但可能影响质量和压缩效率
– 实时通信需要低延迟(端到端<100ms)
– Opus低延迟模式:2.5-20ms算法延迟
延迟计算
– 总延迟 = 编码延迟 + 网络传输延迟 + 解码延迟 + 缓冲延迟
– 实时通信目标:总延迟<150ms(可接受)、<100ms(理想)
编码器实现详解
Opus编码器
Opus是现代化的开放音频编码标准,结合了SILK(语音编码)和CELT(音频编码)技术,提供从低码率语音到高质量音乐的全场景支持。
软件编码器
1. libopus(官方参考实现)
– 类型:开源软件编码器
– 开发者:Xiph.Org Foundation、Mozilla、Skype
– 特点:
– Opus编码器的标准参考实现
– 支持所有Opus特性和模式
– 编码质量优秀,压缩效率高
– 跨平台支持(Windows、macOS、Linux、iOS、Android)
– 低延迟模式支持(2.5ms算法延迟)
– 码率范围:6kbps-510kbps
– 采样率支持:8kHz、12kHz、16kHz、24kHz、48kHz
– 优势:
– 开源免费,无专利费用
– 质量优于同码率的AAC和MP3
– 低延迟特性优秀,适合实时通信
– WebRTC原生支持
– 自适应码率和带宽
– 劣势:
– CPU占用相对较高(特别是高复杂度模式)
– 部分旧设备和平台兼容性有限
– 适用场景:
– WebRTC音视频通话(最佳选择)
– VoIP语音通话
– 实时音乐流媒体
– 在线教育、远程会议
– 游戏语音
2. opus-tools
– 类型:官方命令行工具集
– 包含工具:
– opusenc:Opus编码器
– opusdec:Opus解码器
– opusinfo:Opus文件信息查看
– 特点:简单易用,适合批量转码
编码参数推荐:
| 场景 | Application | 码率 | 采样率 | 帧长度 | 复杂度 |
|---|---|---|---|---|---|
| 语音通话 | voip | 16-32kbps | 16kHz | 20ms | 5-8 |
| 视频会议 | voip | 32-64kbps | 24kHz | 20ms | 8 |
| 音乐流媒体 | audio | 96-128kbps | 48kHz | 20ms | 10 |
| 超低延迟 | lowdelay | 32-64kbps | 16-24kHz | 10ms | 5 |
| 游戏语音 | voip | 24-48kbps | 16kHz | 20ms | 5-8 |
硬件编码器支持情况
pus是相对较新的编码标准(2012年标准化),硬件芯片支持非常有限,绝大多数平台和设备不提供Opus硬件编解码
AAC编码器
AAC(Advanced Audio Coding)是广泛使用的音频编码标准,兼容性好,质量优秀。
软件编码器
1. fdk-aac(Fraunhofer AAC编码器)
– 类型:开源软件编码器(基于Fraunhofer商业编码器)
– 开发者:Fraunhofer IIS
– 特点:
– AAC编码器的黄金标准,质量最好
– 支持所有AAC Profile(LC、HE、HEv2)
– 编码质量优于其他AAC软件编码器
– 跨平台支持
– 优势:
– 质量最优,压缩效率高
– 低码率下质量优秀(HE-AAC)
– 广泛兼容性
– 劣势:
– 编码速度相对较慢
– 某些专利限制(具体取决于地区)
– 适用场景:
– 高质量音乐编码
– 流媒体服务(Spotify、Apple Music等)
– 视频音轨
– 广播
2. libavcodec AAC编码器
– 类型:FFmpeg/libavcodec内置
– 特点:质量一般,速度快,无专利费用
– 适用场景:快速转码、不要求极高质量的场景
硬件编码器支持情况
各平台AAC硬编硬解支持
| 平台/API | AAC硬编支持 | AAC硬解支持 | Profile支持 | 开发者API | FFmpeg编码器 | 备注 |
|---|---|---|---|---|---|---|
| iOS (AudioToolbox) | ✅ 支持 | ✅ 支持 | AAC-LC、HE-AAC、HE-AACv2 | ✅ 开放<br />AudioToolbox框架<br />(iOS 4.0+) | aac_at |
Apple官方API<br />低CPU占用,高质量编码<br />Swift/Objective-C/C可用 |
| macOS (AudioToolbox) | ✅ 支持 | ✅ 支持 | AAC-LC、HE-AAC、HE-AACv2 | ✅ 开放<br />AudioToolbox框架<br />(macOS 10.6+) | aac_at |
Apple官方API<br />C/C++/Swift/Objective-C可用 |
| Android (MediaCodec) | ✅ 支持 | ✅ 支持 | AAC-LC、HE-AAC<br />(具体支持因设备而异) | ✅ 开放<br />MediaCodec API<br />(Android 4.1+, API 16+) | aac_mediacodec |
Google官方API,Java/Kotlin可用<br />需运行时检测硬件能力<br />不同设备支持情况差异较大 |
| Windows (Media Foundation) | ✅ 支持 | ✅ 支持 | AAC-LC、HE-AAC | ✅ 开放<br />Media Foundation API<br />(Windows 7+) | aac_mf |
Microsoft官方API,C++/C#可用<br />需要支持AAC的音频硬件/驱动 |
| Linux (ALSA/PulseAudio) | ⚠️ 部分支持 | ⚠️ 部分支持 | 取决于硬件 | ⚠️ 部分开放<br />取决于硬件和驱动 | – | 支持情况因硬件和驱动而异<br />通常使用软件编码 |
AAC编码器选择建议
iOS/macOS应用:
– 推荐:使用AudioToolbox硬件编码
– 质量好,CPU占用低,功耗低
– 原生支持,无需第三方库
– 适合移动设备和实时场景
Android应用:
– 推荐:使用MediaCodec硬件编码(需检测硬件支持)
– 备选:使用fdk-aac软件编码(通过NDK)
– 注意设备兼容性测试
高质量音乐编码:
– 推荐:使用fdk-aac软件编码
– 码率:192-256kbps(AAC-LC)
– 质量最优
流媒体/直播:
– 移动端:使用硬件编码(iOS AudioToolbox、Android MediaCodec)
– 桌面端:使用fdk-aac或硬件编码
– 码率:128kbps(标准)、192kbps(高质量)
