Android 音视频技术:从基础概念到面试实战指南
前言
随着移动互联网行业的快速发展,音视频技术在 Android 平台上的应用日益广泛。从在线直播、短视频、语音通话到沉浸式游戏体验,音视频处理成为了 Android 开发工程师必须掌握的关键技能之一。本文深入剖析 Android 音视频涉及的关键知识点、实战经验和面试常见问题,助您构建系统的知识体系。
一、基础概念与技术栈
1. 音频编码与解码
- PCM(Pulse Code Modulation):原始音频数据格式,通常未经压缩,数据量大,需要经过编码转换为高效传输的压缩格式,如 AAC、MP3。
- 音频编解码器:常见的包括 AAC、Opus、AMR-NB/WB 等。开发者需掌握它们的特点、应用场景及在 Android 中的集成方式。例如,AAC 适合音乐播放,Opus 适合低延迟通信。
2. 视频编码与解码
- 编码标准:H.264、H.265、VP8、VP9 是主流标准。H.264 兼容性最好,H.265 压缩率更高但硬件支持要求高。
- MediaCodec API:Android 系统提供的硬编码/解码接口,用于高效处理音视频数据,相比软解能显著降低 CPU 占用和功耗。
3. 容器格式
- 常见格式:MP4、MKV、FLV 等。理解其基本结构(Header, Index, Data)对于解析和封装至关重要。
- Android 处理:利用 MediaExtractor 读取,MediaMuxer 进行封装。
4. 音视频同步
- 原理:基于 PTS(Presentation Time Stamp)和 DTS(Decode Time Stamp)。通常以音频时钟为基准,视频帧根据时间戳进行渲染调整。
- 方法:包括丢弃视频帧、插入空白帧或调整音频播放速度。
二、Android 音视频处理框架
1. 播放器选择
- MediaPlayer:系统自带,功能基础,适合简单播放需求。
- ExoPlayer:Google 开源,扩展性强,支持自适应流媒体(DASH/HLS),性能更优,推荐用于复杂场景。
2. 音频输出
- AudioTrack:直接操作底层音频缓冲区,延迟较低,适合游戏音效。
- OpenSL ES:跨平台音频引擎,功能丰富,但 API 较老旧,新开发建议使用 AudioTrack 或 Oboe。
3. 采集与推流
- Camera2 API:提供对相机参数的精细控制,支持预览、录制及自定义处理流程。
- 流媒体协议:RTMP 适用于直播推流,HLS 适用于点播,HTTP-FLV 兼顾低延迟与兼容性。常用开源库包括 librtmp、ijkplayer。
4. 实时通信技术
- WebRTC:实现 P2P 音视频通话的核心框架。关键组件包括 PeerConnection、DataChannel。
- 优化策略:针对延迟优化,采用缓冲区控制、网络抖动适应算法(Jitter Buffer)、丢包重传(NACK/FEC)等。
三、进阶技术与架构
1. WebRTC 核心机制
- ICE 框架:解决 NAT 穿透问题,通过 STUN/TURN 服务器获取候选地址并建立连接。


