美文网首页
WebRTC之Module

WebRTC之Module

作者: stoneliuxs | 来源:发表于2019-02-20 20:04 被阅读0次

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) {}

  • TimeUntilNextProcess

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

  • Process

任务执行函数

  • ProcessThreadAttached

绑定或者解绑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;

  • 调用Start创建一个新的线程,并启动线程执行定时任务

  • 调用Stop停止线程,并销毁线程

  • 通过RegisterModule接口注册需要定时执行的模块,ProcessThread把模块加入到模块列表中(modules_),并调用ProcessThreadAttached注册此线程到新加入模块

  • 通过,DeRegisterModule接口移除不再需要定时执行的模块,ProcessThread把模块从模块列表中移除,并调用ProcessThreadAttached取消注册此线程到移除模块

  • 线程启动以后会循环执行ProcessThreadImpl::Process,它会从模块列表中找到当前需要执行的模块,并找出最近一次需要执行的最小时间,把这个时间给定时器

  • 如果某个模块需要立马被执行可以调用WakeUp函数,它会中断定时器,马上执行指定模块

相关文章

网友评论

      本文标题:WebRTC之Module

      本文链接:https://www.haomeiwen.com/subject/emkkyqtx.html