前言
WebRTC 作为一个实时音视频通信系统,包含了信令控制、音视频传输、音视频采集、音视频编码、音视频解码、音视频渲染等所有功能。由于其功能多样性,注定了系统结构的复杂性,再加上音视频需要做很多编码前后的处理,算法非常复杂,逻辑结构也复杂。为了在复杂网络环境下,保证音视频通信的流畅性,WebRTC 还做了很多流控、带宽预测、拥塞控制算法。
为此,为了降低系统的复杂性,提高系统的运行效率,WebRTC 设计了一套多线程框架,并且做了精心的设计。下来我们就分析一下 WebRTC 中的线程模型。
线程结构图
WebRTC 的线程模型相对复杂一些,哪些模块要在哪些线程下运行,都是有规定的。要想更好的理解 WebRTC 的实现,分析 WebRTC 的线程框架是必不可少的。线程框架结构图如下:
图中每一个矩形框都代表了一个线程,我们这里列出了 11 个线程,当然这些是最主要的线程。线程之间的通信要么是通过图中标出的 Packet 队列,要么是通过 WebRTC 的 MessageQueue 来实现的。图中蓝色的线和橘色的线分别标出了数据包输出和输入时,在各个线程流向情况。
图中标出的信令线程、工作线程、网络线程,WebRTC 是允许定制的。
下来,我们就详细说明一下每一个线程的功能&#