前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webrtc之peerconnection_client详解(一)

webrtc之peerconnection_client详解(一)

作者头像
用户4148957
发布2022-06-14 09:01:26
9170
发布2022-06-14 09:01:26
举报
文章被收录于专栏:C/C++与音视频

前面我们跑了webrtc的peerconnection_client的demo,体验了webrtc的视频通话效果,本文从代码框架上梳理该demo的结构,为后面深入学习webrtc协议做好准备。

一、代码结构      从文件结构上:该demo分为:main.cc,main_wnd.cc.,conductor.cc,peer_connection_client.cc四个文件。其中:      main.cc: 进程入口,负责网络,窗口,ssl等初始化相关工作,消息循环。      main_wnd:windows窗口事件处理,视频和图形渲染等。      Peer_connection_clinent:负责与信令服务器,peer客户端进行交互等      conductor.cc:是一个控制模块,负责与main_wnd和Peer_connection_client交互。同时继承多个xxx_Observer,会产生很多底层回调事件,通知main_wnd和Peer_connection_client刷新某个动作。

二、设计模式 在这里其实用到一个设计模式,即观察者模式。 Conductor 继承:public webrtc::PeerConnectionObserver,public webrtc::CreateSessionDescriptionObserver, public PeerConnectionClientObserver, xxx_Observer本身就是一个观察者,当观察的目标发生变化时,就会通知xxx_Observer产生一个事件回调。而Conductor继承xxx_Observer,所以Conductor也是一个观察者身份。因此Conductor会存在很多On_XXXX相关的实际回调。同时conductor和main_wnd,Peer_connection_client 也时一个观察者模式。Conductor 监听到事件,会通知main_wnd Peer_connection_client进行相关界面更新或者与peer的进一步交互,在这个模式中,Conductor是目标,main_wnd和Peer_connection_client是观察者角色,同时这里还有一个妙用,观察者通过回调,也能调用目标者的相关API。

 conductor和main_wnd,Peer_connection_client三者关系

登录流程入口函数:OnMessage----.>OnDefaultAction ---->StartLogin

通话连接入口函数:OnMessage-----> OnDefaultAction --->ConnectToPeer

视频渲染流程函数:OnFrame----->InvalidateRect--->OnPaint----使用GDI渲染

这里抛出一个疑问?音频渲染是怎么实现的?为啥demo没有找到音频渲染的回调,对音频PCM数据进行相关处理呢?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

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