实时音视频系统通常分为推流端(采集、编码、传输)和拉流端(接收、解码、渲染),核心流程如下:
模块 | 推流端 | 拉流端 |
---|---|---|
音视频采集 | 麦克风、摄像头数据获取 | |
编码 | H.264/H.265(视频)、AAC/Opus(音频) | H.264/H.265(视频)、AAC/Opus(音频) |
传输协议 | RTMP/WebRTC/RTC(如TCP/UDP/SRTP) | RTMP/WebRTC/RTC |
解码 | 软解码(如FFmpeg)或硬解码 | |
渲染 | SurfaceView/TextureView/OpenGL ES |
音频采集
AudioRecord
或 MediaRecorder
获取原始音频数据。 AudioRecord
,支持更低延迟和更高灵活性(如采样率、声道数自定义)。视频采集
Camera
API(旧版)或 Camera2
API(支持多摄像头、手动控制参数)。 编码器 | 特点 | 适用场景 |
---|---|---|
H.264 | 兼容性好,压缩率高,但计算开销大 | 中高清晰度实时视频 |
H.265 | 相同质量下带宽更低,但编码复杂度更高 | 高清/超高清视频 |
VP8/VP9 | 谷歌开源,支持Alpha通道,但部分平台需授权 | WebRTC、低延迟场景 |
AAC | 音频压缩标准,平衡质量与体积 | 语音通话、音乐直播 |
Opus | 低延迟、高质量音频编码,适合实时语音 | 语音聊天、游戏语音 |
MediaCodec
调用硬件编码器(如高通、麒麟芯片),降低CPU占用。 FFmpeg
实现跨平台编码,但性能消耗较大。协议 | 特点 | 适用场景 |
---|---|---|
RTMP | 基于Flash,延迟较高(秒级),但穿透性好 | 直播推流(如斗鱼、B站) |
WebRTC | 低延迟(毫秒级)、P2P穿透、支持NAT穿越 | 实时通话、视频会议 |
RTC(SRTP) | 基于UDP,加密传输,延迟中等(百毫秒级) | 互动直播、游戏语音 |
RTSP | 轻量级流媒体协议,支持点播/直播 | 安防监控、IPTV |
解码
MediaCodec
或 FFmpeg
解码流数据。 MediaCodec
)优先,若不支持则切换到软解码。渲染
问题 | 优化方案 |
---|---|
延迟高 | 使用低延迟编码器(如H.264 baseline profile)、减少缓冲区大小、启用硬件加速 |
卡顿/丢帧 | 动态调整码率、分辨率,优先保障音频流畅度,使用丢包重传机制(如FEC/ARQ) |
功耗高 | 降低摄像头分辨率、帧率,关闭不必要的传感器(如GPS) |
兼容性差 | 适配不同芯片平台(如骁龙/Exynos),测试多种Android版本(API 16-33) |
问题 | 原因 | 解决方案 |
---|---|---|
音视频不同步 | 网络抖动、解码速度不一致 | 时间戳校准、预缓冲关键帧、动态调整播放速率 |
黑屏/绿屏 | 摄像头权限未开通、编码器初始化失败 | 检查权限申请、验证 MediaCodec 格式兼容性 |
音质差/噪声大 | 采样率低、环境噪音干扰 | 提高音频采样率(48kHz)、启用降噪算法(如Speex) |
发热严重 | 长时间高负荷运行、硬件编码效率低 | 限制帧率/分辨率、优先使用硬件编码、避免频繁切换编码器 |
解答:
baseline profile
或VP8)。 MediaCodec
的latency
参数)。 解答: