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。

相关推荐
Amarantine、沐风倩✨10 小时前
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
java·物联网·音视频·webrtc·html5·视频编解码·七牛云存储
mo477615 小时前
Webrtc音频模块(四) 音频采集
音视频·webrtc
红米饭配南瓜汤19 小时前
WebRTC服务质量(09)- Pacer机制(01) 流程概述
网络·音视频·webrtc
玩电脑的辣条哥3 天前
aioice里面candidate固定UDP端口测试
python·网络协议·udp·webrtc
玩电脑的辣条哥4 天前
本地部署webrtc应用怎么把http协议改成https协议?
http·https·webrtc
m0_748235614 天前
WebRTC搭建与应用(一)-ICE服务搭建
webrtc
m0_748230944 天前
websocket 局域网 webrtc 一对一 多对多 视频通话 的示例
websocket·音视频·webrtc
dualven_in_csdn5 天前
【zlm】 webrtc源码讲解三(总结)
webrtc
web147862107235 天前
【WebRTC】视频发送链路中类的简单分析(上)
websocket·音视频·webrtc
红米饭配南瓜汤7 天前
WebRTC服务质量(05)- 重传机制(02) NACK判断丢包
网络·音视频·webrtc