叙述网站的设计制作流程,律师网站 扁平化,网络服务器建设,wordpress wdcp文章目录 接口代理框架Proxy体系类结构导出接口 webrtc的实际运用PeerConnectionFactoyPeerConnection使用 接口代理框架
webrtc体系庞大#xff0c;模块化极好#xff0c;大多数模块都可以独立使用。模块提供接口#xff0c;外部代码通过接口来使用模块功能。 在webrtc中通… 文章目录 接口代理框架Proxy体系类结构导出接口 webrtc的实际运用PeerConnectionFactoyPeerConnection使用 接口代理框架
webrtc体系庞大模块化极好大多数模块都可以独立使用。模块提供接口外部代码通过接口来使用模块功能。 在webrtc中通过一种接口代理的方式来封装了对外的接口。下面是其接口架构图 业务应用通过一层proxy来使用webrtc通过功能也就是应用层与webrtc通过proxy隔离。
这种方式有如下好处
只输出必要的接口。灵活方便当需要将接口从WebRTC中导出时就通过Proxy导出。防止应用层污染WebRTC比如通过Proxy指定了需切换的线程这样就可以按应用层的线程切换到WebRTC内部线程。
Proxy体系类结构 在webrtc中需要导出的接口采用的是如上的类体系。 其中代理类是通过一系列宏生成自动生成一个类xxxProxyWithInternal其中最重要的方法就Create方法它将产生接口类的实例类供应用使用。 宏的定义在api/proxy文件中这里就不展开叙述了可以直接看看代码是怎么使用的。
导出接口
实现了一个自定义功能类Test通过Proxy的方式导出接口有如下几步
定义一个接口类TestInterface有功能接口func1和func2继承rtc::RefCountInterface。
class TestInterface:public rtc::RefCountInterface {
public:virtual void func1() 0;virtual void func2() 0;
}在WebRTC内部实现接口类。
class Test:public TestInterface {
public:void func1();void func2();
};通过宏定义代理类
BEGIN_PROXY_MAP(Test)PROXY_SIGNALING_THREAD_DESTRUCTOR()PROXY_METHOD0(void,func1)PROXY_WORKER_METHOD0(void,func2)
END_PROXY_MAP()这段宏将产生TestProxy类包括两个线程对象signal_thread_worker_thread_内部有一个实现了TestInterface的实例指针通过Proxy暴露的接口直接转调到这个实例对象。产生一个Create方法对外返回的TestInterface的实例。PROXY_METHOD0包装方法func1对func1的调用将放到signal_thread_线程上PROXY_WORKER_METHOD0包装func2方法对func2的调用将放到worker_thread_上。
关于RefCountInterface 看看这篇文章
webrtc的实际运用
PeerConnectionFactory和PeerConnection就是使用这套接口体系。
PeerConnectionFactoy (类图中我列出了类所在的文件名方便查看代码列出了几个核心的接口)
PeerConnectionFactoryInterface为接口类继承自rtc::RefCountInterface。PeerConnectionFactory为内部实现类。PeerConnectionFactoryProxy为对外的代理类由宏生成提供Create方法产生接口的实例。
应用层通过PeerConnectionFactoryProxy的Create方法获取PeerConnectionFactoryInterface的实例。
PeerConnection (类图中我列出了类所在的文件名方便查看代码它的接口太多这里就不列出了)
PeerConnectionInterface为接口类继承自rtc:RefCountInterface。PeerConnection为内部实现类。PeerConnectionProxy为对外的代理类由宏生成提供Create方法产生接口的实例。
应用层通过PeerConnectionProxy的Create方法获取PeerConnectionInterface的实例。
webrtc的接口类都在src/api中使用Proxy架构的还有MediaStreamInterfaceDataChannelInterface等。
使用
可以看看examples/conductor.h是怎么使用pc和pc factory。