WebRTC 学习笔记(5)--线程模型

WebRTC 学习笔记(5)--线程模型

1, 基本线程

webretc中主要有两个线程:

signaling_thread-->处理小工作量方法。要求此线程内的方法都必须快速返回。

worker_thread-->处理大工作量的方法。此线程内的方法可能会处理很长时间,如网络消息等。


2, 线程实现

webrtc中的线程包含了一个消息队列。当需要在此线程中运行逻辑时,仅需要向线程对象发送一个消息即可。其中消息包含消息的处理类。


thread主要方法:

virtual void Post(MessageHandler *phandler, uint32 id = 0,  MessageData *pdata = NULL, bool time_sensitive = false);

发送一个异步请求,调用会立即返回。


virtual void PostDelayed(int cmsDelay, MessageHandler *phandler, uint32 id = 0, MessageData *pdata = NULL);

发送一个异步请求,调用会立即返回,但是此请求会在cmsDelay后被处理。相当于集成了个计时器。


virtual void Send(MessageHandler *phandler, uint32 id = 0,  MessageData *pdata = NULL);
发送一个同步请求,消息处理完成后调用才会返回。


3, 线程调用实现

3.1 发送一个消息。

thread->send() 

thread->post()

3.2 调用Invoke

worker_thread_->Invoke<bool>(Bind(&MediaEngineInterface::SetOutputVolume, media_engine_, level));

以上调用表示在worker_thread_内同步调用media_engine_类的MediaEngineInterface::SetOutputVolume方法,方法有一个参数是level


3.3 用proxy宏

如下用PROXY宏定义对应类的proxy类,此proxy类的所有方法都会在woker_thread_线程内调用

BEGIN_PROXY_MAP(PeerConnection)
  PROXY_METHOD0(talk_base::scoped_refptr<StreamCollectionInterface>,
                local_streams)
  PROXY_METHOD0(talk_base::scoped_refptr<StreamCollectionInterface>,
                remote_streams)
  PROXY_METHOD2(bool, AddStream, MediaStreamInterface*,
                const MediaConstraintsInterface*)
  PROXY_METHOD1(void, RemoveStream, MediaStreamInterface*)
  PROXY_METHOD1(talk_base::scoped_refptr<DtmfSenderInterface>,
                CreateDtmfSender, AudioTrackInterface*)
  PROXY_METHOD2(bool, GetStats, StatsObserver*, MediaStreamTrackInterface*)
  PROXY_METHOD2(talk_base::scoped_refptr<DataChannelInterface>,
                CreateDataChannel, const std::string&, const DataChannelInit*)
  PROXY_CONSTMETHOD0(const SessionDescriptionInterface*, local_description)
  PROXY_CONSTMETHOD0(const SessionDescriptionInterface*, remote_description)
  PROXY_METHOD2(void, CreateOffer, CreateSessionDescriptionObserver*,
                const MediaConstraintsInterface*)
  PROXY_METHOD2(void, CreateAnswer, CreateSessionDescriptionObserver*,
                const MediaConstraintsInterface*)
  PROXY_METHOD2(void, SetLocalDescription, SetSessionDescriptionObserver*,
                SessionDescriptionInterface*)
  PROXY_METHOD2(void, SetRemoteDescription, SetSessionDescriptionObserver*,
                SessionDescriptionInterface*)
  PROXY_METHOD2(bool, UpdateIce, const IceServers&,
                const MediaConstraintsInterface*)
  PROXY_METHOD1(bool, AddIceCandidate, const IceCandidateInterface*)
  PROXY_METHOD0(SignalingState, signaling_state)
  PROXY_METHOD0(IceState, ice_state)
  PROXY_METHOD0(IceConnectionState, ice_connection_state)
  PROXY_METHOD0(IceGatheringState, ice_gathering_state)
  PROXY_METHOD0(void, Close)
END_PROXY()

PeerConnectionProxy(woker_thread_, peer_connection);


原文地址:http://blog.csdn.net/oupeng1991/article/details/28619835

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值