##后端
##前端
在WebRTC架构下,服务器和客户端(我们这里称为A和B)各自扮演不同的角色。下面我将按照之前提到的步骤,详细说明每一环节中服务器与客户端(A和B)的具体任务:
-
初始化:
- 客户端A和B:请求用户授权以访问音频和视频设备。
-
创建RTCPeerConnection实例:
- 客户端A和B:各自创建
RTCPeerConnection
实例来管理音视频的实时传输。
- 客户端A和B:各自创建
-
建立信令连接:
- 服务器:提供信令服务,用于在客户端A和B之间传递会话描述(SDP)和ICE候选信息。这通常是一个独立于WebRTC之外的组件,用于在客户端间传递控制信息。
- 客户端A和B:通过信令通道交换会话描述和ICE候选信息。
-
创建并发送Offer SDP:
- 客户端A:创建包含本地音视频能力的SDP offer并通过信令发送给客户端B。
- 服务器:转发客户端A的SDP offer到客户端B。
-
接收Offer SDP并创建Answer SDP:
- 客户端B:解析收到的SDP offer,创建并发送SDP answer通过信令回传给客户端A。
- 服务器:转发客户端B的SDP answer到客户端A。
-
设置远程描述:
- 客户端A和B:各自调用
setRemoteDescription()
方法设置对方的SDP描述信息。
- 客户端A和B:各自调用
-
ICE候选收集与交换:
- 客户端A和B:各自收集ICE候选,并通过信令通道发送给对方。
- 服务器:负责转发ICE候选信息。
-
ICE候选接收与添加:
- 客户端A和B:接收对方的ICE候选,并添加到各自的
RTCPeerConnection
中。
- 客户端A和B:接收对方的ICE候选,并添加到各自的
-
连接建立:
- 客户端A和B:使用ICE协议自动选择最佳连接路径,可能涉及STUN和TURN服务器(通常是第三方提供的服务)。
-
媒体流传输:
- 客户端A和B:一旦ICE完成媒体流的协商和建立,直接在客户端间传输音频和视频数据。
-
会话维护和关闭:
- 客户端A和B:在会话期间处理网络变化,如果任何一方决定终止会话,则调用
close()
方法来关闭RTCPeerConnection
。 - 服务器:不参与会话的维护或关闭过程,除非信令服务需要保持活动状态以应对重连或异常情况。
- 客户端A和B:在会话期间处理网络变化,如果任何一方决定终止会话,则调用
总结来说,服务器主要负责信令通道的建立和维护,即转发SDP描述和ICE候选信息。而客户端A和B则负责创建连接、协商媒体描述、建立媒体流传输,并且直接在它们之间进行媒体数据的交换。STUN和TURN服务器作为辅助组件,帮助解决NAT穿越问题,但它们并不存储媒体数据,仅提供网络穿透服务。