WebRTC 源码阅读 3——音频类(1)
上一章已知,所有的配置信息汇总到了ConnectionContext中,里面的ChannelManager则是音、视处理的具体类,其类的结构如下:
本小节以音频为例,探究MediaEngineInterface。
MediaEngineInterface
// MediaEngineInterface is an abstraction of a media engine which can be
// subclassed to support different media componentry backends.
// It supports voice and video operations in the same class to facilitate
// proper synchronization between both media types.
官方注释解释得非常清晰,它用于管理音、视频引擎,及管理它们的播放设备,为了实现跨平台,将二者抽象为接口VoiceEngineInterface
和VideoEngineInterface
。 CompositeMediaEngine
继承自MediaEngineInterface
,当中有两个unique_ptr
分别指向voice_engine
和video_engine
。由于本人即将开发音频相关的工作,所以阅读了VideoEngineInterface及
其具体实现。
VideoEngineInterface
VideoEngineInterface
是一个接口,具体的实现为WebRtcVoiceEngine
,它拥有下述属性,而本小节在后面讨论AudioDeviceMoudle
其余的部分会在下面的章节中继续展开。
rtc::scoped_refptr<webrtc::AudioDeviceModule> adm_;
rtc::scoped_refptr<webrtc::AudioEncoderFactory> encoder_factory_;
rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory_;
rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer_;
AudioDeviceModule
图中展现了AudioDeviceModule在不同平台上的具体实现方式,最终的实现落在了AudioDeviceModuleImpl
上,当中有AudioDeivceGeneric
基类(一个典型的策略模式,用于实现跨平台音频设备的播放)和一个AudioDeviceBuffer
。