WebRTC实现了跨平台(Windows,MacOS,Linux,IOS,Android)的线程类rtc::Thread,WebRTC内部的network_thread,worker_thread,signaling_thread均是该类的实例。该类的源码位于rtc_base目录下的thread.h与thread.cc中。
基础功能
rtc:: Thread及其相关类,ThreadManager、MessageQueue,Runnable等等一起提供了如下的基础功能:
- 线程的管理:通过ThreadManager单例对象,可以管理所有的Thread实例;
- 线程的常规基本功能:rtc:: Thread提供创建线程对象,设置线程名称,启动线程去执行用户代码;
- 消息循环,消息投递:rtc:: Thread通过继承MessageQueue类,提供了内部消息循环,并提供了线程间异步,同步投递消息的功能;
- 跨线程执行方法:提供了跨线程执行方法,并返回执行结果的功能。该功能非常强大,因为WebRTC在某些功能模块的使用上,有要求其必需在指定的线程中才能调用的基本要求,比如音频模块:ADM 的创建必须要在 WebRTC 的 worker thread 中进行;
- 多路分离器:通过持有SocketServer对象,实现了多路分离器的功能,能处理网络IO;
类的继承图
源码分析
后续将分别分析源码来阐述WebRTC通过上述几个类来实现上诉功能的。