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。

相关推荐
EasyCVR3 天前
多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系
大数据·网络·人工智能·音视频·webrtc
安步当歌7 天前
【WebRTC】视频发送链路中类的简单分析(上)
音视频·webrtc·视频编解码·video-codec
MetaverseMan7 天前
WebRTC 和 WebSocket
websocket·网络协议·webrtc
Mao.O7 天前
WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
音视频·webrtc
红米饭配南瓜汤9 天前
WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
音视频·webrtc·媒体
红米饭配南瓜汤9 天前
WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇
音视频·webrtc·媒体
安步当歌9 天前
【WebRTC】视频发送链路中类的简单分析(下)
网络·音视频·webrtc·视频编解码·video-codec
从后端到QT9 天前
WebRTC API分析
webrtc
红米饭配南瓜汤10 天前
WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇
音视频·webrtc·媒体
红米饭配南瓜汤10 天前
WebRTC视频 02 - 视频采集类 VideoCaptureModule
音视频·webrtc·媒体