webRTC实现一对一通话视频流程
WebRTC 需要一个 信令服务器(使用 WebSocket、Socket.io 或 WebRTC SDP 交换),用于两端互相交换连接信息(SDP、ICE)。
具体流程
1. 获取本地音视频流
- 设备 A 和 B 通过
getUserMedia()
获取摄像头和麦克风的音视频流。 - 显示本地视频流。
2. 创建 PeerConnection
- A 和 B 各自创建
RTCPeerConnection
实例。 - 将本地音视频流添加到
RTCPeerConnection
。
3. 交换 SDP(信令过程)(媒体协商)
- A 创建 Offer:
- A 生成 SDP Offer(包含音视频编码信息)。
- A 通过 信令服务器 发送 Offer 给 B。
- B 处理 Offer 并创建 Answer:
- B 收到 Offer 并设置为远端描述。
- B 生成 SDP Answer 并通过 信令服务器 发送给 A。
- A 处理 Answer:
- A 收到 Answer 并设置为远端描述。
4. 交换 ICE 候选(用于 NAT 穿透)(网络协商)
- A 和 B 监听
onicecandidate
事件,获取 ICE 候选信息。 - 通过 信令服务器 互相交换 ICE 候选信息。
- A 和 B 分别将对方的 ICE 候选信息添加到
RTCPeerConnection
,尝试建立 P2P 连接。
5. 建立 P2P 连接并传输音视频
- A 和 B 成功建立 WebRTC 连接。
- B 的
ontrack
事件触发,接收 A 的音视频流并显示。 - A 的
ontrack
事件触发,接收 B 的音视频流并显示。
6. 关闭连接(可选)
- A 或 B 关闭连接时,调用
peerConnection.close()
释放资源。 - 关闭摄像头和麦克风,断开 WebSocket 连接(如果有)。
补充:
1、信令协议设计