github:https://github.com/bigonelby/webrtcUml/tree/master/latest
这个图展示了webrtc中最基本的架子
webrtc中有很多Channel,最顶层的Channel,实际上就是BaseChannel,其派生类可以是VoiceChannel,VideoChannel或者DataChannel
这些BaseChannel都有一个共同的特点,就是每个都有MediaChannel,我们称之为媒体通道
那么谁来管理这些Channel呢?自然是ChannelManager。ChannelManager会创建MediaChannel,并创建BaseChannel,将MediaChannel挂在相应的BaseChannel上
ChannelManager是怎样创建MediaChannel的呢?实际上是通过其成员media_engine_创建的。这个media_engine_就是MediaEngineInterface,也就是媒体引擎接口,这个接口的最终目的就是创建MediaChannel。可见MediaChannel是由MediaEngine创建的
实现MediaEngineInterface的,是CompositeMediaEngine,从命名就可以知道,这是一个组合的MediaEngine,是由VideoEngineInterface和VoiceEngineInterface构成的。实现VideoEngineInterface的,是WebrtcVideoEngine
对于MediaChannel而言,其实现类是VideoMediaChannel,最终的实现类是WebrtcVideoChannel
梳理一下,就是MediaEngine创建MediaChannel,对于video而言,就是WebrtcVideoEngine创建WebrtcVideoChannel。BaseChannel有MediaChannel,BaseChannel是由ChannelManager创建的
架子已经搭好了,我们看看数据流。首先是BaseChannel实现了RtpPacketSinkInterface接口,因此Rtp数据,会通过接口的OnRtpPacket流入到BaseChannel中,BaseChannel再将数据送给MediaChannel,因此最终数据到达了WebrtcVideoChannel的OnPacketReceived方法中
后面的类图中再具体看看packet数据如何从WebrtcVideoChannel中继续传送到底层