WebRTC之Module

2019-02-20  本文已影响0人  stoneliuxs

WebRTC中存在一些需要定时且重复的任务,所以就抽象出了Module这个任务类和ProcessThread这个定时执行任务的线程封装类。

用到定时任务的模块有(不完全列举)


NackModule 视频nack处理模块

Pacer 平滑发送模块

RtpRtcp rtprtcp模块

BitrateController 码率控制模块

VideoSender 视频发送模块

VideoReceiver 视频接收模块

VideoCodingModule 视频编解码模块

Module

Module类抽象了三个接口


virtual int64_t TimeUntilNextProcess() = 0;

virtual void Process() = 0;

virtual void ProcessThreadAttached(ProcessThread* process_thread) {}

返回下一次执行Process函数的时间,单位是毫秒

任务执行函数

绑定或者解绑ProcessThread到当前模块。实际上只有平滑发送模块(PacedSender)才使用到这个接口,PacedSender暂停和恢复的时候会调用ProcessThread的WakeUp接口激活PacedSender模块

ProcessThread

ProcessThread提供的接口就是下面这几个。它的实现主要依赖两个类PlatformThread(线程)和EventWrapper(定时器)


static std::unique_ptr<ProcessThread> Create(const char* thread_name);

virtual void Start() = 0;

virtual void Stop() = 0;

virtual void WakeUp(Module* module) = 0;

virtual void PostTask(std::unique_ptr<rtc::QueuedTask> task) = 0;

virtual void RegisterModule(Module* module, const rtc::Location& from) = 0;

virtual void DeRegisterModule(Module* module) = 0;

上一篇 下一篇

猜你喜欢

热点阅读