因直播了解webRTC

3,382 阅读5分钟

处在在线教育公司,了解webRTC是必须的技能

最近买了课程《从0打造音视频直播系统》,有时间会逐渐输出关于直播的知识点

在开发过程中,经常听到信令,开始以为信令是公司自定义的名,后来才知道确实有信令服务器 Signal Server的说法,它是为了拿到了双方的媒体信息(SDP)和网络信息(Candidate)后,作为中间商转发交换。

此篇文章很粗糙没梳理好,但是已经发出去了,后面会重新整理

优势:

  • 跨平台(Web、Windows、MacOS、Linux、iOS、Android)
  • 实时传输
  • 音视频引擎
  • 免费、免插件、免安装
  • 主流浏览器支持
  • 强大的打洞能力

用途:

在线教育、在线医疗、音视频会议、即时通讯工具、直播、共享远程桌面、P2P网络加速、游戏(狼人杀、线上KTV)等。

WebRTC 处理过程图:

通讯原理

1. 媒体协商:让双方都可以找到共同支持的媒体能力

媒体协商所交换的数据就是 SDP,说是协议,其实 SDP 并不是一个真正的协议,它就是一种描述各端“能力”的数据格式。

会话描述协议SDP(Session Description Protocol)是一种通用的会话描述协议,主要用来描述多媒体会话,用途包括会话声明、会话邀请、会话初始化等。

WebRTC主要在连接建立阶段用到SDP,连接双方通过信令服务交换会话信息,包括音视频编解码器(codec)、主机候选地址、网络传输协议等。

SDP格式

<type>=<value>

其中:

  • <type>:大小写敏感的一个字符,代表特定的属性,比如v代表版本;
  • <value>:结构化文本,格式与属性类型有关,UTF8编码;
  • =两边不允许存在空格;
  • =*表示是可选的;
比如:
//协议版本号
v=0    
//会话发起者
o=alice 2890844526 2890844526 IN IP4 host.anywhere.com 
//会话名 
s=
//连接数据
c=IN IP4 host.anywhere.com
//协议版本号
t=0 0
//媒体描述
m=audio 49170 RTP/AVP 0
//附加属性
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
// 会话的起始时间,都为0表示没有限制
t=0 0

2. 网络协商

ICE Interactive Connectivity Establishment 互动式连接建立

想要建立连接,我们要需要拿到双方 IP 和端口的信息,在当下复杂的网络环境下,ICE 统一了各种 NAT 穿越技术(STUN、TURN),可以让客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。

NAT 随处可见,而它的出现主要是出于两个目的:

  1. 是解决 IPv4 地址不够用的问题。在 IPv6 短期内无法替换 IPv4 的情况下,如何能解决 IP 地址不够的问题呢?人们想到的办法是,让多台主机共用一个公网 IP 地址,然后在内部使用内网 IP 进行通信,这种方式大大减缓了 IPv4 地址不够用的问题。
  2. 是解决安全问题,也就是主机隐藏在内网,外面有 NAT 挡着,这样的话黑客就很难获取到该主机在公网的 IP 地址和端口,从而达到防护的作用。

NAT 基本上可以总结成 4 种类型:完全锥型、IP 限制锥型、端口限制锥型和对称型。

了解了 NAT 穿越的理论知识,就很容易理解 WebRTC 底层是如何进行音视频数据传输

3. 信令服务器

信令服务器可以实现一些 IM 功能,比如房间管理,用户进入、退出等。

RTCPeerConnection

RTCPeerConnection是在浏览器下使用 WebRTC 实现实时互动音视频系统中最核心的类,它代表一个由本地计算机到远端的 WebRTC 连接。该接口提供了创建、保持、监控及关闭连接的方法的实现。

使用的时候用上:Adapter.js

具体api参考:developer.mozilla.org/zh-CN/docs/…

多人音视频实时通话

SFU 是现在最流行的多人实时互动架构

上万人同时在线的直播系统

支持上万人同时在线的直播系统主要使用 CDN 技术,它是一种比较老的直播架构,使用的底层传输协议是 RTMP 和 HLS。

在线教育、音视频会议这类直播属于实时互动直播,主要考虑传输的实时性,因此一般使用 UDP 作为底层传输协议;

而娱乐直播对实时性要求不高,更多关注的是画面的质量、音视频是否卡顿等问题,所以一般采用 TCP 作为传输协议。我们称前者为实时互动直播,后者为传统直播。

RTMP,全称 Real Time Messaging Protocol ,即实时消息协议。但它实际上并不能做到真正的实时,一般情况最少都会有几秒到几十秒的延迟,底层是基于 TCP 协议的。

HLS,全称 HTTP Live Streaming,是苹果公司实现的基于 HTTP 的流媒体传输协议。它可以支持流媒体的直播和点播,主要应用在 iOS 系统和 HTML5 网页播放器中。

参考

zhuanlan.zhihu.com/p/75492311

ke.qq.com/course/2959…

time.geekbang.org/column/intr…

juejin.cn/post/688485…