🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 集成到vs参考:[https://juejin.im/post/6844904049821630478](https://juejin.im/post/6844904049821630478) ## p2p连接流程 按照下图的流程走 ## 各个文件类及作用 ## 入口文件 main.cc ## main_wnd.cc class MainWndCallback {} 视图观察回调基类, 在MainWnd中注册 ``` void MainWnd::RegisterObserver(MainWndCallback* callback) { callback_ = callback; } ``` class MainWindow{} 主界面接口。为了跨平台界面设计 class MainWnd : public MainWindow {} 主界面类,继承MainWindow类 ## peer_connection_client.cc struct PeerConnectionClientObserver {} p2p连接回调基类 class PeerConnectionClient: public sigslot::has_slots<>, public rtc::MessageHandler {} 连接客户端类,主要用来信令收发,消息传递。 注册于: ## conductor.cc 重要类 ``` class Conductor : public webrtc::PeerConnectionObserver, public webrtc::CreateSessionDescriptionObserver, public PeerConnectionClientObserver, public MainWndCallback {} ``` webrtc::PeerConnectionObserver: 视频轨和candidate 回调 PeerConnectionClientObserver 继承PeerConnectionClientObserver 用于连接回调 传递信令 注册于: ``` class PeerConnectionClient : public sigslot::has_slots<>, public rtc::MessageHandler{ void RegisterObserver(PeerConnectionClientObserver* callback); } ``` webrtc::CreateSessionDescriptionObserver: 会话信息描述回调 注册于: ``` Conductor::Conductor(PeerConnectionClient* client, MainWindow* main_wnd) : peer_id_(-1), loopback_(false), client_(client), main_wnd_(main_wnd) { client_->RegisterObserver(this); main_wnd->RegisterObserver(this); } ``` 本地描述信息 ``` class DummySetSessionDescriptionObserver : public webrtc::SetSessionDescriptionObserver {} ``` class CapturerTrackSource : public webrtc::VideoTrackSource {} 视频数据源 ## 转化为cmake多平台构建 vs2017构建 [https://www.cnblogs.com/zwb800/p/10775594.html](https://www.cnblogs.com/zwb800/p/10775594.html) ## error C2011: “sockaddr”:“struct”类型重定义 ``` 在#include<windows.h>之前 #include <winsock2.h> 问题就可以解决 ``` 如果还存在这样的问题则加上宏定义 add_definitions(-DWIN32_LEAN_AND_MEAN)