今天在学习AWS KVS(Kinesis Video Streams)服务时发现它对webrtc有一篇说明解释的很好,这里摘录并整理一份以供向它人介绍webrtc工作流程。
文章目录
1 webrtc术语
Signaling channel(信令通道)
一种资源,使应用程序可以通过交换信令消息来发现,建立,控制和终止对等连接。信令消息是两个应用程序相互交换以建立对等连接的元数据。该元数据包括本地媒体信息,例如媒体编解码器和编解码器参数,以及两个应用程序可能相互连接以进行实时流传输的可能的网络候选路径。
PS:信令通道通常由信令服务器提供(或信令服务)
Peer(对等节点)
接入同一webrtc房间(逻辑划分的管理单元)的进行实时双向流传输的任何设备或应用程序
Session Traversal Utilities for NAT (STUN)
一种协议,用于发现您的公共地址(公网IP)并确定路由器中可能阻止与对等方直接连接的任何限制条件。
PS:Stun服务由STUN服务器提供
Traversal Using Relays around NAT (TURN)
通过打开与TURN服务器的连接并通过该服务器中继所有信息来绕过对称NAT限制的服务器。
PS:当P2P链接建立失败,仍需要保证功能可用,这里就需要TURN服务器对所有数据进行中继。建立relay模式的链接
PS: TURN服务由TURN服务器提供
Session Description Protocol (SDP)
一种描述连接的多媒体内容的标准,例如分辨率,格式,编解码器,加密等,以便一旦数据传输,两个对等方就可以相互理解。
PS:描述终端信息的规范。
SDP Offer
发起建立会话链接的SDP消息(主动发送方),生成会话描述以创建或修改会话。它描述了所需媒体通信的各个方面。
PS:比如想要和一个对等节点建立链接。首先就得告诉对端,自身终端信息(分辨率,格式,编解码器,加密),而为了描述自身终端信息产生SDP 就被称为SDP offer
SDP Answer
answer SDP由响应者响应邀约者发送的offer SDP。Answer主要包含终端协商结果(answer端终端信息)。例如,如果offer中的所有音频和视频流都被接受。
Interactive Connectivity Establishment (ICE)
一个允许您的Web浏览器(webrtc终端)与对等方连接的框架。
ICE Candidate(Candidate)
一种能与对等方用来通信的一种方法(方式)。
2 STUN TURN ICE如何工作
让我们假设两个对等方A和B都使用WebRTC对等双向媒体流(例如,视频聊天应用程序)的情况。当A想要呼叫B时会怎样?
要连接到B的应用程序,A的应用程序必须生成SDP offer。SDP offer包含有关A的应用程序想要建立的会话的信息,包括要使用的编解码器,这是音频还是视频会话等。它还包含 ICE candidates,它们B应用程序用于尝试连接A应用程序需要用到的A的IP和port。
为了建立ICE候选者列表,A的应用程序向STUN服务器发出了一系列请求。服务器返回发起请求的公共IP地址和端口对。A的应用程序将每对添加到ICE候选列表中,换句话说,它收集ICE候选。一旦A的应用程序完成了ICE候选者的收集,它就可以返回SDP。
为了建立ICE candidates,A的应用程序向STUN服务器发出了一系列请求。服务器返回发起请求A的公网 IP地址和端口对。A的应用程序将每对IP及端口 添加到 ICE candidates中,换句话说,它收集ICE candidates。一旦A的应用程序完成了ICE候选者的收集,它就可以返回SDP。
接下来,A的应用程序必须通过这些应用程序进行通信的信令通道将SDP传递给B的应用程序。WebRTC标准未指定用于此交换的传输协议。它可以通过HTTPS,安全WebSocket或任何其他通信协议执行。
现在,B的应用程序必须生成一个SDP Answer。B的应用程序遵循上一步中使用的A步骤:收集ICE candidates等。然后B的应用程序需要将此SDP Answer通过信令服务器返回给A的应用程序。
在A和B交换了SDP之后,它们将执行一系列连接检查。每个应用程序中的ICE算法都从对方SDP中收到的列表中获取ICE candidates IP /端口对,并向其发送STUN请求。如果另一个应用程序返回了响应,则原始应用程序认为检查成功,并将该IP /端口对标记为有效的ICE候选者。
在对所有IP /端口对完成连接检查之后,应用程序进行协商并决定使用剩余的有效对之一。选择一对后,媒体开始在应用程序之间流动。(有效通道选择策略一般是host>p2p>releay)
如果任何一个应用程序都找不到通过连通性检查的IP /端口对,它们将向TURN服务器发出STUN请求以获取媒体中继地址。中继地址是一个公共IP地址和端口,用于转发与应用程序之间接收到的数据包并设置中继地址。然后将该中继地址添加到候选列表,并通过信令通道进行交换。
PS:实际上实现时,使用的是生成SDP和交换ICE candidates 可以是并行执行。即生成SDP并不需要与STUN服务器通信。ICE candidate 信息不用包含在SDP 中发送。这样可以提高建立链接的速度。不用等ICE candidate搜集完成后才进行信令通信。