浅谈WebRTC

WebRTC是一个用于网页浏览器实时通信的API,主要包括本地媒体流的采集、STUN/TURN服务器、信令服务器和P2P连接。本文详细介绍了如何通过getUserMedia获取本地媒体流,以及STUN和TURN在NAT穿透中的作用。此外,还阐述了信令服务器在传输SDP和ICE信息中的角色,以及peerConnection如何实现端到端的P2P连接。
摘要由CSDN通过智能技术生成

浅谈WebRTC

什么是webRTC

维基百科是这样定义的:WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。简单来说就是网页用来音视频通话的。

完成音视频需要4个模块:

本地媒体流的采集

getUserMedia

使用navigator.mediaDevices.getUserMedia( constraints );获取本地的媒体流。constraints指定了请求的媒体类型和参数

属性含义
width视频宽
height视频高
facingMode(user,environment)镜像模式
aspectRatio比例
frameRate帧率
resizeMode大小模式

像width/height等可以用普通的关键字也可以用ideal,min,max,exact修饰,其中exact表示的是很确认的即一定意思。

STUN/TURN 服务器

ICE集成了多种NAT(网络地址转化)穿越技术比如STUN、TURN。

在介绍STUN/TURN之前先说下NAT

NAT常常部署在私网到公网的路由出口,死亡设备通过NAT将内网转化为公网加入互联网

未命名文件 (7)

STUN允许唯一NAT的客户端找出自己的公网地址。

STUN是C/S模式的协议,客户端发送STUN请求,STUN服务响应告知由NAT分配给主机的IP地址和端口号。所以就需要先在公网上架设一台STUN服务器,像STUN服务器发送请求就能拿到公网IP

TURN是一种数据传输协议。允许通过TCP或UDP方式穿透NAT或防火墙。

STUN和TRURN都是通过公网IP地址达到NAT穿透

信令服务器

因为WebRTC的SDP和和ICE要通过服务器来传到另一个客户端上,因为SDP和ICE这些东西我们将他叫做信令,所以传输信令的服务器我们就将其称作是信令服务器了,一般利用WebSocket的实时通信能力搭建信令服务器。

SDP(Session Description Protocol)会话描述协议:包括浏览器所支持的编码格式以及ICE代理、MediaStreamTrack等信息

SPD协议结构 : <type> = <value>

端与端之间P2P连接

创建了本地的媒体流怎么把本地的媒体流和另一个客户端上的媒体流连接起来呢?

所以WebRTC的灵魂就是这个了peerConnection。记住了P2P全靠它

pc = new RTCPeerConnection(pcConfig),好了有pc了,怎么连接呢?

分两步:

  1. 发送端先调用createOffer创建(SDP Offer)
  2. 通过setLocalDescription将(SDP Offer)加入到pc中:将会话信息传递到CIE曾

addIceCandidate添加ICE代理

其实我这里大概写了一下创建P2P信息的基本流程,但是写的不清不楚,所以我先总结一下到了最后再详细的写一下创建链接的步骤。

总体来说:A端将自己的candidate offer 存到了B端的PC中,B端也将自己的candidate,answer存到了A端的PC中,交换完成之后AB中都有了双方SDP,这样他们可以选择他们相同的编码等,收集的ICE完成连通性检测后,P2P链接就建立成功了。

P2P建立链接过程

  1. AB 创建本地媒体流 (假设 A 是发送方,B 是接收方,客户端简称为 C 端,服务端简称为 S)

  2. AB peer = new RTCPeerConnection

  3. 监听 peer 的事件

  4. onicecandidate 如果本地代理 SDP Offer 并调用后,将 candidate 发送给对方

  5. onaddstream 如果有视频流就拿到视频流

  6. 将本地视频流添加到 peer 中

  7. A 创建 offerA 并加入到 peerA 里

  8. AC setLocalDescription 后会触发 onicecandidate

  9. AC 触发 onicecandidate S 就会收到来自 AC 的 candidate

  10. S 将 AC 的 candidate 转发到 BC, BC 将 candidate 存入到 peerB 中

  11. AC 将 OfferA 发送给 BC

  12. BC 接收到 offerA 后,将 offerA 存入到 peerB 中

上面的过程后 AB 将会建立好连接,然后 A B 监听的 onaddstream 事件就会有 stream 流入

博客同步: www.tianhw.tk

参考文章[浅聊WebRTC视频通话 - 掘金 (juejin.cn)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值