想开发一款带有视频通话/共享屏幕功能的产品?那WebRTC是你必须要知道的!

news2025/2/25 5:11:49

作为一名技术爱好者,我总是对各种协议、各种功能感兴趣,两周前我想为我的开源项目ChatCraft集成视频通话功能,我就开始了对应技术的研究,然后我盯上了WebRTC。在这个研究过程中,我恶补了大量有关WebRTC的知识,并在最后,成功实现了视频通话功能。我想,我这次尝试值得分享。所以就这样……如果你还感兴趣,那就继续看下去吧!

这篇文章是实战的前置文章,在这篇文章中一起来学习WebRTC的相关知识吧!

什么是WebRTC

网页即时通信(Web Real-Time Communication),是一个支持浏览器(不局限于浏览器,例如在App中使用,只需要自己实现音频、视频的采集,传输即可)进行实时语音对话或视频对话的API。简单来说,有了WebRTC我们可以通过一些简单的API就可以给浏览器和App提供实时通信(RTC)的功能。
而在 WebRTC 推出之前,开发实时音视频交互应用的成本高昂且技术挑战多·,包括音视频编解码、数据传输、延迟、丢包、抖动、回声处理…等问题。现在就简单了,例如视频通话时,音频因为环境或其他问题导致的有噪声、回声干扰,如果不做处理,用户体验会很差,而WebRTC提供了 3A 算法 + NetEQ,让实时环境中的声音处理及互动体验得到了大幅的提升。

WebRTC主要用来做什么

WebRTC是不局限于浏览器的,只要使用设备的IP链接可到达,且符合WebRTC规范的就可以互相连接。所以,能应用的领域就非常多。举几个现在常见的例子:

  • 共享桌面
  • 视频/语音聊天
  • 视频会议
  • 云端游戏
  • P2P网络加速

看到这里,相信你已经对WebRTC有了一个最基础的基本概念了,知道它会出现在什么应用场景下,如果你还感兴趣的话,那就让我们揭开它神秘的面纱吧!

在WebRTC中发生了什么?

让我来通过一个场景小故事,告诉你在WebRTC中发生了什么~

故事开头: 从前,在一个数字世界里,有两个神秘的实体,它们分别被命名为A和B。A是一位智慧的编码者,B则是一位梦想的解码者。

过程: A和B都拥有着珍贵的信息,但它们需要一种安全的方式来分享这些信息。于是,A开始寻找通向B的神秘通道。它穿越虚拟的网络山川,寻找能够连接到B的公共路径。A仔细检查自己的数字身份,确保自己可以被其他实体识别。同时,它还检查了自己的数字路由器,确保可以传递信息给B。

与此同时,B也在为这次神秘相遇做准备。它同样寻找通向A的路径,准备好自己的数字身份和路由器。A和B收集了大量信息,包括加密方式、安全参数和视频编解码器,这些信息构成了他们的“SDP”。

结尾: 最终,A和B通过一种数字化的方式传递了会话信息。这个方式可以是通过电子邮件、虚拟信使,甚至是通过传送门。WebRTC并不关心具体的传递方式,只要信息能够从A到B,它们就可以开始他们的数字通信之旅。一旦A和B交换了SDP,它们就像魔法般实现了真正的点对点通信。不再需要第三方干涉,它们可以直接建立连接,分享彼此的智慧和梦想。最终,A和B通过最优的数字路径找到了彼此,这就是WebRTC的神奇之处。

WebSocket和WebRTC的区别是什么?

熟悉WebSocket的朋友到这里就会发现了,好像他们都是转发消息。如果你也这么想,那恭喜你,你已经熟悉了WebRTC的一小点部分。WebRTC其实也使用了WebSocket,用于搭建WebRTC的信令机制,但是因为WebRTC是端到端连接,在WebSocket连接建立结束后,就不再需要额外服务器。那它们之间到底有什么区别呢?我们分别从设计理念和实现区别来看。

  • 设计理念
    • WebSocket主要用于IM聊天应用。
    • WebRTC是为高质量音视频实时通信设计的。
  • 实际区别
    • WebRTC使用UDP协议,而WebSocket使用TCP协议。
    • WebRTC提供的浏览器端到端通信比WebSocket提供的服务延迟更低。

WebRTC用到了哪些技术?

WebRTC其实就是一组其他技术的集合体,这里面包含了许许多多的协议、技术点,想在文章中分析完所有的技术点不太现实,我们来讲点关键的!

NAT(Network Address Translation)

网络地址转换,这个技术相信大部分看文章的朋友都有在大学期间学习过,用来解决IPv4地址短缺的问题。所谓的网络地址转换,就是把内网地址转换成可以访问外网的地址。那和WebRTC有什么关系呢?关系大了!WebRTC是P2P方式,我们需要找到对方的ip,点对点的连接。如果对方有一个公开的IP地址,那么连接过程将不会有什么问题。因为会像连接一个网页服务一样,把端口和IP都提供给对方后,我们和它就可以直接进行连接了。但在大多数情况下,它都是隐藏在公共网络之后的,我们无法直接连接。

对NAT网络地址转换的运行原理感兴趣的朋友可以自行学习,就不在本文展开了。

NAT 的转换方式主要有四种,而WebRTC默认支持三种网络扩展的方式,对其他的方式并不友好,且大部分的网络地址转换都是通过以下三种方式:

  • 一对一 NAT(完全圆锥型 NAT)
  • IP 受限型 NAT
  • 端口受限型 NAT
STUN和TURN

而网络地址转换过程主要依赖于两种协议,即会话穿越工具(STUN)和中继NAT穿越工具(TURN)。

STUN服务器的作用是帮助设备发现自己的公网IP地址和端口。它是非常轻量级的,通常位于公共网络上,并且有一个简单的任务:就是检查终端传入请求的IP地址(躲在NAT后面的程序),并将该地址作为响应发送回去。这个过程使得WebRTC A端为自己获得一个可公开访问的地址,然后通过信令机制将其传递给B端(或其他端)以建立直接链接。

然而,STUN不能在所有情况下都工作,特别是当NAT防火墙的策略比较严格时,例如在刚才讲NAT的时候没有提到的第四种方式——对称 NAT(Symmetric NAT),在这种环境下必须使用 TURN!TURN服务器实际上扮演了媒体流的中继角色,将数据从发送端传到接收端。这代表着:所有的通信内容都要经过 TURN 服务器的转发,导致TURN服务器的维护成本比较高,所以我们可以发现,基本上没有免费给用户使用的TURN服务器。

想创建TURN服务器可以参考: https://github.com/coturn/coturn

ICE框架

当客户端和服务端媒体协商完成后,需要开始建立网络连接,它会STUN和TRUN协议完成工作。之后,我们就会从A端到B端之间的路径有了非常多的选择,ICE框架就是为了更好的处理这些路径而提出的。ICE会获取所有可用的通信路径,并将其作为"候选者"。这些路径可能包括本地IP地址以及STUN和TURN服务器提供的地址等。然后,ICE将收集到的所有地址放入SDP(会话描述协议) 中,并将其发送到对方。对方通过解析SDP来了解我们提供的重要信息。

SDP

在前面我们说到了SDP(会话描述协议),那它的作用主要是什么呢?SDP只是一种数据格式,而且它是WebRTC中最重要的几个概念之一。它的设计目的是将用户产生的SDP送至其他端,怎么发送的它不管,当A端想要开始一个通话时,它就会创建一个包含了自己可接受的媒体格式、网络信息、安全选项和其他信息的offer,然后发送给B端。收到offer的B端会回复一个answer,包含了它决定使用的媒体和网络参数。我们开发者也可以自定义SDP的内容。

信令交换

如果看了SDP交换的过程图,那大家一定看到了中间的信令,信令其实就是一个转发服务,将一个设备端产生的SDP通过某种方式传递给想要通信的那方,大部分使用websocket或socket服务。其实啥方式都不重要,能将SDP信息传递给另外一方就可以了。

一个典型的WebRTC通信流程

知道了WebRTC大部分的技术,那一个典型的WebRTC通信流程就出现了!

看到这里,我相信你对WebRTC已经有了初步了解了,那么在下一篇WebRTC的系列文章中,我们来实现一个可以多端视频/语音电话的功能吧!

关于我

Hello,我是Taxze,如果您觉得文章对您有价值,希望您能给我的文章点个❤️,有问题需要联系我的话:我在这里 ,也可以通过掘金的新的私信功能联系到我。如果您觉得文章还差了那么点东西,也请通过关注督促我写出更好的文章~万一哪天我进步了呢?😝

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

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

相关文章

8.机器学习-十大算法之一朴素贝叶斯(Naive Bayes)算法原理讲解

8.机器学习-十大算法之一朴素贝叶斯(Naive Bayes)算法原理讲解 一摘要二个人简介三朴素贝叶斯算法简介朴素贝叶斯算法概念贝叶斯方法朴素贝叶斯算法贝叶斯公式 四贝叶斯算法的核心思想:利用贝叶斯定理进行分类五优缺点优点缺点 六朴素贝叶斯原…

从浏览器输入url到页面加载(八)你的web网站有几台服务器?

你有没有想过一个问题,做为一名前端开发,你的网站上线后,准备了几台服务器?前端静态资源用了几台,你调接口的那个后端部署了几台? 目录 1 没接触过这个问题很正常 2 当访问量上升的时候 2.1 提升带宽 …

计算机科学与技术就业方向和前景怎么样

计算机科学与技术专业的就业方向极为广泛,方向可以是软件开发与工程、网络与信息安全、数据科学与大数据分析等,几乎渗透到现代社会的每一个角落。以下是上大学网 (www.sdaxue.com)对计算机科学与技术专业一些主要的就业方向及其前景分析&…

GitLab(史上最全GitLab安装使用文章!!!)

GitLab 是一个基于网络的Git仓库管理工具,是开源的。基本每个公司都会有属于自己公司内部的GitLab 官方网站:https://about.gitlab.com/ GitLab文档:https://docs.gitlab.cn/jh/install/requirements.html 安装 所需配置 这里采用Cento…

PHP源码_最新Ai对话系统网站源码 ChatGPT+搭建教程+前后端

基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论…

Cloudflare防火墙其他WAF设置

其他WAF设置 缓存设置 缓存设置好也可以帮助我们抵挡巨量的CC攻击。有些CC是很多IP随即攻击一个地址,如果我们的安全策略没有拦截到攻击。但是我们设置了缓存,那这些请求则会在CloudFlare边缘节点直接将缓存内容返回给请求。也达到了抗攻击的效果。 缓…

13.4.1 实验1:配置VTP

1、使用目的 通过本实验可以掌握 VTP三种模式的区别。VTP工作原理。VTP的配置和调试方法 2、实验拓扑 配置VTP的实验拓扑如下图所示 3、实验拓扑 3.1、实验准备 通过命令 delete nash:van.dat和erasestartup-config把3台交换机的配置清除干净,重启交换机&#…

基于深度学习的3D目标检测与跟踪

目标检测和跟踪对于自动驾驶来说是至关重要和基础的任务,旨在从场景中识别和定位出那些预定义类别的对象。在所有形式的自动驾驶数据中,3D点云学习引起了越来越多的关注。目前,有许多用于3D目标检测的深度学习方法。然而,鉴于点云…

MySQL数据库——事务操作-begin-commit-rollback

schooldb库——utf8字符集——utf8_general_ci排序规则 先创建库,再去使用下列的DDL语句。 DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL COMMENT 创建时间,modifyDate datetime DEFAULT NULL …

stm32单片机开发一、中断之外部中断实验

stm32单片机的外部中断和定时器中断、ADC中断等都由stm32的内核中的NVIC模块控制,stm32的中断有很多中,比如供电不足中断,当供电不足时,会产生的一种中断,这么多中断如果都接在CPU上,或者说CPU去处理&#…

【LAMMPS学习】八、基础知识(5.2)粒度模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

蓝网科技临床浏览系统 deleteStudy SQL注入漏洞复现(CVE-2024-4257)

0x01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 0x02 漏洞概述 蓝网科技临床浏览系统 deleteStudy接口处SQL注入漏洞,未经身份验证的恶意攻击者利用 SQL 注入漏洞获取…

AI大模型探索之路-训练篇8:大语言模型Transformer库-预训练流程编码体验

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

Codigger数据篇(下):数据安全的全方位保障

在数字化浪潮中,数据已成为现代企业的核心财富。Codigger作为领先的数据服务平台,深知数据安全对于用户的重要性,因此在深挖数据价值的同时,我们始终坚守数据安全防线。 一、双重加密技术保障 Codigger平台运用先进的加密通信和…

【C/C++】动态内存管理(C:malloc,realloc,calloc,free || C++:new,delete)

🔥个人主页: Forcible Bug Maker 🔥专栏: C | | C语言 目录 前言C/C内存分布C语言中的动态内存管理:malloc/realloc/realloc/freemallocrealloccallocfree C中的动态内存管理:new/deletenew和delete操作内…

android studio 编译一直显示Download maven-metadata.xml

今天打开之前的项目的时候遇到这个问题:android studio 编译一直显示Download maven-metadata.xml, AI 查询 报错问题:"android studio 编译一直显示Download maven-metadata.xml" 解释: 这个错误通常表示Android Studio在尝试从Maven仓库…

用Python Turtle画一个中国结

中国结,作为中华民族传统文化的象征之一,以其独特的编织技艺和深厚的文化内涵,深受人们喜爱。今天,我们就来用Python的turtle模块,尝试绘制一个充满韵味的中国结。 我们先来看看整个中国结生成的过程: 中国…

机器学习 | 准确率、召回率、精准率、特异度傻傻分不清?ROC曲线怎么看?一篇文章帮你搞定

一、真正类、假负类、假正类与真负类 二、准确率、召回率、精准率、特异度与假正率 1. 准确率 (Accuracy) 准确率表明成功预测(预测为负或为正)的结果占总样本的百分比。 准确率 , 2. 召回率/查全率/灵敏度/真正率(Recall&a…

C语言进阶|双链表

✈链表的分类 链表的结构非常多样,以下情况组合起来就有8种(2x22)链表结构: 虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:单链表和双向带头循环链表 1.无头单向非循环链表:结构简单&…

springboot基于SpringBoot的网上订餐系统开题报告+1w字文档+ppt

项目演示视频: 【源码免费送】基于SpringBoot的网上订餐系统录像 摘 要 随着我国经济的飞速发展,人们的生活速度明显加快,在餐厅吃饭排队的情况到处可见,近年来由于新兴IT行业的空前发展,它与传统餐饮行业也进行了新旧的结合&…