WebRTC的技术原理和使用浅析

news2024/11/19 10:24:23

一、基本介绍

WebRTC即网页即时通信,是一个支持网页浏览器进行音视频对很多 技术方案。

二、技术特征

1.实时通讯:

WebRTc是一项实时通讯技术,允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点的连接,实现视频流或音频流或者其他任意数据的传输。

2.无依赖、插件:

WebRTC包含的这些标准使用户在无需安装任何插件或者第三方软件的情况下,创建点对点的数据分享和音视频数据传输成为可能。

3.协议栈众多

WebRTC并不是单一的协议,包含了媒体、加密、传输层等在内多个协议标准以及一套基于JavaScript的API,包含类音视频的采集、编解码、网络传输、显示等功能。通过简单易用的 JavaScript API ,在不安装任何插件的情况下,让浏览器拥有了 P2P音视频和数据分享的能力。

相关协议介绍与作用        
ICE/STUN/TURN                       用于内网穿透,解决了获取与绑定公网映射地址
DTLS用于对传输内容进行加密
SRTP/SRTCP        对媒体数据的封装与传输控制协议

三、技术原理

技术特征:

1.SRTP:安全的实时传输协议,用于音视频流传输

2.Multiplexing:多路复用

3.P2P:STUN+TURN+ICE 用于NAT网络和防火墙穿越。

4.DTLS:用于加密传输和密钥协商。

5.UDP:整个WebRTC通信是基于UDP的。

明确网络定位:

获取连接对象的网络地址方式,是借助于ICE、STUN、TURN等辅助内网穿透技术(NAT)得到对应主机的公网网络地址和端口等网络定位信息。明确网络定位是建立端与端直接通讯的基础。

信令服务器:

信令服务器的作用是基于双工通信来中转信息,中转信息包含公网ip映射后的网络定位信息,比如公网IP、端口、媒体数据流等。

信令服务器信息交互过程图:

 会话描述协议SDP:

1)不同端/浏览器对于媒体流数据的编码格式各异,如VP8、VP9等,参与会话的各个成员的能力不对等、用户环境与配置不一致等;

2)WebRTC通讯还需要确定和交换本地和远程音频和视频媒体信息,例如分辨率和编解码器功能。交换媒体配置信息的信令通过使用会话描述协议 (SDP) 交换Offer和Anwser来进行;

3)SDP的交换一定是先于音视频流交换的。其内容包括会话基本信息、媒体信息描述等。

一对一连接建立过程 

 

如上图所示,解释一下:
 

1)交换SDP,获取各自媒体配置信息;

2)STUN服务器交换网络地址和端口等网络信息;

3)Turn中转音视频媒体流数据。

工作流程图:

 

如上图所示,解释一下:
1)A和B双方先调用 getUserMedia 打开本地摄像头,作为本地待输出媒体流;

2)向信令服务器发送加入房间请求;

3)Peer B 接收到 Peer A 发送的 offer SDP 对象,并通过PeerConnection的SetLocalDescription方法保存 Answer SDP 对象并将它通过信令服务器发送给 Peer A;

4)在 SDP 信息的 offer/answer 流程中,Peer A 和 Peer B 已经根据 SDP 信息创建好相应的音频 Channel 和视频 Channel,并开启Candidate 数据的收集,Candidate数据(本地IP地址、公网IP地址、Relay服务端分配的地址);

5)当 Peer A 收集到 Candidate 信息后通过信令服务器发送给 Peer B。同样的过程 Peer B 对 Peer A 也会再发送一次。

四、小结

优点:方便、免费、强大的打洞能力:WebRTC技术包含了使用STUN、ICE、TURN、RTP-over-TCP的关键NAT和防火墙穿透技术,并支持代理。

缺点:缺乏服务器方案的设计和部署、传输质量难以保证,WebRTC的传输设计基于P2P,难以保障传输质量、WebRTC比较适合一对一的单聊、设备端适配,如回声、录音失败等问题层出不穷、对Native开发支持不够。

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

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

相关文章

Java读取文件内容到字符串

例如当前在D:\\test目录下有一个名为demo.txt的文件,文件里面的内容如下图所示: 第一种方式: 使用BuffererReader 缓冲字符输入流 import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader; import java.io.File; import java.io.…

css对盒模型的理解

面试碰到的一个问题,记录一下 ’ CSS3中的盒模型有以下两种:标准盒子模型、IE盒子模型 盒模型都是由四个部分组成的: 分别是margin、border、padding和content。 标准盒模型和IE盒模型的区别在于设置width和height时,所对应的范围不同&#…

csproj文件常用设置及C#注释常用写法

csproj文件常用设置及C#注释常用写法 .NET新版SDK风格的csproj文件 打开可为空警告 <PropertyGroup><Nullable>enable</Nullable> </PropertyGroup>启动全局引用using 下图没有任何using&#xff0c;仍然不报错 <PropertyGroup><Implicit…

扑克牌最优组合算法题(动态规划+备忘录+快排)

题目如下 题目&#xff1a; 设一副包含点数从A到K,四种花色的52张牌, 将 三张及以上同点数不同花色的牌组 或者三张以及上的同花顺称为 组合, 求出给定一副20张以内的牌中,所能形成的最优的组合列表(最优即组合点数累加最大) 代码要运行正确而且要做输入处理&#xff0c;输出格…

Uncaught TypeError: Illegal invocation

使用console.time报错 console.time将在当前对象(即支持)的上下文中执行&#xff0c;发现一些老的chrome版本中&#xff0c;上下文可能有问题. 解决&#xff1a; 可以使用 console.time.call(window,1111)

关于Easy Mesh

随着网络技术的高速发展&#xff0c;家庭宽带进入了千兆时代&#xff0c;AR&#xff0c;VR&#xff0c;8K影视等高品质产品和智能家居正以前所未有的速度进入寻常百姓家&#xff0c;由于网络覆盖的问题&#xff0c;给WIFI网络应用带来了更大的考验。 WIFI网络覆盖一般是有四种方…

git下载总是报错:身份认证失败的解决办法

在利用git命令下载代码时&#xff0c;提示输入用户名和密码&#xff0c;但是总是显示身份认证失败&#xff0c;在修改密码后仍然没有解决。于是&#xff0c;换了一种方式&#xff0c;采用SSH。 首先在本地生成ssh-key 在虚拟机中执行命令 ssh-keygen -t rsa -C "github…

不再手动PS,教你如何快速删除图片文字!

可以让你快速从照片中提取和复制任何对象的应用。它可以让你轻松地将照片中的物品、人物、动物、文字等放到其他应用中&#xff0c;比如Photoshop、PowerPoint、Word等。ClipDrop还有一个很有用的功能&#xff0c;就是可以去除照片中的文字&#xff0c;让你得到一个干净的背景。…

【MySQL】MySQL数据库基础

目录 一、数据库概念 二、数据库基本使用 1、链接服务器 2、服务器管理 3、使用案例 3.1、创建数据库 3.2、使用数据库 4、服务器&#xff0c;数据库&#xff0c;表关系 三、MySQL架构 四、SQL分类 五、存储引擎 1、存储引擎概念 2、查看存储引擎 3、存储引擎对比…

【强化学习】常用算法之一 “A3C”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

前端JS一维数组转树状数组并获取当前节点的所有父级名称或id

注意一维数组里面必须要有属性跟父级关联 test(){const list2 [{id: 1,pid: 0,name: 湖南},{id: 2,pid: 1,name: 长沙},{id: 3,pid: 2,name: 雨花区},];// 参数一:需要转树状数组的数组// 参数二:父id// 参数三:当前递归的父级节点name// 参数三:当前递归的父级节点idconst ar…

移远通信再推模组新品,全新5G智能模组SG530C-CN智创全景智慧生活

6月28日&#xff0c;在2023 MWC上海展会首日&#xff0c;移远通信再次宣布推出模组新品。 此次推出的全新5G智能模组SG530C-CN在连接能力、算力、多媒体性能与成本效益等层面都呈现较高水平。该模组将在智慧零售、车载后装、娱乐/直播、手持终端、工业AI等行业与应用场景上大有…

大数据需要一场硬件革命

光子盒研究院 计算领域的进步往往集中在软件上&#xff1a;华丽的应用程序和软件可以跟踪人和生态系统的健康状况、分析大数据&#xff0c;并在智力竞赛中击败人类冠军。与此同时&#xff0c;对支撑所有这些创新的硬件进行全面改革的努力相对来说&#xff0c;略显小众。 自2020…

如何实现MySQL的读写分离?

其实很简单&#xff0c;就是基于主从复制架构&#xff0c;简单来说&#xff0c;就搞一个主库&#xff0c;挂多个从库&#xff0c;然后我们就单 单只是写主库&#xff0c;然后主库会自动把数据给同步到从库上去。 MySQL主从复制原理的是啥&#xff1f; 主库将变更写入 binlog …

架构图的实现过程

项目需求架构图 实现代码 index.vue <template><!-- 外层div --><div class"topu-container" :style"{ minWidth: ${functionDomainList.length * 330}px }"><!-- 头部显示 --><div class"topu-heard"><!-- …

vue3高德地图点击标点

1.首先如果没有key的话需要在高德开发平台申请key。 2.安装 npm i amap/amap-jsapi-loader --save cnpm i amap/amap-jsapi-loader --save3.容器&#xff1a; <template><div><div class"info"><h4>获取地图级别与中心点坐标</h4>&l…

git常用命令之Cherry-pick

8. Cherry-pick 8.1 基本用法 命令作用延展阅读git cherry-pick 125a1d将提交125a1d应用于当前分支. 在当前分支会产生一个新的提交.链接git cherry-pick bugfix将分支bugfix应用于当前分支. 在当前分支会产生一个新的提交. 场景1&#xff1a;提交125a1d应用到master分支 命…

玖章算术与百度智能云达成合作,「NineData SQL 开发」成为百度智能云主推的数据库工具

2023 年 6 月 19 日&#xff0c;玖章算术&#xff08;浙江&#xff09;科技有限公司旗下的多云数据管理平台 NineData 正式入驻百度智能云市场&#xff0c;双方的深度技术融合将为客户提供智能高效、安全可靠的数据库开发服务。通过适配百度智能云数据库&#xff0c;NineData 为…

计算机网络中的安全

计算机网络中的安全 1 什么是网络安全2 加密的方式——机密性2.1 对称密钥加密2.2 公开密钥加密 3 报文鉴别码——报文完整性4 数字签名——报文完整性、端点鉴别4.1 数字签名技术的基础4.2 公钥认证 5 案例——设计安全电子邮件系统 《计算机网络—自顶向下方法》&#xff08;…

Postman中读取外部文件

目录 前言&#xff1a; 一、postman中读取外部文件的格式 二、Postman中如何导入文件 三、在Postman读取导入的数据文件 前言&#xff1a; 在Postman中&#xff0c;您可以使用"数据文件"功能来读取外部文件&#xff0c;如CSV、JSON或Excel文件。这使得在测试中使用…