webrtc中的接口代理框架

文章目录

接口代理框架

webrtc体系庞大,模块化极好,大多数模块都可以独立使用。模块提供接口,外部代码通过接口来使用模块功能。

在webrtc中通过一种接口代理的方式,来封装了对外的接口。下面是其接口架构图:

业务应用通过一层proxy来使用webrtc通过功能,也就是应用层与webrtc通过proxy隔离。

这种方式有如下好处:

  • 只输出必要的接口。
  • 灵活方便,当需要将接口从WebRTC中导出时,就通过Proxy导出。
  • 防止应用层污染WebRTC,比如通过Proxy指定了需切换的线程,这样就可以按应用层的线程切换到WebRTC内部线程。

Proxy体系类结构

在webrtc中需要导出的接口,采用的是如上的类体系。

其中代理类是通过一系列宏生成,自动生成一个类xxxProxyWithInternal,其中最重要的方法就Create方法,它将产生接口类的实例类,供应用使用。

宏的定义在api/proxy文件中,这里就不展开叙述了,可以直接看看代码,是怎么使用的。

导出接口

实现了一个自定义功能类Test,通过Proxy的方式导出接口,有如下几步:

  1. 定义一个接口类TestInterface,有功能接口func1func2,继承rtc::RefCountInterface
cpp 复制代码
class TestInterface:public rtc::RefCountInterface {
public:
    virtual void func1() = 0;
    virtual void func2() = 0;
}
  1. 在WebRTC内部实现接口类。
cpp 复制代码
class Test:public TestInterface {
public:
	void func1();
    void func2();
};
  1. 通过宏定义代理类
cpp 复制代码
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的实际运用

PeerConnectionFactoryPeerConnection就是使用这套接口体系。

PeerConnectionFactoy

(类图中我列出了类所在的文件名,方便查看代码,列出了几个核心的接口)

  • PeerConnectionFactoryInterface为接口类,继承自rtc::RefCountInterface
  • PeerConnectionFactory为内部实现类。
  • PeerConnectionFactoryProxy为对外的代理类,由宏生成,提供Create方法产生接口的实例。

应用层通过PeerConnectionFactoryProxyCreate方法获取PeerConnectionFactoryInterface的实例。

PeerConnection

(类图中我列出了类所在的文件名,方便查看代码,它的接口太多,这里就不列出了)

  • PeerConnectionInterface为接口类,继承自rtc:RefCountInterface
  • PeerConnection为内部实现类。
  • PeerConnectionProxy为对外的代理类,由宏生成,提供Create方法产生接口的实例。

应用层通过PeerConnectionProxyCreate方法获取PeerConnectionInterface的实例。

webrtc的接口类都在src/api中,使用Proxy架构的还有MediaStreamInterfaceDataChannelInterface等。

使用

可以看看examples/conductor.h是怎么使用pc和pc factory。

相关推荐
web前端进阶者4 小时前
webRTC指定设备加自定义用户头像
音视频·webrtc
kkk_皮蛋7 小时前
WebRTC 视频编码基础 (VP8/VP9/H.264/AV1)
音视频·webrtc·vp8
Smile_25422041819 小时前
vlc的使用
网络·webrtc·实时音视频
kkk_皮蛋2 天前
带宽估计 BWE (WebRTC 的智能网络优化核心)
网络·webrtc
txp玩Linux3 天前
rk3568上webrtc处理稳态噪声实践
算法·webrtc
好游科技6 天前
IM即时通讯系统:安全可控、功能全面的社交解决方案全解析
安全·音视频·webrtc·im即时通讯·私有化部署im即时通讯·社交app
JellyDDD6 天前
【悬赏】Android WebRTC 数字人项目回声问题排查(AEC / AudioMode)
音视频·webrtc
好游科技7 天前
语聊APP新生态!一站式语聊房语音直播APP源码开发搭建
音视频·webrtc·im即时通讯·社交软件·社交语音视频软件
刘孬孬沉迷学习7 天前
WebRTC 协议
学习·5g·webrtc·信息与通信·信号处理
XHW___0017 天前
鸿蒙webrtc编译
华为·webrtc·harmonyos