webrtc中的接口代理框架

文章目录

      • 接口代理框架
      • Proxy体系类结构
        • 导出接口
      • webrtc的实际运用
        • PeerConnectionFactoy
        • PeerConnection
        • 使用

接口代理框架

webrtc体系庞大,模块化极好,大多数模块都可以独立使用。模块提供接口,外部代码通过接口来使用模块功能。
在webrtc中通过一种接口代理的方式,来封装了对外的接口。下面是其接口架构图:

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

这种方式有如下好处:

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

Proxy体系类结构

Proxy架构.jpg
在webrtc中需要导出的接口,采用的是如上的类体系。
其中代理类是通过一系列宏生成,自动生成一个类xxxProxyWithInternal,其中最重要的方法就Create方法,它将产生接口类的实例类,供应用使用。
宏的定义在api/proxy文件中,这里就不展开叙述了,可以直接看看代码,是怎么使用的。

导出接口

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

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

PeerConnectionInterface类.jpg

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

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

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

PeerConnection

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

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

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

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

使用

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/285406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向对象基础-析构函数-this-static-const

析构函数 析构函数是与构造函数对立的函数。 构造函数 析构函数 创建对象时手动调用 当对象销毁时,自动调用 函数名称与类名相同 函数名称是~类名 构造函数可以重载 析构函数没有参数,不能重载 用于创建对象时并初始化 用于销毁对象时释放资源 …

webRTC实时通信demo

参考文档: https://www.jianshu.com/p/f439ce5cc0be https://www.w3cschool.cn/socket demo流程示意图(用户A向用户B推送视频): #mermaid-svg-0KZaDQ5DBl28zjmZ {font-family:"trebuchet ms",verdana,arial,sans-seri…

影视后期:PR 调色处理,灰片还原,校色偏色素材

灰片还原 确定拍摄灰片的相机型号品牌官网下载专用log文件LUT-浏览-导入slog3分析亮部波形-增加画面对比分析矢量示波器-提高整体饱和 校正LUT可以将前期拍摄的log色彩模式的视频转换为成709色彩模式,即将灰度视频转换为正常效果(灰片还原) 各个相机有对应的校正L…

链路层、网络层、传输层、应用层长度

参考:链路层、网络层、传输层、应用层长度 链接:https://blog.csdn.net/qq_41658597/article/details/120683870 目录 1、概述2、TCP、UDP数据包最大值的确定3、TCP、UDP数据包最小值的确定4、实际应用IP层 1、概述 首先要看TCP/IP协议,涉及到…

PyTorch中常用的工具(4)Visdom

文章目录 前言3.2 Visdom 前言 在训练神经网络的过程中需要用到很多的工具,最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块,合理使用这些工具可以极大地提高编程效率。 由于内容较多,本文分成了五篇文…

李宏毅机器学习第二十三周周报 Flow-based model

文章目录 week 23 Flow-based model摘要Abstract一、李宏毅机器学习1.引言2.数学背景2.1Jacobian2.2Determinant2.3Change of Variable Theorem 3.Flow-based Model4.GLOW 二、文献阅读1. 题目2. abstract3. 网络架构3.1 change of variable formula3.2 Coupling layers3.3Prop…

http——https实现指南

第一部分:HTTPS安全证书简介 什么是HTTPS安全证书? 在网络通信中,HTTPS安全证书是一种由可信任的证书颁发机构(CA)签发的数字证书,用于保障网站与用户之间的数据传输安全。通过加密和身份验证&#xff0c…

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…

idea中java maven程序打JAR包的方式

JAR包是一种文件格式,用于将Java类、资源和元数据打包到一个文件中。它通常用于将Java库、应用程序或模块分发给其他开发人员或部署到不同的环境中。JAR包可以包含许多不同类型的文件,包括.class文件(编译后的Java类)、.java文件&…

oracle-SCN系统改变号

SCN system change number 我们看到的SCN是一串数字,由时间经过函数算出的,其实就是时间。但时间的比较复杂,不如转换成数字比较。 给一个日志加scn号,其实就是给日志加上时间点。 2常见的SCN 对于scn的理解 控制文件中有两个sc…

TDD-LTE TAU流程

目录 1. TAU成功流程 1.1 空闲态TAU 1.2 连接态TAU 2. TAU失败流程 当UE进入一个小区,该小区所属TAI不在UE保存的TAI list内时,UE发起正常TAU流程,分为IDLE和CONNECTED(即切换时)下。如果TAU accept分配了一个新的…

HarmonyOS应用开发-搭建开发环境

本文介绍如何搭建 HarmonyOS 应用的开发环境,介绍下载安装 DevEco Studio 开发工具和 SDK 的详细流程。华为鸿蒙 DevEco Studio 是面向全场景的一站式集成开发环境,面向全场景多设备,提供一站式的分布式应用开发平台,支持分布式多…

【起草】【第十二章】定制ChatGPT数字亲人

身为普普通通的我们,不知道亲人们在哪一天就要离开这个世界 ? 作为普普通通的程序员,我们可以为我们的亲人做点什么 ? 让他们以数字资产形式留在人世间 ? 对话|6岁女孩病逝捐器官,妈妈:她去…

js中的数组使用及常见属性方法

目录 数组概念 数组创建方法 数组的length属性 数组的遍历的使用 JavaScript 常用数组方法 concat typeof split length charAt indexOf substring push pop join 数组概念 数组对象的作用是:使用单独的变量名来存储一系列的值。 数组创建方法 构造函…

Matplotlib_4.文字图例尽眉目

文章目录 一、Figure和Axes上的文本1.text2.title和set_title3.figtext和text4.suptitle5.xlabel和ylabel6.annotate7.字体的属性设置 二、Tick上的文本1.简单模式2.Tick Locators and Formatters 三、legend(图例) 一、Figure和Axes上的文本 Matplotli…

面试官:说说JVM内存整体结构?

Java JVM内存结构的面试常问知识 说说JVM内存整体的结构?线程私有还是共享的? JVM 整体架构,中间部分就是 Java 虚拟机定义的各种运行时数据区域。 ​ Java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会…

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机(第3版)》这本书的读书笔记,如有侵权,请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…

网络安全专家 Mikko Hyppönen 对 2024 年的五大 AI 网络威胁发出警告

在网络安全前线战斗了数十年的 Mikko Hyppnen,这位 54 岁的专家最近在一次视频通话中向 TNW 透露了他对 2024 年最令人担忧的五大人工智能(AI)网络威胁。这些威胁并没有特定的顺序,尽管其中有一个是导致他最为失眠的。 深度伪造&a…

HarmonyOS官网案例解析——保存应用数据

介绍 本篇Codelab将介绍如何使用基础组件Slider,通过拖动滑块调节应用内字体大小。要求完成以下功能: 实现两个页面的UX:主页面和字体大小调节页面。拖动滑块改变字体大小系数,列表页和调节页面字体大小同步变化。往右拖动滑块字体…

江西速欣商务咨询有限公司:债务规划重组的专业法务咨询服务

在财务管理中,债务问题往往成为个人和企业面临的一项重要挑战。江西速欣商务咨询有限公司作为债务问题的专业解决者,致力于为客户提供高效而专业的债务规划重组法务咨询服务,帮助他们摆脱负担,重整财务秩序。 深谙债务规划的专业智…
最新文章