41 lines
883 B
Markdown
41 lines
883 B
Markdown
第一阶段:先把单人播放跑通
|
||||
|
|
1.
|
|||
|
|
同时允许 codec 4 和 5;
|
|||
|
|
2.
|
|||
|
|
建立一个有界语音帧队列;
|
|||
|
|
3.
|
|||
|
|
由单个协程顺序消费;
|
|||
|
|
4.
|
|||
|
|
使用 libopus 解码裸 Opus 数据;
|
|||
|
|
5.
|
|||
|
|
将 PCM 顺序写入 AudioTrack;
|
|||
|
|
6.
|
|||
|
|
增加丢包处理和基本抖动缓冲;
|
|||
|
|
7.
|
|||
|
|
验证声音、速度、音调是否正常。
|
|||
|
|
第二阶段:多人语音
|
|||
|
|
1.
|
|||
|
|
每个客户端独立 Opus decoder;
|
|||
|
|
2.
|
|||
|
|
根据 packet sequence 做重排;
|
|||
|
|
3.
|
|||
|
|
缺包时调用 Opus PLC;
|
|||
|
|
4.
|
|||
|
|
多路 PCM 饱和混音;
|
|||
|
|
5.
|
|||
|
|
混音结果写入一个 AudioTrack;
|
|||
|
|
6.
|
|||
|
|
清理长时间无数据的客户端 decoder。
|
|||
|
|
第三阶段:Android 音频体验
|
|||
|
|
1.
|
|||
|
|
使用 AudioManager.MODE_IN_COMMUNICATION;
|
|||
|
|
2.
|
|||
|
|
请求 audio focus;
|
|||
|
|
3.
|
|||
|
|
正确切换扬声器、听筒、蓝牙耳机;
|
|||
|
|
4.
|
|||
|
|
实现输出音量;
|
|||
|
|
5.
|
|||
|
|
处理电话、耳机插拔、应用后台和断线;
|
|||
|
|
6.
|
|||
|
|
根据生命周期释放 AudioTrack 和解码器。
|