以上确定好设备的音频采集播放的最佳参数后,我们就可以实现音频的采集和播放功能了。在 Android 系统 API 中可以通过创建 AudioRecorder 和 AudioTrack 类实例来实现设备端的音频采集和音频播放。
2.通过 openSL ES,实现复杂,延迟较小,而且有可控的延迟 buffer 可调。不论是编写合成器、卡拉 OK、游戏还是其他实时应用,都可以使用 C 或 C++ 实现高性能、低延迟时间音频。而且 Android 在 O 版本中引入 AAudio 作为 OpenSL ES 库的轻量级原生 Android 替代项,专门针对低延时高性能的音频应用设计,实现起来相对 openSL ES 要简单许多,性能上也会相对更优。
对于声明 android.hardware.audio.low_latency 功能的设备, 也可以通过前面的方法获取设备的最佳采样率、缓冲区,应用与 OpenSL ES 中,已实现设备上更短的延迟时间。
opengGL 的创建流程:
a. 创建对象(通过带有 create 的函数)
b. 初始化(通过 Realize 函数)
c. 获取接口来使用相关功能(通过 GetInterface 函数)
3.个别厂商提供的耳返接口: 有些手机厂商优化系统底层逻辑,针对 Android 系统的音频耳返功能优化出最理想的效果,如: 华为、vivo、oppo 会有厂商提供的专门的耳返 API 调用,这种方式实现的耳返效果延迟相对最优。
为了针对不同 Android 手机实现最优的延迟效果,融云采用厂商 + openSL ES + 系统 API 的方式联合实践。当手机支持厂商提供耳返 API 时,融云音视频 SDK 会优先使用厂商耳返功能,这样可以使这部分手机在耳返功能上表现出最好的效果。针对不支持耳返功能的手机设备,融云音视频 SDK 则采用 openSL ES 的方式实现耳返功能,使这部分手机可以通过 openSL ES 实现较好的耳返效果。由于 openSL ES 在复杂多样的 Android 系统设备上存在兼容问题,针对这种情况,融云音视频 SDK 会采用 Android 系统 API 提供耳返功能,以确保音视频 SDK 的稳定性。这样融云音视频 SDK 不仅能最大程度的降低 Android 设备的耳返延迟效果,而且可以最大限度的兼容不同的 Android 设备。