webRTC学习笔记

-目录-

前言

在网络上传输数据,最原始的方式就是C-S通信。CS模式固然可靠,适合绝大部分场景。但是对于音视频尤其是及时音视频来说,CS模式需要服务器做中转延迟过高,而且服务器也没必要知道传输的数据流不需要承载这个负荷。

所以需要点对点直连,即p2p通信,直接连接收发双方。既然是通信,收发双方就需要知道对方的地址。通常来说二者通过ICE来交换地址。本机对外的IP如何获取?有以下几种方式:

  1. 在局域网里,大家的对外的IP都是本机读到的IP,可以方便的分享出去。
  2. 但是大多数设备都是不知道自己在互联网上的地址的,因为有NAT的存在,本机设备的IP地址被映射到公网的IP。设备需要使用STUN获取自己映射后的唯一地址。
  3. 尽管可以通过STUN获得公网地址,但是NAT是有4种类型的。特别的,对称NAT每次会根据本机IP、目标IP和目标端口生成一个公网IP和端口,因此外界无法确定本机设备的唯一地址。在这种情况下只能通过中继传输数据即TURN

实现以上二者知道对方地址的过程叫做ICE。ICE是一种方法而不是协议,ICE通过STUN或TURN收集双方信息,然后进行交换。收集信息的过程可能比较崎岖,但ICE的最终目的就是让二者能够通信。在获取通信方式的以上3种方法里,ICE会根据优先级1>2>3向双方提供信息,其中3就类似于类似于传统CS模式所以优先级最低。

以上获取对方IP地址进行连接只是第一步,接下来需要传输媒体信息(SDP),传输媒体信息使用SRTPRTCP,当然传输媒体信息前需要进行SDP协商以确认音视频信息。

大致流程如下

大致流程

详细流程如下

详细流程

ICE

交互式连接建立(Interactive Connectivity Establishment)

ICE做什么

  1. 收集Candidate信息
  2. 对Candidate Pair排序(用哪种效果最好,本地网用Host,然后外网是反射进行,最后是中继)
  3. 联通性检查,发送侦测包

ICE candidate

candidate是一个[协议-IP-端口-类型]四元组,例如

UDP-192.168.1.1-12123-host

candidate类型有:

RTP和RTCP

RTP

即时传输协议(Real-time Transport Protocol或简写RTP),是一个建立在UDP上的应用层协议。

其头部如下:

rtp头

其中,Timestamp和SSRC字段比较重要,Timestamp标志了这一帧的事件,用于一帧由多个包组成时的同步,SSRC标志了唯一源。

RTCP

实时传输控制协议(Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。RTCP并不传输媒体数据,只是用来传输统计数据。

RTCP位置

SRTP和SRTCP

安全实时传输协议(Secure Real-time Transport Protocol),是建立在DTLS上的RTP。

DTLS:

Data Transport Layer Security。UDP的TLS。

四次握手:hello->hello resp+认证信息->解析认证信息+加密套件->按照加密套件发送信息

image-20220729231328598

DTLS要解决的问题:

SRTP:

SRTP解决的问题:

SRTP

SRTP就是把RTP的payload进行加密。

STUN和TURN

什么是STUN

Session Traversal Utilities for NAT,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址。 这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。RTP协议是使用UDP分组在Internet上传输音频和/或视频数据的。 不幸的是,由于通信的两个末端往往位于NAT之后,因此用传统的方法是无法建立连接的。 这也就是STUN发挥作用的地方。STUN是一个建立在UDP上的应用层协议。

20字节头部+0个及其以上个Attribute。每个属性是一个TLV编码。

STUN头

字段 说明
前两位00 说明是新版本STUN
STUN Message Type 消息类型,2位用用于分类(不在同一位置 ),12位用于定义请求分类
Message Length 消息长度,不包括头
Magic Cookie 魔法数,说明是STUN消息而不是其他
Transaction ID 上下文,用于关联消息和请求

什么是TURN

TURN(全名Traversal Using Relay NAT),当NAT无法穿越时需要一个中转服务器,成为TURN服务器。

为什么要用STUN

通过STUN信息交换确认客户端身份。而不是P2P通信时获取外网地址

STUN定义的NAT类型

  1. Full Cone NAT 完全锥型NAT

    本机IP和Port映射到公网IP和Port

  2. Address Restricted Cone NAT 地址限制型NAT

    类似1,但是本机先向外网某个IP发过信息,这个IP才能发过来包,外网端口没有限制

  3. Port Restricted Cone NAT 端口限制型NAT

    比2更进一步,本机先向外网某个IP的某个Port发过信息,这个IP的这个Port才能发过来包,该IP的其他Port不能

  4. Symmetric NAT 对称NAT

    和3类似,但是向不同外网IP地址或不同Port发信息时,NAT映射的IP和Port都不一样。3至少能够让一个内网IP与外网IP绑定。而4完全的动态IP再也找不到互联网上的固定地址。

STUN工作原理

工作原理

SDP协商

Session Description Protocol,信息格式的描述标准类似于json。本机音视频和解码信息,通过信令服务器发送,让双方知晓。

SDP协商过程:

SDP协商过程

webRTC SDP组成:

webRTC协商

多人音视频架构

Mesh

互相1对1,但是人数多的时候对网络要求很大。

Mesh

Multipoint Conferencing Unit

节省带宽,混和视频信号对CPU消耗严重。相当于实时剪辑视频。

MCU

Selective Forwarding Unit

服务端直接转发流。对带宽要求高。

为了降低对带宽的要求,可以:

  1. 直接降低码流,降低分辨率
  2. SVC,分层(核心层拓展层边缘层)一层比一层清晰、

SFU

© 2019 - 2023 · YuYoung's Blog