webrtc音频模块(五) AudioState和AudioDeviceBuffer
AudioState
和AudioDeviceBuffer
是音频处理模块的两个功能类。两者没有直接的关系,只是放在这里一起总结。
AudioState
它是WebRtVoiceEngine
的大管家,如下图所示类的关系:
如下类图:
它的作用:
- 外面访问Engine中
AudioDeviceModule
,AudioProcessing
,AudioMixer
都是通过AudioState
接口。 - 各个Call中的Stream对象会被映射到
AudioState
对象中,进而更新AudioTransportImpl
的状态。
AudioDeviceBuffer
它有两个作用:
AudioDeviceBuffer
是ADM和Audio Core API间的数据缓存区。
ADM播放和采集的数据,总会通过 AudioDeviceBuffer
拿进来或者送出去 10 ms 的音频数据。对于不支持采集和播放 10 ms 音频数据的平台,在平台的AudioDeviceModule 和 AudioDeviceBuffer 还会插入一个 FineAudioBuffer(比如IOS),用于将平台的音频数据格式转换为 10 ms 的 WebRTC 能处理的音频帧。
- 记录音频设备的工作情况,每10s打印一次,记录的值有播放的sample数,最大音量等信息,可用于检测当前硬件的工作状态。
[037:814][152844] (audio_device_buffer.cc:440): [PLAY: 10000msec, 48kHz] callbacks: 1000, samples: 480000, rate: 48000, rate diff: 0%, level: 705
[047:815][152844] (audio_device_buffer.cc:440): [PLAY: 10001msec, 48kHz] callbacks: 1001, samples: 480480, rate: 48043, rate diff: 0%, level: 1076
如下类图,
音频引擎数据流转
从下面这个图中可以看到AudioState
及AudioDeviceBuffer
的角色。