webrtc初步了解

WebRTC搭建点对点实时音视频对话,起始需要保证完成两点:

1.媒体协商 ,了解彼此支持的媒体格式。参与视频通讯的双方必须先交换SDP信息,交换SDP的过程。

2.网络协商 ,了解彼此的网络环境,找到一条相互通讯的链路。

(1)获取外网IP地址映射;(2)通过信令服务器交换"网络信息"

网络术语:

媒体协商 sdp 了解彼此的编解码能力(支持的媒体格式)

网络协商 candidate 了解彼此的外网端口映射

实际网络环境中,双方都在不同的局域网内,不能直接点对点连接。需要利用协议来解决该问题。

WebRTC常用协议

STUN

STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC 5389定义。

作用:告知公网IP地址+端口

存在问题:STUN并不是每次都能成功的为需要NAT的通话设备分配IP地址的,P2P在传输媒体流时,使用的本地带宽,在多人视频通话的过程中,通话质量的好坏往往需要根据使用者本地的带宽确定。

TURN

TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。

如果终端在NAT之后,那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。

信令服务器

2个客户端协商媒体信息和网络信息,需要信令服务器来转发彼此的媒体信息(sdp)和网络信息(candidate )。

WebRTC APIs

  1. MediaStream ---  MediaStream用来表示一个媒体数据流(通过getUserMedia接口获取),允许你访问输入设备,如麦克风和 Web摄像机,该 API 允许从其中任意一个获取媒体流。
  2. RTCPeerConnection --- RTCPeerConnection 对象允许用户在两个浏览器之间直接通讯 ,你可以通过网络将捕获的音频和视频流实时发送到另一个 WebRTC 端点。使用这些 Api,你可以在本地机器和远程对等点之间创建连接。它提供了连接到远程对等点、维护和监视连接以及在不再需要连接时关闭连接的方法

一对一通话

时序图如下:

通话流程:

1.发起者(A端)和接收者(B端)都先连接到信令服务器(Signal Server)。

2.两端都创建PeerConnection,该对象允许用户在两个浏览器之间直接通讯。添加本地媒体数据流。

3.A端回调CreaterOffer函数从浏览器中获取SDP,利用SetLocalDescription函数设置到本地PeerConnection中。

4.A端先将SDP发送给信令服务器,信令服务器转发给B端。

5.B端利用SetRomoteDescription将接受到的SDP设置到自己的PeerConnection中。并产生SDP。

6.B端回调CreaterAnswer函数获取SDP,利用SetLocalDescription函数设置到本地PeerConnection中。

7.B端先将SDP发送给信令服务器,信令服务器转发给A端。完成媒体协商

8.A端 ICE(STUN+TURN集成协议),请求公网信息。STUN服务器回发Candidate(在PeerConnection内部完成)。

9.A端通过信令服务器转发ICE Candidate给B端。

10.B端调用Add ICE Candidate加到 PeerConnection,了解A端外网端口映射。

11.B端做类似A端8、9做法。

12.A端调用Add ICE Candidate加到 PeerConnection,了解B端外网端口映射。 完成网络协商

13.A、B两端的所有PeerConnection交叉尝试链接,联通后,完成P2P。

小结:

在一对一通话场景中,每个 Peer均创建有一个 PeerConnection 对象,由一方发送 Offer SDP,另一方应答AnswerSDP,最后双方交换 ICE Candidate 从而完成通话链路的建立。

相关推荐
平行云1 天前
国产GPU云渲染适配实战:驱动兼容、编码调优与多路并发
unity·ue5·webrtc·webgl·实时云渲染·云桌面·像素流送
隐擎fox2 天前
网络传输安全剖析:WebRTC 本地真实 IP 泄漏机制(STUN/TURN)与 Python 防护检测实战
网络·网络协议·tcp/ip·安全·webrtc
福大大架构师每日一题4 天前
mediamtx v1.21.0 发布:Media-over-QUIC、RTSP、HLS、WebRTC 与安全能力全面升级
安全·webrtc
脏脏a5 天前
Neko 自托管实战:WebRTC 远程浏览器、多用户权限与公网访问
webrtc
cuijiecheng20186 天前
从 6.49 秒到约 1.9 秒:RK3588上的WebRTC 实时流启动速度优化记录
webrtc
SendTomo7 天前
SendTomo 与 send.wang 全景对比评测与实战指南
网络·网络协议·tcp/ip·webrtc·p2p
java_logo7 天前
Docker 部署 SRS:轻松搭建实时音视频流媒体平台
docker·容器·webrtc·实时音视频·rtmp·http-flv·轩辕镜像
wjcroom8 天前
一个可以在线多人玩的五子棋开发与布署方法-WebRTC和WebSocket的测试方法
websocket·网络协议·webrtc
cuijiecheng201811 天前
RK3588 WebRTC 实时流卡顿优化:从视频桥接到 H.264 PTS 回退
音视频·webrtc·h.264
SendTomo13 天前
send.wang:基于浏览器WebRTC实现无客户端文件互传
网络·python·网络协议·webrtc·p2p