拜伦的博客

Coder Byron

这里有关于iOS,机器学习的笔记心得,欢迎交流


WebRTC架构及原理

目录

架构

主体包含3个模块,音频引擎,视频引擎,传输层。最核心的在于传输层。

  • 音频引擎包含回声消除,降噪音频编解码等。音频采集和渲染层 可override自己实现
  • 视频引擎包含VP8,VP9,H264编解码,图形增强的算法。视频采集层 可override自己实现,不包含图像渲染层
  • 传输层包含P2P,STUN,TURN,ICE,RTP,RTSP等传输控制协议。网络IO层可override 自己实现

信令服务器

NAT穿越:

设备大多在网关背后,想要简历P2P连接就要穿过网关,连接到内网的设备,网关一般包含以下4种防火墙类型。

  • 完全锥形:网关只做简单的映射,最容易穿越
  • 地址限制锥形:对于主动访问外网的IP做记录,容易穿越
  • 端口限制锥形:对主动访问外网的IP和Port做记录,比上一个更严格
  • 对称型:内网与外网通信会建立一个IP和Port,不同的外网地址建立不同的IP和port,基本无法穿越。是否可用中继服务器的方式打洞

穿越原理

  • C1, C2向STUN发消息
  • 交换公网IP和Port
  • C1->C2, C2->C1。如果是对称型需要端口猜测

STUN:

目的就是获取设备的公网IP和Port然后互相交换


TURN:

目的是解决对称NAT无法穿越的问题,用来转发数据。 获取到双方地址后尝试P2P链接,如果链接失败,则使用数据转发


ICE:

包含了STUN, TURN的一整个解决方案框架,不断选择最优的链接通路,获取不同的candidate,尝试最优的链路。

  • 收集Candidata
  • 对Candidate Pair排序,筛选出最合适的候选者对,否则直接检查浪费时间
    • 一方收集到所有候选者后,通过信令传给对方
    • 另一方收到候选者后也做收集工作
    • 当双方拿到全部列表后,将候选者形成匹配对儿
  • 对Candidate Pair连通性检查
    • 对每个后选对进行发送,接收检查

***

Candidata

是一个地址,例如: …UDP…192.168.1.2 1816 type host等协议,地址,类型 类型包含3个:

  • 主机候选者, 本机网卡上所有地址和类型
  • 反射候选者,NAT穿越后的地址和类型, SUTN/TURN
  • 中继候选者, TURN服务开通后的地址和类型, TURN

SDP

Session Description Protocol , 是设备之间互通配置信息的协议

上图中是SDP基本内容, 其中有2个candidate, 一个是本机UDP,另一个是NAT穿越后的地址UDP

SDP规范包括2部分:

  • 会话层: 会话时间,名称等全局基本信息,多个媒体信息
  • 媒体层
    • 媒体格式:音频、视频、数据
    • 传输协议:TCP/UDP
    • 传输IP和Port
    • 媒体负载类型:VP8 VP9 h264. h265

m 媒体名称和地址, c 传输层信息, b 带宽信息 ,a 各种属性定义和对m的描述

WebRTC中的SDP包含5个部分:

  • 会话元
  • 网络描述
  • 流描述
  • 安全描述
  • 服务质量

连接流程图

简易版流程图

  • 与信令服务器建立连接,用于2端之间进行必要协商通信
  • 媒体协商 (SDP),选择双方合适的媒体类型
  • 连接协商 (Candidate),选择最合适的连接方式
  • 建立P2P连接,开始媒体交换 123

参考: 前端音视频WebRTC实时通讯的核心

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦