`

WebRTC,音视频会议底层支撑技术解读

阅读更多

WebRTC 是 Web Real-Time Communication 的缩写,是谷歌在 2011 年推出的一种技术,可以实现跨网络和本地浏览器的实时音频、视频和数据传输。

它的使命是为浏览器、移动平台和物联网设备开发构建丰富的、高质量的RTC应用,并允许它们都通过一套通用的协议进行通信。


WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题,在本文中,我们将重点讨以下问题。

  1. 为什么Web RTC 如此受欢迎?
  2. 在P2P连接过程中会发生什么
    1. 信号传递
    2. NATs和ICE
    3. STUN & TURN服务器
    4. VP9视频编解码器
  3. WebRTC APIs
  4. 安全

 

为什么Web RTC 如此受欢迎?

  1. 开放源代码 它为浏览器提供了端到端的通信,并且很容易使用。
  2. 速度提升 不需要通过服务器进行路由,它减少了延迟和带宽消耗。直接通信提高了数据传输&文件共享的速度。
  3. 不需要第三方应用程序 不需要额外的软件、插件或服务器持续参与(仅在初始的时候需要)。可以轻松嵌入到任何网站中,就可以连接互联网上的Peer。
  4. 易于实现 使用P2P(点对点)连接更加容易。所有的功能都可以通过客户端完成。开发者只需要下载一个与WebRTC兼容的浏览器。
  5. 兼容性 支持大多数流行的浏览器。Microsoft Edge、Google Chrome、Mozilla Firefox、Safari、Safari、Opera、Vivaldi。支持Android、Chrome OS、Firefox OS、黑莓10、iOS、Tizen。
  6. 提供跨多种浏览器的安全连接 所有的WebRTC组件都必须进行加密。由于它不是一个插件,所以它运行在浏览器的沙盒内,不需要创建一个新的进程,这样就不会有任何恶意软件进入用户操作系统。无需跟踪更新。它会随着浏览器版本的自动更新。

在P2P连接期间会发生什么?

要连接两个浏览器,Web RTC需要执行五个步骤来建立P2P连接。

  1. 信号处理,以去除音频或视频中的环境噪声。
  2. 编解码器处理,以压缩和解压音频或视频。
  3. 通过防火墙、(NAT)和中继器建立从一个Peer 到另一个Peer的路由,以创建一个ICE(交互式链接建立)。
  4. 用户数据在进行连接传输前都会进行加密。
  5. 管理带宽,给每个Peer的带宽不同

信号传递

浏览器中的P2P连接由服务器建立,以确保所有Peer同意建立会话。

Peer之间共享会话密钥、错误信息、媒体元数据、编解码器、带宽、公共IP地址和端口等信息以创建连接。
服务器向两个Peer发出信号,以确定使用什么媒体格式以及每个Peer要向对方发送什么。

网络地址转换(NAT)和ICE

NATs将家庭路由器等设备上的私有IP地址转换为公网IP地址。防火墙和NATs通过阻止特定的协议或端口来减慢这一过程。WebRTC使用的解决方案是ICE框架。

ICE通过并行尝试所有连接并选择最有效的路径,在互联网上建立P2P连接。有两种类型的连接可选 STUN & TURN

STUN服务器

它首先连接到STUN(Session Traversal Utilities for NAT)服务器,获得直接连接。

STUN服务器为请求者提供了公网IP地址,以便与他人进行通信。其目的是帮助请求者回答 "我的IP地址是啥 "这个问题。

STUN服务器如何工作

要建立与其他Peer的连接,需要终端知道自己的公网IP才能与他人共享。

  1. 当一个Peer(Calvin)在NAT/防火墙后面时,它只能识别它的私有IP地址,而另一个Peer(Elana)由于防火墙的安全性,无法连接到本地IP。
  2. 这个Peer会向STUN服务器请求,获取它的公网IP地址和一种可用NAT类型。
  3. 另一个Peer(Elana)可以使用STUN服务器给定的公网IP地址尝试进行连接。
  4. 如果成功,数据将通过点对点网络传输,而不需要第三方或其他服务器。
  5. 为了安全起见,所有STUN服务器将被丢弃并等待下一次查询。


限制 - 对称NAT

但是,上述情况有时可能会失败,IP地址和端口会发生变化。
这种情况称为 "对称NAT",STUN服务器的公网IP地址没有足够的能力在这里建立连接,因为端口也需要转换。

有些路由器使用对称NAT,是为了使终端设备更加安全,或者说避免很多陌生人连到你的设备上。对称NAT不仅可以将IP地址从私有地址转换成公共地址,还可以转换端口。

换句话说,路由器只会接受用户已经有过的连接。因此,另一种确保两个Peer之间连接的解决方案是通过TURN服务器。

为什么STUN服务器如此有用

作为一种协议,STUN具有超快、轻量的特点。它可以在很短的时间内将数据直接传送给对方。STUN有利于加快连接速度,更快地获取结果。

当用户使用LAN局域网传输数据时,场景类似,比使用Wi-Fi传输更快。最重要的是,可以直接在两个Peer之间传输数据。

TURN 服务器

TURN(Traversal Using Relays around NAT)服务器作为中继服务器,以防P2P连接中断。当STUN服务器用于建立连接时,TURN服务器在整个连接过程中保持活跃。

TURN服务器在WebRTC Peer之间不断中继数据。这就是为什么用 "中继 "一词来定义TURN。

TURN 服务器如何工作

这个中继服务器是在STUN服务器出现故障时用来中继流量的,同时也具有STUN的功能。

TURN服务器是一个内置传输功能的STUN服务器。更具体地说,TURN是用来中继Peer之间的音视频/数据流,而不是信令数据。

  • 按照上文STUN服务器的步骤运行
  • 如果STUN失败,终端用户会与TURN服务器建立连接,通知所有Peer向服务器发送数据,服务器负责向第一个终端用户传输数据。

为什么总是先使用STUN服务器,主要原因是TURN服务器成本太高,如果在线传输高清视频的话,会消耗大量带宽。

VP9视频编解码器

为什么很多人开始使用WebRTC,其中一个主要原因就是因为视频。随着视频直播越来越成为主流,视频质量的要求也越来越高,这就要求数据传输的速度要快,或者数据包的大小要小,才能方便传输速度高。

VP9视频编解码器用于对音频或视频进行压缩和解压。音视频数据压缩后大大减小体积,因此VP9可以帮助流媒体视频更快传输。Safari 12.1(通过支持VP8)可以与其他Peer进行在线实时视频。

VP9是在VP8的基础上改进而来的,是谷歌旗下的由On2科技公司创建的视频压缩格式。主要功能是隐藏丢包和清理嘈杂的图像,以及多平台的采集和播放功能。

通过VP9,用户可以使用WebRTC传输720p视频,而不会出现丢包或延迟。同时,它还可以在同样的带宽下支持1080p视频通话,并帮助优化连接和数据使用,避免带宽成本过于高昂。

JS APIs

有三个主要的Javascript API可以处理音频捕获、视频会议和数据传输。

MediaStream

使用用户的摄像头和麦克风来获取和传输音频和视频。使用这个API可以让你获得麦克风和网络摄像头等设备的访问权限。

当开发人员将WebRTC集成到他们的网站中时,他们可以对他们想要的音频和视频流的参数进行设置,比如帧率、视频帧的大小、分辨率等。

这个API是作为HTML 5的一部分提供的,而其他两个API是专门为WebRTC提供的。

RTCPeerConnection

将采集到的音视频流实时发送至另一个WebRTC Peer。使用该API,用户可以将getUserMedia捕获的音频和视频传输给其他Peer。

该API具有连接到远程Peer,维护和监控连接,并在完成后关闭连接等功能。

RTCDataChannel

传输任意数据。每个数据通道都与一个RTCPeerConnection相关联。内置安全(DTLS)和拥塞控制。

安全

在实时通信的数据传输过程中可能会产生很多安全风险。因此,加密是WebRTC的强制性功能,并在所有组件上强制执行。

WebRTC使用两种标准加密协议。

数据报传输层安全协议(DTLS)

  • 一种建立在浏览器中的标准化协议。它用于加密数据流。它基于传输层协议(TLP)。
  • 保留了传输语义,DTLS使用用户数据协议(UDP)。
  • 它是安全套接字层(SSL)的扩展;任何SSL协议都可以用来保护WebRTC数据的安全,允许端到端加密。

安全实时传输协议(SRTP)

  • 用于加密媒体流。
  • 它是实时传输协议(RTP)的扩展,RTP没有任何内置的安全机制。
  • 在RTP的基础上增加了保护、完整性检查和消息认证。
  • 缺点是 虽然它为RTP数据包提供了加密,但它并没有对报头进行加密。

 

确保2个Peer之间连接安全的步骤

  1. 启动信令过程在两个Peer之间交换元数据。
  2. 执行ICE检查,ICE在双方之间建立通道。
  3. 进行DTLS握手。如果有多媒体传输,SRTP使用DTLS握手步骤中导出的密钥。
  4. 所有Peer都有安全通道。
  5. Peer之间交换密钥。

 

 

from :https://zhuanlan.zhihu.com/p/158465843

分享到:
评论

相关推荐

    《WebRTC音视频实时互动技术》大纲

    《WebRTC音视频实时互动技术》大纲覆盖了WebRTC的核心技术和实践应用,旨在帮助读者深入理解这一实时通信技术。以下是对大纲中重要知识点的详细解释: 1. 音视频服务质量: - 带宽管理:为了确保高质量的音视频...

    基于webrtc的视频会议系统源码.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设...基于webrtc的视频会议系统源码.zip基于webrtc的视频会议系统源码.zip

    python期末大作业-基于WebRTC的视频会议系统.zip

    python期末大作业-基于WebRTC的视频会议系统。已经通过的高分项目。python期末大作业-基于WebRTC的视频会议系统。已经通过的高分项目。python期末大作业-基于WebRTC的视频会议系统。已经通过的高分项目。python期末...

    基于WebRTC的视频会议系统的设计与实现_王昕.caj

    本文在分析WebRTC框架之后,对其中的关键技术进行深入分析,主要包括信令、 NAT技术、STUN、TURN、ICE协议。其次对系统进行需求分析,...客户端包括用户模块、会议室模块、音视频管理模块。

    GO语言基于WebRTC的视频会议系统源码+数据库.zip

    GO语言基于WebRTC的视频会议系统源码+数据库.zip基于WebRTC的视频会议系统源码+数据库.zip基于WebRTC的视频会议系统源码+数据库.zip基于WebRTC的视频会议系统源码+数据库.zip基于WebRTC的视频会议系统源码+数据库....

    基于python的毕业设计WebRTC的视频会议系统.zip

    基于python的毕业设计WebRTC的视频会议系统.zip基于python的毕业设计WebRTC的视频会议系统.zip基于python的毕业设计WebRTC的视频会议系统.zip基于python的毕业设计WebRTC的视频会议系统.zip基于python的毕业设计...

    WebRtc音视频通话demo

    WebRTC(Web Real-Time...总之,“WebRtc音视频通话demo”为Android开发者提供了一个快速实现音视频通话功能的基础框架,通过学习和理解这个示例,开发者可以更深入地掌握WebRTC技术,进而构建出更多复杂和高效的应用。

    基于webrtc的视频会议(源码+项目说明).zip

    基于webrtc的视频会议(源码+项目说明).zip已经通过的高分项目。 基于webrtc的视频会议(源码+项目说明).zip已经通过的高分项目。基于webrtc的视频会议(源码+项目说明).zip已经通过的高分项目。基于webrtc的...

    python期末大作业-基于WebRTC的视频会议系统源码(高分项目)

    python期末大作业-基于WebRTC的视频会议系统源码(高分项目),python期末大作业-基于WebRTC的视频会议系统源码(高分项目)python期末大作业-基于WebRTC的视频会议系统源码(高分项目)python期末大作业-基于WebRTC...

    getaroom, 使用SkylinkJS的简单WebRTC音频/视频会议演示.zip

    getaroom, 使用SkylinkJS的简单WebRTC音频/视频会议演示 getaroom.io非常漂亮的交叉设备和 跨浏览器 WebRTC音频/视频会议演示 SkylinkJS 使用反应。 在 http://getaroom.io 尝试一下。演示查询参数参数描述mcu设置为...

    基于Vue、fabric、webRTC开发的音视频会议画板(源码+项目说明).zip

    基于Vue、fabric、webRTC开发的音视频会议画板(源码+项目说明).zip基于Vue、fabric、webRTC开发的音视频会议画板(源码+项目说明).zip基于Vue、fabric、webRTC开发的音视频会议画板(源码+项目说明).zip基于Vue...

    WebRTC音视频通话环境搭建1

    WebRTC(Web Real-Time Communication)是一种实时通信技术,允许浏览器和移动应用程序进行音视频通话、屏幕共享、文件传输等实时通信。下面是WebRTC音视频通话环境搭建的详细步骤和相关知识点: WebRTC概述 ...

    WebRTC音视频数据采集webserver.rar

    WebRTC(Web Real-Time Communication)是一种开放的网络通信框架,专为实时通信设计,支持在浏览器之间进行音视频数据的直接传输,无需借助任何插件或第三方软件。它由谷歌发起,现已成为W3C标准的一部分,广泛应用...

    基于webrtc的视频会议系统期末大作业源码

    基于webrtc的视频会议系统期末大作业源码,本项目是一套成熟的大作业项目系统,获取98分,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 基于webrtc的视频...

    WebRTC语音视频通话demo

    这个技术的核心在于提供音视频通信的基础设施,包括数据传输、音频处理、视频编码和解码以及网络传输协议等。在本“WebRTC语音视频通话demo”中,我们将探讨WebRTC如何实现网页端和移动端的语音和视频通话功能。 ...

    WebRTC:WebRTC音视频编解码技术.docx

    WebRTC:WebRTC音视频编解码技术.docx

    WebRTC语音引擎中NetEQ技术的研究

    WebRTC语音引擎中NetEQ技术的研究 找了好久可以下载的文档,辗转从caj类型转换为pdf。有需要的人学习。

    基于webrtc开发的多人视频会议

    1. **WebRTC核心技术**:WebRTC包括了音视频采集、编码、传输、解码和渲染等一系列环节,通过MediaStream API获取本地媒体流,RTCPeerConnection API建立并维护 Peer-to-Peer 连接,DataChannel API则用于传输非媒体...

    WEBRTC多人视频通话

    WEBRTC多人视频通话,可以支持多人视频通话,目前是三人的,因为视频通话的信令用到的是websocket,所以代码里面也放入了单独websocket通信的demo,解释也比较详细了,原来有一个列子是两人的,后面改成三人的,多人...

    基于webRTC的简单视频会议app源码+项目说明.zip

    基于webRTC的简单视频会议app源码+项目说明.zip基于webRTC的简单视频会议app源码+项目说明.zip基于webRTC的简单视频会议app源码+项目说明.zip基于webRTC的简单视频会议app源码+项目说明.zip基于webRTC的简单视频会议...

Global site tag (gtag.js) - Google Analytics