WebRTC标准与框架解读(1)
1、如果让我来设计webrtc框架
我在分析源码的时候,都喜欢做这样一件事情:如果让我来设计它,我会怎么做?大家可以紧跟我的思路,分析一下WebRTC为什么如此设计。
为了对整个框架有有一个全面的了解,我们首先要做的事情是拆解模块。如下图所以,这里我们根据数据流动,将WebRTC拆解成多个模块,这里有些模块相对比较复杂,我们做了简化。整体的框架如下图所示:

WebRTC标准与框架
大家也许已经发现,我针对一些模块,圈出了一些更大的模块,毕竟,相比零碎的模块,我们喜欢简单。因此,对于一条流来说,它的整个流程便简化为:

简化后的框架
这里简单地对概念做一些解释:
track,用于处理原始媒体流。对于本地的track来说,它的作用是接收采集的视频帧完成处理和编码,得到编码后的数据;对于远端的track来说,接收编码的视频流完成解码处理,送去渲染。
rtpsender,接收编码后的数据,完成打包和一些冗余策略等。rtpsender和本地的track是一一对应的。
transport, ICE相关,完成传输通道的管理。
rtpreceiver,接收网络报文,输出编码数据用于后续解码。rtpreceiver和远端的track是一一对应的。
在这里track的作用是处理原始的媒体流,rtpsender和rtpreceiver可以完成对媒体打包做一些控制,transport是对传输通道的控制。有了这样的抽象,我们的pipeline就会更加清晰。
这里我在track基础上圈出了mediastream的概念,这个是WebRTC的老接口使用的概念,现在都是推荐使用track来操作。对于MediaStream的理解大家可以看下标准,一般来说,对于普通的音视频通话,一个MediaStream包含一路音频track和视频track,其实拿1v1的通话来说大家可能更容易理解为什么要把他们绑定到一起了。一般同属于一个MediaStream的流是需要做音视频同步的。
https://www.w3.org/TR/mediacapture-streams/www.w3.org/TR/mediacapture-streams/
2、ORTC的设计
哈!如果你了解下ORTC的设计思想,你就会发现,还有一群更聪明的人早就想到如此设计整个RTC了!
ORTC(Object API for RTC)的设计思想:

ORTC标准
可以看到,ORTC中,也是抽象成了Track、RtpSender、RtpReceiver、Transport几个概念。ORTC设计的是一套面向对象的接口,外部通过和RtpSender、RtpReceiver、Transport交互,来达到对RTC的控制目的。ORTC标准的出现,也规范了WebRTC的代码框架。
3、WebRTC PeerConnection(PC)接口
WebRTC对内部的各个模块都有经过封装,比较推荐的是使用PeerConnectionn接口来对外交互,我们上面的设计还是很贴近PC了,大家可以多看看这个标准:
https://w3c.github.io/webrtc-pc/w3c.github.io/webrtc-pc/
目前的WebRTC标准里面pc接口为了兼容planB和unified plan,接口相对比较复杂,如果我造轮子,肯定会甩掉历史包袱,只保留一套接口了。unified plan支持对每一个track配置,相对更灵活。因此,我们围绕track、rtpsender、rtpreceiver、transport增加一些接口即可。
AddTrack:用于增加本地的track,输入为视频源接口,可以是内部采集,也可以是外部采集(我们可以自己实现采集功能)。远端的track是协商之后由信令触发。
SetLocalDescription :设置本地SDP能力
SetRemoteDescription: 设置远端SDP能力
CreateOffer:添加好track,设置好本地能力后,便可以向接收端发起协商。
CreateAnswer:接收端响应offer,协商完成后会创建一个rtpreceiver用于接收媒体报文,并且会对应床架一个远端track,用于解码和显示。
以上接口接口可以保证整个流程能够运行起来:

peerconnection流程
实际上这里还缺失了ICE协商相关的接口,这里没有做详细介绍了。
原文https://zhuanlan.zhihu.com/p/484971820
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
相关文章:
WebRTC标准与框架解读(1)
1、如果让我来设计webrtc框架我在分析源码的时候,都喜欢做这样一件事情:如果让我来设计它,我会怎么做?大家可以紧跟我的思路,分析一下WebRTC为什么如此设计。为了对整个框架有有一个全面的了解,我们首先要做…...
数据结构的一些基础概念
一 基本术语 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处…...
【Python每日一练】总目录(不断更新中...)
Python 2023.03 20230303 1. 两数之和 ★ 2. 组合总和 ★★ 3. 相同的树 ★★ 20230302 1. 字符串统计 2. 合并两个有序链表 3. 下一个排列 20230301 1. 只出现一次的数字 2. 以特殊格式处理连续增加的数字 3. 最短回文串 Python 2023.02 20230228 1. 螺旋矩阵 …...
latex插入图片(自用)
加入宏包:\usepackage{graphicx} 使用 \includegraphics 命令进行插图。 \includegraphics[]{}: 第一参数[]:对图片做一些适当的调整(设定图片的高度和宽度或者按比例缩放) 第二参数{}:图片的名字…...
【微信小程序】-- 网络数据请求(十九)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
K8S 实用工具之一 - 如何合并多个 kubeconfig?
开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群。 如果是第二种情况,是否有一个简单的 kubectl 命令来获取一个 kubec…...
阿里云ECS服务器的6大功能组件
阿里的云服务在国内可以说是首屈一指的了,因此他们家的云服务器也是最受欢迎的。那么,你知道阿里云服务器ECS有哪些功能组件吗?不清楚不要紧,下面服务器吧小编带大家来看看。 在了解之前我们来看一张阿里云服务器ECS的产品组件架…...
外贸建站多少钱?不同预算对应的建站方案!
外贸建站多少钱? 答案是:3000左右。 作为一个外贸企业的经营者,我们深知一个优质的外贸网站对于企业的重要性。 然而,建立一个优质的外贸网站需要耗费大量的时间和资金,因此我们需要在预算有限的情况下,…...
Vue3中hook的使用及使用中遇到的坑
目录前言一,什么是hook二, hook函数的使用2.1 铺垫2.2 hook函数的写法2.3 使用写好的hook函数后记前言 在学习Es6的时候,我们开始使用类与对象,开始模块化管理;在Vue中我们可以使用mixin进行模块化管理;Vu…...
数据库-差集交集并集
数据库-差集交集并集[toc]图示一、并集运算(UNION)并集:两个集合的并集是一个包含集合A和B中所有元素的集合。在T-SQL中,UNION集合运算可以将两个输入查询的结果组合成一个结果集。需要注意的是:如果一个行在任何一个输…...
spark性能调优(四):网络
网络 一、数据读写二、数据处理三、数据传输在平衡不同硬件资源的时候,相比于CPU、内存、磁盘,网络开销处理延迟最高 一、数据读写 对于大多数应用来说,第一步都是从分布式系统中读取数据,不论什么文件格式,也不管哪种文件存储系统,访问数据源是否会引入网络开销,取决于任务与…...
高性能 WPF 图表控件LightningChart.NET:支持从 Web 服务器获取数据 | 附最新版试用下载
LightningChart.NET 是一款高性能 WPF 和 Winforms 图表,可以实时可视化多达1万亿个数据点。可有效利用CPU和内存资源,实时监控数据流。同时,LightningChart使用突破性创新技术,以实时优化为前提,大大提升了实时渲染的效率和效果&…...
文科女生月入14k背后:转行IT软件测试不是谁都学得来!
转行软件测试背后,或许每个人都有自己的无奈。就拿今天要和大家分享的这位小姐姐来说吧,如果不是万不得已,又怎么会狠下心来转行到IT互联网? 应届生逃避就业,考研失败 和大多数人一样,小姐姐的大学生活过得…...
GB28181监控视频统一汇聚平台LiveGBS将海康大华华为宇视等厂家监控设备统一接入后如何生成固定播放链接或者固定的流地址可以直接无插件播放或者拉取
目前汇聚各种厂家监控设备的视频汇聚平台,基本都是通过GB28181标准协议实现的。下面介绍下LiveGBS Web无插件直播的GB28181视频平台将各厂家(包括海康、大华、华为、宇视、天地伟业等)监控汇聚到同一个服务器上后,如何或者直播链接…...
认识BUG
如何描述 bug一个合格的 bug 描述应该包括以下几个部分:发现问题的版本开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障,并且版本的标识也有利于统计和分析每个版本的质量。问题出现的环境环境分为硬件环境和软件环境&am…...
C++string类型内置的搜索函数
string的搜索操作 string类型一共提供了6种不同的搜索函数,每个函数都有4个重载版本。如果搜索成功,每个搜索操作都会返回一个 string::size_type类型的值,表示匹配发生位置的下标。 如果搜索失败,则会返回一个名位string::npos…...
Disruptor 消费线程丢失、写入无限阻塞问题
使用jstack打印后,发现 1)写入disruptor线程卡死在 java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338) at com.lmax.…...
【禅道测试环境搭建及安装】Linux上的禅道安装教程,从环境搭建开始
目录 一、操作环境 二、安装VMware 三、安装FinalShell 四、在VMware里安装CentOS 1.前置:CentOS的下载 2.CentOS的安装 3.查看网络 五、用宿主机连接远程的虚拟机 六、禅道包的下载与CentOS配置的修改 七、上传项目包并安装禅道 一、操作环境 Windows 10…...
spring-boot rabbitmq整合
文章请参考:Springboot 整合RabbitMq ,用心看完这一篇就够了 mven依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></depende…...
CentOS7安装redis redis常用命令
Redis简介Redis是一个开源免费的、使用C语言编写的NoSQL 数据库。Redis基于内存运行并支持持久化(RDB、AOF方式将数据保存在磁盘),采用key-value (键值对)的存储形式。Redis数据类型Redis支持五种数据类型:string(字符串)…...
机器人导航中的深度估计与SLAM技术实践
1. 机器人导航中的深度估计技术解析深度估计作为计算机视觉领域的核心技术,在机器人自主导航中扮演着关键角色。简单来说,它就像给机器人安装了一双能感知距离的"眼睛"——通过分析摄像头捕获的二维图像,计算出场景中每个像素点与相…...
Ctool JSON工具完全指南:从格式化到Schema生成的完整流程
Ctool JSON工具完全指南:从格式化到Schema生成的完整流程 【免费下载链接】Ctool 程序开发常用工具 chrome / edge / firefox / utools / windows / linux / mac 项目地址: https://gitcode.com/gh_mirrors/ct/Ctool Ctool是一款功能强大的程序开发常用工具&…...
别再折腾源码编译了!Ubuntu 22.04 LTS下用apt-get一键部署Asterisk PBX(附SIP账号配置详解)
别再折腾源码编译了!Ubuntu 22.04 LTS下用apt-get一键部署Asterisk PBX(附SIP账号配置详解) 在开源通信领域,Asterisk作为功能最强大的PBX系统之一,长期困扰初学者的不是其丰富的功能,而是复杂的编译安装过…...
从数学抽象到物理连接:Simscape物理网络建模的核心思想
1. 当信号流遇到物理网络:思维模式的碰撞 第一次打开Simscape工具箱时,我盯着那些陌生的元件库发了十分钟呆。作为有五年Simulink建模经验的工程师,我习惯性地开始寻找"输入端口"和"输出端口",却发现Simscape…...
告别2G/3G!用STM32F103和AIR724UG Cat.1模块,5分钟搞定你的第一个4G物联网项目
STM32与AIR724UG Cat.1实战:从硬件搭建到云端连接的4G迁移指南 当运营商陆续关闭2G/3G基站时,那些依赖老旧网络的智能水表、车载终端和工业传感器突然变成了"数字孤儿"。去年我们团队就遇到过这样的紧急情况——某农业监测系统使用的3G模块批量…...
性能测试指标选不对,报告全白费!从一次线上故障复盘TPS、RT与吞吐量的关系
性能指标迷局:当高QPS掩盖了系统瓶颈的真相 那天凌晨三点,我被一阵急促的电话铃声惊醒。电商大促系统监控面板上QPS曲线依然漂亮,但业务方反馈用户下单延迟高达15秒——这个看似矛盾的场景,揭开了性能指标认知中最危险的陷阱。我…...
如何快速解密网易云音乐NCM文件:5步完成格式转换的完整指南
如何快速解密网易云音乐NCM文件:5步完成格式转换的完整指南 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 还在为网易云音乐的NCM加密格式烦恼吗?想要在任意播放器上畅听你收藏…...
【c++面向对象编程】第4篇:类与对象(三):拷贝构造函数与深浅拷贝问题
目录 一、一个崩溃的程序 二、拷贝构造函数是什么? 调用时机(三个场景) 三、浅拷贝 vs 深拷贝 浅拷贝(默认行为) 深拷贝(正确的做法) 四、什么时候必须自己写拷贝构造函数? 一…...
无线充电技术:从手机标配到多场景应用的挑战与机遇
1. 无线充电市场现状:繁荣表象下的应用困境手机无线充电,现在几乎成了旗舰机的标配。从咖啡馆、机场到汽车中控台,充电垫的身影随处可见。作为一名在电源管理和消费电子领域摸爬滚打了十几年的工程师,我亲眼见证了Qi标准从实验室走…...
隐藏在闲鱼暗网的暴利生意
今天想跟大家说个颠覆认知的事儿——你平时用来卖旧衣服、砍价包邮的闲鱼,其实还有一张脸,那张脸长什么样呢?我管它叫“成年人最隐秘的交易所”。 你敢信吗?有人在那儿卖了10万单,一单实物都不发,纯利润&am…...
