1 综述
了解过WebRTC源码的人,一定听说过三大线程(network_thread
,worker_thread
,signaling_thread
),这三大线程基本贯穿的WebRTC的三大模块(音频,视频,网络,平台采集渲染),在数据流转和消息传递中有着很关键的作用;WebRTC由于其功能多样性,注定了系统结构的复杂性,再加上音视频需要做很多编码前后的处理以及各个平台渲染采集的差异性,算法非常复杂,从而导致其逻辑结构也复杂,且由于WebRTC是支持多平台性,各个平台底层线程管理有着很大的差异性;
为了降低系统的复杂性,提高系统的运行效率,降低跨平台开发的难度,WebRTC 设计了一套多线程框架,并且做了精心的设计。WebRTC实现了跨平台(Windows,MacOS,Linux,IOS,Android)的线程类rtc::Thread,WebRTC内部的network_thread,worker_thread,signaling_thread均是该类的实例。
理解WebRTC的关键之一,就必须的了解WebRTC的线程。
2 基础功能
2.1 线程的管理及功能
- 通过ThreadManager单例对象,可以管理所有的Thread实例;
- rtc::Thread 提供了基础的线程创建对象,线程名称设置,及线程启停功能;
- rtc::Thread继承了MessageQueue类