WebRTC之Module

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函数,它会中断定时器,马上执行指定模块

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,709评论 1 32
  • java 接口的意义-百度 规范、扩展、回调 抽象类的意义-乐视 为其子类提供一个公共的类型封装子类中得重复内容定...
    交流电1582阅读 2,390评论 0 11
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,370评论 0 10
  • 梦想这个词太过绚丽,未必人人能够拥有,因而实现梦想是多么奢侈的事情。所以,“梦想”在这里只能用“我的理想生活”替代...
    南方_天津阅读 489评论 2 1
  • 今天监考很有趣,第一个同学的小抄放在文具盒里,按她的说法是之前复习用的,忘记拿出来了,我真想问问她,复习都...
    豆子_be63阅读 711评论 10 3

友情链接更多精彩内容