WebRTC音视频-前言介绍

目录

效果预期

1:WebRTC相关简介

1.1:WebRTC和RTC

1.2:WebRTC前景和应用

2:WebRTC通话原理

2.1:媒体协商

2.2:网络协商

2.3:信令服务器


效果预期

1:WebRTC相关简介

1.1:WebRTC和RTC

        WebRTC(Web Real-Time Communication)是一项开放标准的实时通讯技术,旨在通过浏览器和移动应用程序直接进行音频、视频和数据传输,而无需借助插件或其他第三方软件。

        RTC是一个更广泛的概念,涵盖了各种实时通信技术和协议,RTC是Real-Time Communication(实时通信)的缩写。它是一种技术和协议集合,用于在用户之间传输数据和媒体,实现实时的音频、视频和数据通信。

        WebRTC 则是 Google 基于 RTC 协议实现的一个开源项目,WebRTC是一个免费的开放项目,它通过简单的API为浏览器和移动应用程序提供实 时通信(RTC)功能。

RTC 有一个非常重要的特性,它是一个支持点对点直接传输的 P2P 协议;P2P在下面会介绍

webrtc官网   https://webrtc.org

1.2:WebRTC前景和应用

WebRTC(Web Real-Time Communication)的确以“web”命名,但其设计并不受限于传统的互联网浏览器环境。实际上,无论终端运行环境是浏览器、桌面应用、移动设备(如Android或iOS)还是IoT设备,只要满足IP连接可达和符合WebRTC规范的条件,这些设备都可以进行互通。

这一特性极大地扩展了WebRTC的应用范围,释放了大量智能终端以及运行在这些终端上的应用程序的实时通信能力。以下是WebRTC适用的主要应用领域:

  1. 在线教育: 教育机构可以利用WebRTC实现远程教学和学习,包括实时的视频和音频教学内容传输,互动问答和屏幕共享等功能。

  2. 视频会议: 企业和团队可以通过WebRTC搭建高效的视频会议系统,实现多方实时视频通话、协作编辑和虚拟会议室等功能,提升远程工作的效率。

  3. 视频社交: 社交平台和应用可以利用WebRTC提供实时视频聊天和直播功能,增强用户之间的互动和社交体验。

  4. 远程协助和支持: 客户服务和技术支持可以通过WebRTC提供远程协助和问题解决,包括远程控制、共享文档和实时注释等。

  5. 远程操控: IoT设备和工业控制系统可以通过WebRTC实现远程监控和操控,包括设备状态的实时显示和远程操作指令的传输。

综上,WebRTC的跨平台和广泛适用性使其在实时交互性要求较高的各种应用场景中都有广泛的应用前景。通过其开放的标准和协议,WebRTC不仅促进了多种设备和应用之间的互通,还为创新的实时通信应用提供了丰富的技术支持

2:WebRTC通话原理

        假如在保证两个可以正常联网 且(具备摄像头/麦克风多媒体设备的)正常的两个浏览器,如何实现互通呢?

主要分为两个部分,第一个部分 是媒体协商 ,另一个是网络协商 

2.1:媒体协商

        例如:当两个对象 A和B存在多种编码格式,例如上面图示,当A邀请B时,A会将自己的能力传递给B,然后B得到A的能力后,选择与A共有的能力,比如H264视频编码能力,然后传递给A,表示你的能力中,我符合H264,然后A得到信息后,便会也采用H264这个能力与B进行交互,这个过程就是媒体协商,这个只是一个示例,当然不止这个视频编码能力的协商交互,还包括音频能力、自己的媒体信息等其他信息交互。

        这个过程则是使用专门的协议,称为Session Description Protocol (SDP),在WebRTC中,参 与视频通讯的双方必须先交换SDP信息,这样双方才能知道对方的能力是什么,而交换SDP的过程,也称为"媒体协商"

WebRtC中媒体协商,主要是指SDP交换。又比如WebRTC建立中的信令媒体协商逻辑大概如下:

  • 发起端创建 Offer

    • Amy(发起端)通过创建一个 SDP(Session Description Protocol)Offer 来描述她的本地媒体能力和网络信息。
    • Amy 调用 setLocalDescription 方法将这个 Offer 设置为本地描述,并将其保存起来。
  • Offer 通过信令服务器传送给接收端

    • Amy 将她的 Offer 信息通过信令服务器发送给接收端 Bob。
  • 接收端处理 Offer

    • Bob(接收端)收到来自 Amy 的 Offer 信息后,通过调用 setRemoteDescription 方法将这个 Offer 设置为远端描述,保存起来。
  • 接收端创建 Answer

    • Bob 基于收到的 Offer 信息,创建一个 SDP Answer 来描述他的本地媒体能力和网络信息。
    • Bob 调用 setLocalDescription 方法将这个 Answer 设置为本地描述,并将其保存起来。
  • Answer 通过信令服务器传送给呼叫端

    • Bob 将他的 Answer 信息通过信令服务器发送回给呼叫端 Amy。
  • 呼叫端处理 Answer

    • Amy 收到来自 Bob 的 Answer 信息后,通过调用 setRemoteDescription 方法将这个 Answer 设置为远端描述,保存起来。

其中:setLocalDescription、setRemoteDescription 都是WebRTC都是接口API.

而什么又是Offer、Answer呢?

在双方要建立点对点通信时,发起端发送的 SDP 消息称为 Offer,接收端发送的 SDP 消息称为 Answer

所以,offer 和 answer 本质就是存有 SDP 信息的对象,所以也会叫做 SDP Offer 和 SDP Answer。

简单的理解:WebRTC 的信令协商过程就像人们在交换名片一样。每个人都准备了自己的名片(Offer 或 Answer),并将它们递交给对方。同时,每个人也接收并保存了对方的名片,这样双方就可以在需要联系时,通过这些名片上的信息找到彼此,并建立起通信。这种理解就概括了 WebRTC 中信令协商的基本原理和过程

2.2:网络协商

     当媒体协商完成后,WebRTC 就开始建立网络连接,其过程称为 ICE(Interactive Connectivity Establishment)交互式连接建立。ICE 不是一种协议,整合了 STUNTURN 两种协议(用于 NAT 穿透)的框架。

注意:ICE 是在各端调用 setLocalDescription() 后就自动开始了,并且是多次尝试去网络连接。也就是收集 Candidate的过程。

   WebRtc中很重要的一个环节,便是网络协商(网络协商 包括了“打洞”,但不仅仅只是打洞),也就是打通两个浏览器端之间的网络。两者不是都可以访问网络吗?为什么还要 再次打通网络呢?

那是 因为理想的网络情况:是每个浏览器的电脑都是私有公网IP,可以直接进行点对点连接。

例如下图:

        但是实际上,随着入网的设备越来越多,IPV4的地址池慢慢见底,新接入互联网的设备很难再分配到单独公网的 IPv4 地址,为了解决这个问题,引入了一个叫 NAT(Network address translation)的协议;新接入的设备不再直接分配公网的 IPv4 地址,而是躲在 NAT 设备(路由器等)之后,NAT 会给后面的每一个设备都分配一个单独的内网地址,就像家庭 或者 公司网络中一般都是一个公网IP出口,然后其他设备都是躲在这个公网地址后的内网地址。

     

简单解释下:

 NATNAT(Network Address Translation,网络地址转换)是一种网络技术,用于解决专用网络内部设备与公共网络之间的连接问题。其主要功能是将内部网络(私有网络)中的IP地址转换为外部网络(公共网络)的IP地址,以便内部设备能够访问互联网或与外部设备进行通信,同时保护内部网络不被直接访问。

NAT墙的进一步了解 和P2P协议,参考连接:

深入浅出WebRTC传输协议icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/661166646

Candidate(候选者)Candidate(候选者)是WebRTC中用于描述设备可以使用的网络地址和传输协议的概念。在WebRTC建立对等连接的过程中,每个设备会收集自己的候选者信息,并交换给对方,以便在复杂的网络环境中找到可用的通信路径。简单的说 就是服务器的 IP 地址、端口号以及使用的传输协议。知道了这些信息,才能建立连接。而 Candidate 正是 WebRTC 用来描述它可以连接的远端的基本信息,因此 Candidate 是至少包括 IP 地址、端口号、协议的一个信息集合。

STUN:(Session Traversal Utilities for NAT,NAT会话穿越实用程序)是一种网络协议,旨在帮助设备位于NAT后面的客户端发现其真实的公网IP地址和端口号。它允许位于NAT(或多重 NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的 Internet端端口。说白了就是 帮打洞的机制叫 ICE,帮忙打洞的服务器叫 STUN 服务。STUN 服务器用于获取计算机的公网 IP 地址。

TURN(Traversal Using Relays around NAT)是一种网络协议和服务,是STUN的扩展,用于解决无法通过STUN直接建立连接的情况,也就是当STURN搞不定网络的时候,就摆烂了,开始换个思路走了,也就是搞不定我就直接使用 TURN服务直接代理转发了

TURN 服务器会作为中转,转发多媒体数据就意味着会消耗大量的带宽。

但是,ICE打洞连同网络时,我们只需要配置好 STURN和TURN对应的地址,然后调用函数就行了,WebRTC已经帮我们完成了工作。

2.3:信令服务器

现在客户端都有媒体信息和网络信息 ,但是要去转发交换,现在则需要一个信令服务器(Signal server)转发对端的媒体信息和网络信息。

信令服务器在WebRTC中充当中介和调度者的角色,它不传输实际的媒体数据(音视频流),而是传递连接所需的控制信息和元数据。

作为中间人帮助建立连接,主要负责:

1:信令的处理,如媒体协商消息的相互转发传递

2:管理房间信息。比如房间进出、人员信息变化、状态连接变化等。所以也叫信令服务器也叫房间服务器。

下一篇继续,下一篇介绍环境搭建

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

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

相关文章

排序算法(4)之快速排序(2)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 排序算法(4)之快速排序(2) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评论区交流讨论💌 目…

剧本杀小程序搭建,为商家带来新的收益方向

近几年,剧本杀游戏成为了游戏市场的一匹黑马,受到了不少年轻玩家的欢迎。随着信息技术的快速发展,传统的剧本杀门店已经无法满足游戏玩家日益增长的需求,因此,剧本杀市场开始向线上模式发展,实现行业数字化…

linux中list的基本用法

内核链表 1 list_head 结构 为了使用链表机制&#xff0c;驱动程序需要包含<linux/types.h>头文件&#xff0c;该文件定义了如下结构体实现双向链&#xff1a; struct list_head {struct list_head *next, *prev; };2 链表的初始化 2.1 链表宏定义和初始化 可使用以…

汽车免拆诊断案例 | 卡罗拉急加速抖动故障排除

车型信息 2017年改款卡罗拉&#xff0c;排量1.2T&#xff0c;行驶里程48800公里。 故障现象 车辆不管在什么状态下&#xff0c;只要是平缓加速&#xff0c;都不会有抖动。车辆静止时&#xff0c;急加速时&#xff0c;也不会有抖动。但是车速达40公里/小时以上&#xff0c;急加…

【python基础】基本数据类型

文章目录 一. Python基本数据类型1. 整数1.1. python的四种进制1.2. 数中的下划线 2. 浮点数3. 复数4. 布尔型5. 运算符5.1. 算术运算符5.2. 比较运算符5.3. 逻辑运算符5.4 运算符优先级 6. 常量 二. 注释三. Python之禅 一. Python基本数据类型 1. 整数 无长度限制&#xff1…

PWM再理解(1)

前言 昨天过于劳累&#xff0c;十点睡觉&#xff0c;本来想梳理一下PWM&#xff0c;今天补上。 PWM内涵 PWM全称&#xff1a;Pulse Width Modulation&#xff0c;也就是脉宽调制的意思&#xff0c;字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…

怎样优化 PostgreSQL 中对复杂的日期时间格式转换和时区处理?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的日期时间格式转换和时区处理&#xff1f; 怎样优化 PostgreSQL 中对复…

Python | Leetcode Python题解之第257题二叉树的所有路径

题目&#xff1a; 题解&#xff1a; class Solution:def binaryTreePaths(self, root: TreeNode) -> List[str]:paths list()if not root:return pathsnode_queue collections.deque([root])path_queue collections.deque([str(root.val)])while node_queue:node node_…

2024年06月CCF-GESP编程能力等级认证C++编程八级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 GESP活动期间&#xff0c;举办方从获胜者ABCDE五个人中选出三个人排成一队…

NLP教程:1 词袋模型和TFIDF模型

文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型&#xff1a; 词集模型&#xff1a;单词构成的集合&#xff0c;集合自然每个元素都只有一个&#xff0c;也即词集中的每个单词都只有一个。 词袋模型&#xff1a;在词集的基础上如果一个单词…

上海理工大学24计算机考研考情分析!初复试分值比55:45,复试逆袭人数不算多!

上海理工大学&#xff08;University of Shanghai for Science and Technology&#xff09;&#xff0c;位于上海市&#xff0c;是一所以工学为主&#xff0c;工学、理学、经济学、管理学、文学、法学、艺术学等多学科协调发展的应用研究型大学&#xff1b;是上海市属重点建设大…

Linux系统及常用指令

目录 1、什么是Linux系统 2、为什么要用Linux系统 3、Linux系统的种类 4、如何安装Linux系统 5、常见的适配器种类 6、学习第一个Linux指令 7、安装ssh客户端软件 8、Linux系统的目录结构 9、Linux的常用命令 9.1 目录切换命令 9.2 查看目录下的内容 9.3 查看当前…

vue项目build以后整合到springboot项目里面---------gxl

很多时候我们需要用到vue的组件&#xff0c;但是全栈的背景下懒得去搞前后端分离&#xff0c;很多权限校验后台都写好了&#xff0c;没必要再去做接口或者前端写一遍了&#xff0c;因此我们需要把打包后的项目整合到项目里面。 整合也很简单&#xff0c;照常vue项目开发&#…

UE4-蓝图(可视化编程)学习

一.开关门交互实现 1.需要用到的模板和内容包 2.给门添加碰撞 进入第三人称模板场景&#xff0c;找到门的模型&#xff0c;并将门的模型添加到我们的场景中&#xff1a; 此时我们运行游戏&#xff0c;会发现我们的角色可以穿过我们门的模型&#xff0c;说明我们没有给门添加碰…

水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景

目录 引言 一、智慧水利的核心要素 1. 物联网技术 2. 大数据与云计算 3. 人工智能与机器学习 4. 移动互联网与GIS技术 5. 标准化与信息安全 二、智慧水利的优势 1. 提高水资源利用效率 2. 增强水灾害防御能力 3. 提升水环境治理水平 4. 促进水利服务智能化 三、展望…

Grafana :利用Explore方式实现多条件查询

背景 日志统一推送到Grafana上管理。所以&#xff0c;有了在Grafana上进行日志搜索的需求&#xff0c;而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤&#xff1a; 在主页搜索框中输入“Explore” 进入这个界面…

Elasticsearch:评估搜索相关性 - 第 1 部分

作者&#xff1a;来自 Elastic Thanos Papaoikonomou, Thomas Veasey 这是一系列博客文章中的第一篇&#xff0c;讨论如何在更好地理解 BEIR 基准的背景下考虑评估你自己的搜索系统。我们将介绍具体的技巧和技术&#xff0c;以便在更好地理解 BEIR 的背景下改进你的搜索评估流程…

静态网站怎么更新数据

今天看到个问题 我不是行业从业者&#xff0c;但目前遇到一个问题 我公司网站为纯静态&#xff0c;除了直接从html里修改文字外能不能这样 建立一个xml或者txt文档&#xff0c;其中有很多信息&#xff0c;例如网站名称&#xff0c;电话&#xff0c;备案号等&#xff0c;一行一行…

Java 网络编程(TCP编程 和 UDP编程)

1. Java 网络编程&#xff08;TCP编程 和 UDP编程&#xff09; 文章目录 1. Java 网络编程&#xff08;TCP编程 和 UDP编程&#xff09;2. 网络编程的概念3. IP 地址3.1 IP地址相关的&#xff1a;域名与DNS 4. 端口号&#xff08;port&#xff09;5. 通信协议5.1 通信协议相关的…

40.简易频率计(基于等精度测量法)(3)

&#xff08;1&#xff09;BCD8421码&#xff1a;十进制数字转换成BCD8421码的方法 补零&#xff1a;你需要显示多少位数字&#xff0c;就在前面补上四倍的位宽。比如你要显示一个十进制8位的数字&#xff0c;就在前面补上8*432个零。判断&#xff1a;判断补零部分显示的十进制…