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。

相关推荐
SendTomo1 天前
P2P文件传输工具对比:SendTomo vs send.wang
javascript·网络协议·webrtc·html5·p2p
SendTomo1 天前
WebRTC文件互传工具实测对比
javascript·网络·webrtc·html5·p2p
SendTomo1 天前
send.wang自托管+WSS保障信令安全方案
网络·网络协议·webrtc·html5·p2p
SendTomo2 天前
跨设备文件互传新方案
javascript·网络·webrtc·html5·p2p
红尘散仙4 天前
浏览器不能监听端口、没有文件系统,凭什么能点对点传文件?
rust·webrtc·webassembly
福大大架构师每日一题5 天前
mediamtx v1.19.3正式发布:认证安全、WebRTC跨域、MoQ稳定性、RTSP与HLS全面升级
安全·ffmpeg·webrtc
hellojackjiang20115 天前
移动端实时音视频聊天框架 RainbowAV v2.2.7发布
webrtc·实时音视频·即时通讯
淡淡的香烟5 天前
Android中WebRTC通信使用
android·webrtc
SendTomo7 天前
send.wang私传网:P2P直连传大文件首选工具
javascript·网络·网络协议·webrtc·p2p
桑榆4168 天前
WebRTC 本地视频文件推流 Demo 搭建指南 (Ubuntu 24.04)
linux·ubuntu·webrtc