前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >TSINGSEE青犀视频开发Webrtc的PC Factory三个线程介绍说明

TSINGSEE青犀视频开发Webrtc的PC Factory三个线程介绍说明

原创
作者头像
TSINGSEE青犀视频
修改2021-07-08 18:09:20
修改2021-07-08 18:09:20
9360
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频

WebRTC作为一个工具箱,相较于传统的视频会议有更好的安全性、良好的兼容性、增强网络的优势。但是WebRTC并不是一个完整的视频会议系统,它是一套内置在浏览器中的工具,经过我们对webrtc的不断研究,目前也实现了EasyGBS中webrtc的视频播放。

在我们的开发中,需要了解Webrtc的PC Factory拥有三个线程:

  • Signaling_thread_: 这个是所有PC Factory和PC的对外接口,执行都会切换到signaling_thread_,而PC Observer所有的回调函数也都会在signaling_thread_执行。
  • Network_thread_:这个线程主要是和网络相关的操作,都会在network_thread_执行,比如收到和发送音视频、文字数据包;绑定网络端口号等。
  • Worker_thread_:这个是和网络无关的可能耗时的操作,都会在worker_thread_执行。

webrtc主要是怎么使用这三大线程的,其实线程的使用主要还是在线程上执行代码和线程间的切换。

对于Windows/Linux创建PC Factory调用的是webrtc::CreatePeerConnectionFactory,对于它的实现代码在api/create_peerconnection_factory.cc中。调用代码如下:

peerConnectionFactory = webrtc::CreatePeerConnectionFactory(

Nullptr/*network_thread_*/, nullptr/*worker_thread_*/, nullptr/*signaling_thread_*/, nullptr, webrtc::CreateBuiltinAudioEncoderFactory(), webrtc::CreateBuiltinAudioDecoderFactory(),

webrtc::CreateBuiltinVideoEncoderFactory(),

webrtc::CreateBuiltinVideoDecoderFactory(),

nullptr, nullptr

);

因此是由PC Factory的构造函数创建、启动network_thread_he worker_thread_,并把调用webrtc::CreatePeerConnectionFactory的线程包装为signaling_thread_。此线程要么是主线程,要么是websocket线程。

分析webrtc::CreatePeerConnectionFactory创建的线程的要点包括以下5点:

A、首先创建实现类对象,即创建PeerConnectionFactory函数

B、接着再调用PeerConnectionFactoryProxy::Create创建代理对象

C、如果PC Factory的第一个参数为nullptr时,即调用的方法没有提供network_thread_参数,webrtc会自动调用rtc::Thread::CreateWithSocketServer()创建并启动网络线程

D、如果PC Factory的第二个参数也没有提供(worker_thread_),就会调用rtc::Thread::Create()来创建并启动耗时相关线程

E、如果PC Factory的第三个参数没有提供,因为signaling_thread_比较特殊,没有提供时,那么webrtc是不会创建新的线程,而是把当前的线程进行包装一下作为signaling_thread_来用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档