WebRTC作为一个工具箱,相较于传统的视频会议有更好的安全性、良好的兼容性、增强网络的优势。但是WebRTC并不是一个完整的视频会议系统,它是一套内置在浏览器中的工具,经过我们对webrtc的不断研究,目前也实现了EasyGBS中webrtc的视频播放。
在我们的开发中,需要了解Webrtc的PC Factory拥有三个线程:
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 删除。