webrtc初步了解

news2024/9/25 1:22:16

WebRTC搭建点对点实时音视频对话,起始需要保证完成两点:
1.媒体协商,了解彼此支持的媒体格式。参与视频通讯的双方必须先交换SDP信息,交换SDP的过程。
2.网络协商,了解彼此的网络环境,找到一条相互通讯的链路。
(1)获取外网IP地址映射;(2)通过信令服务器交换“网络信息”

网络术语:
媒体协商 sdp 了解彼此的编解码能力(支持的媒体格式)
网络协商 candidate 了解彼此的外网端口映射

实际网络环境中,双方都在不同的局域网内,不能直接点对点连接。需要利用协议来解决该问题。

WebRTC常用协议

STUN
STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC 5389定义。
作用:告知公网IP地址+端口
存在问题:STUN并不是每次都能成功的为需要NAT的通话设备分配IP地址的,P2P在传输媒体流时,使用的本地带宽,在多人视频通话的过程中,通话质量的好坏往往需要根据使用者本地的带宽确定

TURN
TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能
如果终端在NAT之后,那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。

信令服务器

2个客户端协商媒体信息和网络信息,需要信令服务器来转发彼此的媒体信息(sdp)和网络信息(candidate )。

WebRTC APIs

  1. MediaStream —  MediaStream用来表示一个媒体数据流(通过getUserMedia接口获取),允许你访问输入设备,如麦克风和 Web摄像机,该 API 允许从其中任意一个获取媒体流。
  2. RTCPeerConnection — RTCPeerConnection 对象允许用户在两个浏览器之间直接通讯 ,你可以通过网络将捕获的音频和视频流实时发送到另一个 WebRTC 端点。使用这些 Api,你可以在本地机器和远程对等点之间创建连接。它提供了连接到远程对等点、维护和监视连接以及在不再需要连接时关闭连接的方法

一对一通话

时序图如下:
在这里插入图片描述
通话流程:
1.发起者(A端)和接收者(B端)都先连接到信令服务器(Signal Server)。
2.两端都创建PeerConnection,该对象允许用户在两个浏览器之间直接通讯。添加本地媒体数据流。
3.A端回调CreaterOffer函数从浏览器中获取SDP,利用SetLocalDescription函数设置到本地PeerConnection中。
4.A端先将SDP发送给信令服务器,信令服务器转发给B端。
5.B端利用SetRomoteDescription将接受到的SDP设置到自己的PeerConnection中。并产生SDP。
6.B端回调CreaterAnswer函数获取SDP,利用SetLocalDescription函数设置到本地PeerConnection中。
7.B端先将SDP发送给信令服务器,信令服务器转发给A端。完成媒体协商
8.A端 ICE(STUN+TURN集成协议),请求公网信息。STUN服务器回发Candidate(在PeerConnection内部完成)。
9.A端通过信令服务器转发ICE Candidate给B端。
10.B端调用Add ICE Candidate加到 PeerConnection,了解A端外网端口映射。
11.B端做类似A端8、9做法。
12.A端调用Add ICE Candidate加到 PeerConnection,了解B端外网端口映射。 完成网络协商
13.A、B两端的所有PeerConnection交叉尝试链接,联通后,完成P2P。
小结:
在一对一通话场景中,每个 Peer均创建有一个 PeerConnection 对象,由一方发送 Offer SDP,另一方应答AnswerSDP,最后双方交换 ICE Candidate 从而完成通话链路的建立。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NI 国产替代】cDAQ-9178, 8槽USB CompactDAQ机箱,国产数据采集卡控制器进口替代方案

8槽USB CompactDAQ机箱 cDAQ-9178是专为小型便携式传感器测量系统而设计的总线供电CompactDAQ USB机箱。机箱通过即插即用的USB可轻松连接传感器和电气测量。该机箱还可控制C系列I/O模块与外部主机之间的定时、同步和数据传输。机箱可以搭配不同的C系列I/O模块组合&#xff0c…

C语言结构体类型

C语言结构体类型 个人主页:大白的编程日记 个人主页:C语言学习之路 文章目录 C语言结构体类型前言一.结构体1.1结构体类型的声明1.2结构体变量的创建和初始化1.3结构成员访问操作符1.4结构的特殊声明1.5 结构的自引用 二.结构体内存对齐2.1对齐规则2.2内…

不错的PMP培训机构推荐,高通过高性价比哪家靠谱

PMP培训班的选择对刚接触到PMP的小白来说的确会有点头大,不过只要记住几个选择标准就可以了,比如说可以从机构实力、讲师师资、服务、通过率,性价比等方面开始,最好也是选择老牌机构,因为后面还涉及到续证方面的问题&a…

Android 14 init进程解析

前言 当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。 init进程启动主要分为两个阶段&#xff1…

Java八股文3

3.垃圾回收 1.对象什么时候可以被垃圾器回收 1.垃圾回收的概念 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以, 在Java语言中,有了自动的垃圾回收机制,也就是我们熟悉的GC(Garbage Collection)…

linux部署yum仓库

一. Yum概述 1.yum简介 基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件包由集中到YUM软件仓库提供 2.yum工作原理 c/s模式 客户端根据配置文件找到yum仓库服务器的位置 服务端向客户端发送元数据包(包含 软件依赖关系 软件的位置) #相当于软件安装目录 客户…

leecode每日一练

打家劫舍 我一开始的思路也是dp&#xff0c;但是转移方程想错了&#xff0c;这个题目转移方程应该是dp[i] max(dp[i-2]nums[i],dp[i-1]) class Solution { public:int rob(vector<int>& nums) {int len nums.size();vector<int> dp(len);int ans 0;if(len&g…

56.基于SSM实现的在线教育网站系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用Java的SSM框架作为开发技术&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SSM的在线教育网站的设计与实现管理工作系统化、规范…

【MySQL】第一次作业

【MySQL】第一次作业 1、在官网下载安装包2、解压安装包&#xff0c;创建一个dev_soft文件夹&#xff0c;解压到里面。3、创建一个数据库db_classes4、创建一行表db_hero5、将四大名著中的常见人物插入这个英雄表 写一篇博客&#xff0c;在window系统安装MySQL将本机的MySQL一定…

【华为】路由综合实验(OSPF+BGP基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

06.Git远程仓库

Git远程仓库 #仓库种类&#xff0c;举例说明 github gitlab gitee #以这个仓库为例子操作登录码云 https://gitee.com/projects/new 创建仓库 选择ssh方式 需要配置ssh公钥 在系统上获取公钥输入命令&#xff1a;ssh-keygen 查看文件&#xff0c;复制公钥信息内…

8.表格标签

为什么使用表格 表格简单通用表格结构稳定 表格的基本结构 单元格 行列跨行n为要跨的行数跨列n为要跨的列数 首先&#xff0c;我们做一个最基本的3x4表格&#xff0c;只用到了上述1.2.3三个标签&#xff0c;其中table标签里面的border是表格的边框线&#xff0c;代码和效果…

【DISC交流模型】项目管理必会的思维分析工具11

如何提升自己的领导力&#xff1f;我们可以根据DiSC模型&#xff0c;有针对性提升自我领导力 DISC模型是一种描述性格、行为风格倾向性的理论&#xff0c;也被称为“人类行为语言”。这一模型最初是由美国心理学家威廉莫尔顿马斯顿在20世纪初提出的&#xff0c;并在其1928年…

模电·静态工作点稳定的必要性

静态工作点稳定的必要性 静态工作点不但决定了电路是否会产生失真&#xff0c;而且还影响着电压放大倍数、输入电阻等动态参数。实际上&#xff0c;电源电压的波动、元件的老化以及因温度变化所引起晶体管参数的变化&#xff0c;都会造成静态工作点的不稳定&#xff0c;从而使动…

五一假期后,必读的10篇大模型论文

1.同时预测多个 token&#xff1a;更好更快的大型语言模型 目前&#xff0c;GPT 和 Llama 等大型语言模型&#xff08;LLMs&#xff09;都是通过下一个 token 预测损失来训练的。 在这项工作中&#xff0c;来自 Meta FAIR 的研究团队认为&#xff0c;训练语言模型同时预测多个…

【C语言】解决不同场景字符串问题:巧妙运用字符串函数

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、字符函数1.1 字符分类函数1.1.1 islower1.1.2 isupper 1.…

jetbra.zip教程 激活JetBrains全家桶Idea、pyCharm…亲测有效

本教程基于Windows系统 1、下载jetbra.zip 1.1、地址&#xff1a;https://3.jetbra.in/ 1.2、点击随便一个可用站点 1.3、找到左上角蓝色部分&#xff0c;点击下载 1.4、注意软件卡片上右上角支持的版本 1.5、不要关闭网页&#xff0c;留着&#xff0c;要等会用到 2、下载对应…

数据结构===二叉树

文章目录 概要二叉树的概念分类存储遍历前序中序后序 小结 概要 简单写下二叉树都有哪些内容&#xff0c;这篇文章要写什么 二叉树的概念分类&#xff0c;都有哪些二叉树遍历 对一个数据结构&#xff0c;最先入手的都是定义&#xff0c;然后才会有哪些分类&#xff0c;对二叉…

环保设备在线监控系统

随着环保意识的日益提升&#xff0c;对环境污染的监控与管理成为了我们不可忽视的重要任务。在这个背景下&#xff0c;HiWoo Cloud平台凭借其强大的环保设备在线监控系统&#xff0c;为环保事业注入了新的活力&#xff0c;助力我们共同迈向绿色未来。 一、环保设备在线监控系统…

速锐得深入研究比亚迪E5电控系统及BCU数据及DBC控制策略

新能源汽车中比亚迪作为世界品牌的佼佼者&#xff0c;其E5车型凭借出色的电控系统成为了市场上的一颗璀璨明星。比亚迪E5电控系统不仅体现了技术的先进性&#xff0c;更是智能化、高效率的代名词&#xff0c;它如同一位智慧的指挥官&#xff0c;精确地掌控着汽车的每一个动作&a…