音视频基础概念与选型前提
2.1 本章边界与输入输出
本章聚焦多媒体工程架构中必须理解的基础概念:采样率、编码格式、容器格式与硬件加速。边界限定在选型前提与原理级认知,不深入编解码器内部实现或驱动层细节。输出为:一张概念关系图、一组选型对比表、以及架构落地所需的步骤与验收标准。
2.2 分层架构与组件职责
在 Android 多媒体管道中,上述概念分布在以下层次:
| 层次 | 核心组件 | 职责 |
|---|---|---|
| 采集层 | AudioRecord / Camera2 | 原始 PCM / YUV 数据,采样率由设备驱动决定 |
| 数据处理层 | AudioProcessor / MediaCodec | 重采样、格式转换、滤镜 |
| 编解码层 | Codec (软/硬) | 编码格式(AAC/H.264)压缩 / 解压缩 |
| 封装层 | Muxer / Demuxer | 容器格式(MP4/MKV)读写 |
| 渲染/播放层 | AudioTrack / SurfaceView | 最终输出,依赖硬件加速处理解码后数据 |
边界定义:采样率属于采集与数据处理层;编码格式贯穿编解码层;容器格式属于封装层;硬件加速作为横切能力影响编解码与渲染层。
架构提示:硬件加速并非独立层次,它是一套通过 GPU / DSP 卸载计算负载的路径,在架构图中表现为编解码层与渲染层之间的 信任链路,上层通过 MediaCodec 选择 Codec 类型(软/硬)完成。
2.3 核心概念详解
2.3.1 采样率
采样率决定单位时间内采集的样本点数,直接影响信号保真度。常见值:8 kHz(电话)、16 kHz(语音)、44.1 kHz(CD)、48 kHz(视频同步)、96 kHz(专业音频)。
- 选型权衡:高采样率带来更大带宽与存储消耗,低采样率可能导致高频信息丢失。
- 风险点:采样率不匹配导致重采样引入失真或延迟;部分硬件加速器对非标准采样率支持不佳。
2.3.2 编码格式
编码格式定义压缩算法,直接影响码率、质量与兼容性。常见编码格式对比:
| 编码格式 | 类型 | 压缩效率 | 硬件加速支持 | 典型场景 |
|---|---|---|---|---|
| AAC | 有损音频 | 良好 | 几乎全部(MediaCodec) | 流媒体、本地播放 |
| MP3 | 有损音频 | 中等 | 部分老设备 | 兼容性要求高 |
| H.264 (AVC) | 有损视频 | 高 | 几乎全部 | 在线视频、直播 |
| H.265 (HEVC) | 有损视频 | 极高 | 中高端设备 | 4K/8K、HDR |
| VP9 | 有损视频 | 高 | Pixel / 部分SoC | Web、YouTube |
| AV1 | 有损视频 | 极高 | 仅旗舰新品 | 下一代流媒体 |
选型权衡:优先选择硬件加速列表中覆盖率高的格式(如 H.264、AAC),避免 AV1 在全量设备上回退软编导致过热。
2.3.3 容器格式
容器格式负责封装音频、视频、字幕、元数据。常见对比:
| 容器格式 | 特点 | 兼容性 | 流式支持 |
|---|---|---|---|
| MP4 | ISO标准,支持分段(fMP4) | 全平台 | 优秀 |
| MKV | 灵活、多音轨、字幕内嵌 | 部分播放器受限 | 一般 |
| WebM | VP8/VP9 + Opus,流式友好 | 浏览器全支持 | 优秀 |
| TS | 直播低延迟,支持纠错 | 仅特定场景 | 极佳 |
风险警示:容器格式与编码格式需配对检测(如 H.265 容器应是 MP4 而非 MKV 时,部分 Demuxer 可能报错)。信任链路需在 MediaExtractor 创建时验证。
2.3.4 硬件加速特性
硬件加速通过专用单元(GPU、DSP、VPU)分担编解码负载。Android 通过 MediaCodec API 提供统一接口,底层选择由 OMX IL 或 Codec2 驱动。
- 控制流:应用层指定
video/avc等 MIME,底层查询系统编解码器列表,返回支持的加速器。 - 数据流:Surface 输入/输出可绕过 CPU 拷贝,直接渲染到显示。
- 选型权衡:硬件加速降低功耗、提升帧率,但可能裁剪部分 profile(如 H.264 High 10)。部分 SoC 仅支持解码,编码需软编码回退。
2.4 选型权衡总表
| 维度 | 推荐 | 避免 |
|---|---|---|
| 音频采样率 | 44.1k / 48k | 48k 以下非标准值 |
| 音频编码 | AAC (LC/HE) | 老旧 MP3 或 AC-3(无硬件加速) |
| 视频编码 | H.264 (Baseline/High) | AV1(除非旗舰+软编可接受) |
| 容器格式 | MP4 (fMP4 for streaming) | MKV(播放器兼容性差) |
| 硬件加速策略 | 先查加速列表,再 fallback 软编 | 强制硬编/硬解不加异常处理 |
2.5 落地步骤
- 需求定义:确定目标码率、分辨率、音频带宽、延迟预算。
- 设备画像:通过
MediaCodecList枚举当前设备支持的所有编码器/解码器及硬件加速标志。 - 测试矩阵:至少覆盖 5 款主流 SoC(高通、联发科、三星、华为、Tensor)的采样率与编码组合。
- 选型固化:建立代码内策略表(如下),动态选择。
// 伪代码:选型策略示例
if deviceHasHardwareAAC() {
audioCodec = "audio/mp4a-latm"
sampleRate = 48000
} else {
audioCodec = "audio/mp4a-latm" // 软编 fallback
sampleRate = 44100
}
if deviceHasHardwareH265() {
videoCodec = "video/hevc"
} else if deviceHasHardwareH264() {
videoCodec = "video/avc"
} else {
videoCodec = "video/avc" // 软编 fallback
}
container = "video/mp4" // 首选
最佳实践:将选型策略封装为
MediaCapabilityProvider 接口,便于单元测试与设备差异管理。
2.6 验收标准
- 采样率正确性:录制/播放时实际采样率与配置偏差 < 1‰。
- 编码格式兼容:在目标设备集合上,指定编码格式的编解码成功率 100%(软/硬均可)。
- 容器格式完整性:生成的 MP4 文件可在系统播放器、Chrome、VLC 中正常播放,音画同步误差 < 10ms。
- 硬件加速性能:编解码帧率 ≥ 目标帧率的 90%,CPU 占用率较软编降低 ≥ 40%。
- 信任链路验证:硬件加速 fallback 流程无 crash,日志中能正确标记硬编/软编路径。