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 和解码器。 |