Channel与Streamimage.png

Session层:
一个Stream,包含videotrack和audiotrack。
没有方向,意思是没有分发送流和接收流

MediaEngine层:
里面的流是带方向的,分发送流和接收流
WebrtcAudioSendStream音频发送流
WebrtcAudioReceiveStream音频接收流
里面的一个WebrtcVoiceMediaChannel对应Session层的一个track。

Call层:
MediaEngine层的一个WebrtcAudioSendStream对应Call层的AudioSendStream,AudioSendStream包含ChannelSend;
MediaEngine层的一个WebrtcAudioReceiveStream对应Call层的AudioReceiveStream,AudioReceiveStream包含ChannelReceive。

ChannelSend是连接编码层的,ChannelReceive是连接解码层的。
ChannelSend收到AudioSendStream的数据后就会切换到编码线程,到下面的ACM模块。
视频的也类似。

ChannelSend与音频编码器

image.png

流程是这样子走的
image.png

ChannelReceive与音频解码器

image.png

渲染播放层线路

image.png

1是扬声器获取数据播放流程,2是获取到数据后返回到ChannelReceive。
大概会每10ms从Mixer获取数据,Mixer又是从ChannelReceive获取数据。
无论多少路流,都会经过Mixer混流。

网络接收线路

image.png
1、RtpTransport接收到加密数据后,会经过SrtpTransport解密,然后再经过RtpDemuxer来处理。

2、每个RtpTransport和RtpStreamReceiverController都有自己的RtpDemuxer。

3、RtpDemuxer后的数据查找添加的ChannelReceive来处理。

4、RtpStreamReceiverController创建的时候,创建AudioReceiveStream,AudioReceiveStream调用Create方法来创建ChannelReceive。
RtpStreamReceiverController调用Create方法来创建Receiver,Receiver将AudioReceiveStream创建的ChannelReceive添加到RtpDemuxer中。