webrtc 入门第六章 WebRtc中使用的服务

webrtc 入门第六章 WebRtc中使用的服务

一、概述

WebRTC支持对等通信,但是它仍然需要服务器,以便客户端可以交换元数据以通过称为信令的过程协调通信,并应对网络地址转换器(NAT)和防火墙。本文向您展示如何构建信令服务,以及如何处理与STUN和TURN服务器的真实连接的问题。

二、信令服务
1、什么是信令

信令是协调通信的过程。为了使WebRTC应用程序能够建立呼叫,其客户需要交换以下信息:

  • 用于打开或关闭通信的会话控制消息
  • 错误讯息
  • 媒体元数据,例如编解码器,编解码器设置,带宽和媒体类型
  • 用于建立安全连接的关键数据
  • 网络数据,例如外界看到的主机的IP地址和端口该信令传递过程需要一种方便客户端之间来回传递消息的方式。

为了避免冗余并最大程度地与现有技术兼容,WebRTC标准未指定信令方法和协议。因此需要开发者自行设计。无论你使用什么方式,都需要一个中间服务器来在客户端之间交换信令消息和应用程序数据。

另外在webrtc的连接中每次重新连接都需要加载传输sdp等元数据信息,可以将此类数据存在信令服务。由于信令服务只传输一些会话描述SDP等元数据信息,因此信令服务传输的压力并不大。如果向知道这些元数据都包含了什么意思可以查看 Internet Engineering Task Force (IETF) examples

v=0
o=- 7614219274584779017 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS
m=audio 1 RTP/SAVPF 111 103 104 0 8 107 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:W2TGCZw2NZHuwlnf
a=ice-pwd:xdQEccP40E+P0L5qTyzDgfmW
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=mid:audio
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:9c1AHz27dZ9xPI91YNfSlI67/EMkjHHIHORiClQe
a=rtpmap:111 opus/48000/2

RTCPeerConnection在连接过程最开始有两个任务:

  • 确定本地媒体条件,例如分辨率和编解码器功能。这是用于 offer-and-answer 机制的元数据。
  • 获取应用程序主机的潜在网络地址,称为候选地址。

一旦确定好这些数据就会通过信令服务将这些数据发送给对话双方。可以采用发送一个会话链接让对方进入再创建连接。或者再类似房间或者聊天室的业务场景中直接发起会话。

用于信令的消息服务必须是双向的,客户端到服务器以及服务器到客户端。双向通信违反HTTP客户端/服务器请求/响应模型,但是,为了将数据从Web服务器上运行的服务推送到浏览器中运行的Web应用程序,如轮询,或者websocket的长连接等。

目前常用的websocket后台可以用golang,nodejs,java,swoole,python等语言之间实现。

二、使用ICE应对NAT和防火墙

对于元数据信令,WebRTC应用程序使用中间服务器,但是对于会话建立后的实际媒体和数据流,RTCPeerConnection尝试直接连接客户端或对等连接。在更简单的环境中,每个WebRTC端点都将具有一个唯一的地址,可以与其他对等方交换该地址以便直接进行通信。

我们目前大部分人连接互联网时都处于防火墙后面或者配置私有子网的家庭(NAT)路由器后面,这就导致我们的计算机的IP地址不是广域网IP地址,故而不能相互之间直接通讯. 正因为这样的一个场景,我们得想办法去穿越这些防火墙或者家庭(NAT)路由器,让两个同处于私有网络里的计算机能够通讯起来
在这里插入图片描述

WebRTC应用程序可以使用ICE框架来克服现实世界中网络的复杂性。为了做到这一点,如本文所述,您的应用必须将ICE服务器URL传递给RTCPeerConnection。ICE试图找到连接对等方的最佳路径。它并行尝试所有可能性,并选择最有效的选择。ICE首先尝试使用从设备的操作系统和网卡获得的主机地址进行连接-(如局域网中就可以直接通信)。如果失败(就是那些在NAT之后的设备),则使用STUN服务器获取外部地址,如果失败,则将流量通过TURN中继服务器进行路由。换句话说,如果直接(对等)连接失败,则将STUN服务器用于获取外部网络地址,并使用TURN服务器来中继转发流量

每个TURN服务器都支持STUN。TURN服务器可以理解为是具有附加内置转发功能的STUN服务器。ICE还可以应对NAT设置的复杂性。实际上,NAT打孔可能不仅仅需要一个公共IP:端口地址

三、关于打桩

在两个不同的网络环境中的A和B两个端是如何通信呢
在这里插入图片描述

A端请求B端,通过A端的交换机A将A端的ip+端口和要请求的B端ip注册在交换机A并且保持连接,然后将请求发送到交换机B端,此时交换机B端同样也有注册B端的ip和端口,则可直接将请求转发到B端。拿到数据后B端交换机将数据返回给A端交换机后再转发到A端,完成这次请求。当然实际的请求过程中比整个更为复杂。

四、STUN服务器

NAT为设备提供IP地址,以供在专用局域网中使用,但是此地址不能在外部使用。没有公共地址,WebRTC对等方将无法通信。为解决此问题,WebRTC使用STUN服务器。

STUN服务器位于公共互联网上,并且有一个简单的任务——检查传入请求的IP:端口地址(从运行在NAT后面的应用程序)并发回该地址作为回应。换句话说,该应用程序使用STUN服务器从公共角度发现其IP:端口。通过此过程,WebRTC对等方可以获得自己的公共可访问地址,然后通过信令机制将其传递给另一个对等方,以建立直接链接。(实际上,不同的NAT以不同的方式工作,并且可能有多个NAT层,但是原理仍然相同)。STUN服务器不必做很多事情或记住很多事情,因此规格较低的STUN服务器也可以处理大量请求。

在这里插入图片描述

五、TURN

RTCPeerConnection尝试通过UDP建立对等方之间的直接通信。如果失败,则RTCPeerConnection求助于TCP。如果失败,则可以将TURN服务器用作后备,在端点之间中继数据。这里申明一下,TURN用于中继对等方之间的音频,视频和数据流,而不是发送信令数据!

TURN服务器具有公共地址,因此即使对等点位于防火墙或代理之后,对等点也可以与它们联系。TURN服务器在概念上很简单—中继流。但是,与STUN服务器不同,它们固有地消耗大量带宽。换句话说,TURN服务器需要更强大的网络资源。

在这里插入图片描述

三、总结

本章中解释了webrtc的连接过程即p2p的通信原理,包括turn和stun和信令服务器再webrtc过程中的角色和作用。

其中webrtc的搭建稍微复杂一些,因为他要实现一些其他的关于视频通话的业务操作。

而stun和turn作为NAT打桩和中继功能,相对来说比较单一和集中在网络中也有很多的教程介绍和安装教程。学者只需要掌握和会用即可。在自信安装过程中需要密切注意stun服务器启动的每项参数和进行测试,可以参考文章 https://blog.csdn.net/polarGW/article/details/70226634

./turnserver  --min-port 40000 --max-port 60000 -v -r riluoban.top:3478 -a -o -c /etc/turnserver/turnserver.conf

turn服务器需要提供一个公网ip加端口,因此开发者需要自行准备云服务器,在准备完成后就可以实现一对一的视频通话了。

在我的实践过程中目前只实现了,无线网到无线网之间的视频对话,但是无线网到4G之间,和移动联通之间的视频会话目前没用实现,需要继续探索中。

最后再次感谢作者 亢少军老师的 《WebRTC音视频开发 》细心指导和博客中各位大佬的总结文档

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值