WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑:

cpp 复制代码
while(true)
{
	...
	Get(&msg, ...);
	...
	Dispatch(&msg);
	...
}

Dispatch(Message *pmsg) {
	...
	pmsg->handler->OnMessage(pmsg);
	...
}

在执行函数内部,就是一个while死循环,只做两件事,从队列里Get取出消息,然后调用Dispatch处理消息。

在Dispatch函数中会调用入参*pmsg消息的handler的OnMessage处理消息,

具体如何处理消息,每一个pmsg内部有不同的逻辑,

就是把控制权交给的发送线程,发送线程在执行时它是知道需要做什么事的,但是这个事情需要交给其他的线程来做,

但是执行线程是不知道发送线程要执行怎样的逻辑,那么最好的方法就是发送线程将执行的逻辑写好,执行线程只要按照发送线程的要求去执行任务就OK了。

【编程思想】

因此,要弄明白正在处理的业务逻辑,必须要从发送线程着手,而不是工作线程,因为工作线程并不清楚它在做什么。

WebRTC中的具体代码实现:

cpp 复制代码
// src/rtc_base/thread.cc
Thread::Start() {
	pthread_ = pthread_create(PreRun);
}

Thread::PreRun() {
	Thread *thread = static_cast<>();
	ThreadManager::Instance()->SetCurrentThread(thread); // 将本线程设置到ThreadManager中,与Thread对象进行绑定,这也说明绑定的时机是在pthread创建成功之后
	thread->Run();
}

Thread::Run() {
	ProcessMessages(kForever);
}

Thread::ProcessMessages() {
	while(true) {
		Get(&msg);
		Dispatch(&msg);
	}
}

Thread::Dispatch(Message *pmsg) {
	pmsg->handler->OnMessage(pmsg);
}
相关推荐
RTC老炮19 小时前
webrtc降噪-SpeechProbabilityEstimator类源码分析与算法原理
算法·webrtc
赖small强1 天前
【ZeroRange WebRTC】Amazon Kinesis音视频传输通路详细分析:ICE完成后的数据传输流程
webrtc·ice·dtls·音视频传输·srtp
赖small强2 天前
【ZeroRange WebRTC】DTLS(Datagram Transport Layer Security)技术深度分析
webrtc·重放攻击·dtls·dtls-srtp·防dos攻击机制
metaRTC2 天前
webRTC IPC客户端React Native版编程指南
react native·react.js·ios·webrtc·p2p·ipc
赖small强2 天前
【ZeroRange WebRTC】Amazon Kinesis Video Streams ICE协议Candidate协商机制深度分析
webrtc·nat·ice·candidate·candidatepair·stun绑定请求
赖small强3 天前
【ZeroRange WebRTC】REMB(Receiver Estimated Maximum Bitrate)技术深度分析
webrtc·remb·时间窗口控制·丢包率·抖动和延迟
星野云联AIoT技术洞察4 天前
RTSP 与 WebRTC 对比:AI 物联网视频识别的最佳协议选择
webrtc·rtsp·实时传输·ai视频分析·iot视频流·iot集成·视频协议
llc的足迹4 天前
python构建webRTC服务器,coturn搭建中继服务器
服务器·python·webrtc·turn
赖small强5 天前
【ZeroRange WebRTC】NACK(Negative Acknowledgment)技术深度分析
webrtc·nack·rtcp·丢包检测·主动请求重传
赖small强5 天前
【ZeroRange WebRTC】WebRTC拥塞控制技术深度分析
webrtc·gcc·拥塞控制·twcc·remb·带宽估计