西雅图

WebRtc搭建Turn穿透服务(Peerjs-腾讯云Centos7.6)

WebRtc搭建Turn穿透服务

webetc视频通话搭建成功截图(Turn-Net穿透)。国内太少这部分相关内容了,我也是一点一点摸索过来的。
图1

 图2

屏幕共享

注意:请不要使用乌班图或Debian系统 请使用Centos  我被这两个系统坑惨了
环境安装
sudo yum install -y make gcc cc gcc-c++ wget

sudo yum install -y openssl-devel libevent libevent-devel
生成签名(一直按回车即可)
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
Turn安装,使用github上的coturn构建:https://github.com/coturn/coturn
复制代码
wget http://turnserver.open-sys.org/downloads/v4.5.1.2/turnserver-4.5.1.2.tar.gz

tar -xvzf turnserver-4.5.1.2.tar.gz

cd turnserver-4.5.1.2 && ./configure

make

sudo make install
复制代码
不要使用git clone拉取,不然你会发现报C的错误

使用wget下载包,最后这是turn安装成功界面

测试是否安装成功,若有路径表示成功

which turnserver

进入配置文件夹

cd /usr/local/etc/

复制出turnserver.conf.default 为 turnserver.conf

cp turnserver.conf.default turnserver.conf

vim编辑配置文件,shift+g跳到最后一行加上以下内容

把后面的注释去掉

复制代码
vim turnserver.conf
relay-device=eth0 #(与ifconfig查到的网卡名称一致)
listening-ip=你的内网 #(ifconfig查看)
relay-ip=你的内网
external-ip=你的外网
user=你的账号:你的密码
cli-password=你的密码 #(这个要加上,不然一会启动服务会报cli-password啥的)
min-port=49152
max-port=65535
#realm=xxx.com
listening-port=3478
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
复制代码

然后去你的云服务器控制台把3478的tcp和udp开放

开放3478防火墙

yum install firewalld
firewall-cmd --zone=public --add-port=3478/udp --permanent firewall-cmd --zone=public --add-port=3478/tcp --permanent firewall-cmd --reload

查看是否开放,返回yes表示开放

firewall-cmd --zone=public --query-port=3478/tcp
firewall-cmd --zone=public --query-port=3478/udp

测试服务

turnserver -a -f -r 公网ip:3478

返回上图表示成功

ctrl+c暂停服务,使用后台运行

turnserver -a -o -f -r 公网ip:3478

然后启动服务(跳过此步

turnserver -v -r 你的公网ip:3478 -a -o -c /usr/local/etc/turnserver.conf

如果运行日志没报错就应该成功了

查看是否在运行了

ps -ef|grep turnserver

启动成功

关闭服务

kill -9 服务id

到官网测试下:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

输入turn:你的ip:3478 还有账号、密码

addserver后点下面的按钮

注意使用火狐浏览器 chrome会报401和701错误

看到relay和返回了你的公网ip和显示Done表示turn服务连接成功

如果下面返回not reachable?,检查一下安全组上面是否将3478端口打开了

如果你还是配置不成功

可以相互参考:

https://blog.csdn.net/qq_44938451/article/details/122158975

http://events.jianshu.io/p/5543dd3e002b

https://docs.wildfirechat.cn/webrtc/turn_server.html

https://blog.csdn.net/daisysmilee/article/details/120306900

 最后是我们的前端vue代码

复制代码
this.peerExa = new Peer(undefined, {
      host: "/",
      port: "3001",
      config: {
        iceServers: [
          {
            urls: "turn:ip:3478",
            username: "账号",
            credential: "密码",
          },
        ],
      },
    });
复制代码

 

参考:

peerjs文档

https://peerjs.com/

webrtc-turn测试连接

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

禁用webrtc的https安全检查

https://blog.csdn.net/yunzhonghefei/article/details/120290541

Turn服务器搭建

https://docs.wildfirechat.cn/webrtc/turn_server.html

https://www.jianshu.com/p/d65e369f44fb

WebRTC原理

1.1什么是WebRTC

WebRTC(Neb Real-Time Communication)是Google于2010以6829万美元从Global IP Solutions公司购买,并于2011年将其开源,旨在1立一个互联网浏览器问的实时通信的平台,让NebRTC:技术成为H5标准之一。我们看官网(https://webrtc.org)的介绍

 

上图的框架对于不同的开发人员关注点不同:

(1)紫色部分是Wb应用开发者API层

(2)蓝色实线部分是面向浏览器厂商的AP层

(3)蓝色虚线部分刘览器厂商可以自定义实现

1.3 WebRTC发展前景

WebRTC虽然冠以wb”之名,但并不受限于传统互联网应用或浏览器的终端运行环坑。实际上无论终端运行环坑是浏览器、桌面应用、移动设备(Android.或iOS)还是loT设备,只要IP连接可到达且符合NabRTC规范就可以互通。这一点释放了大呈智能终端(或运行在智能终端上的pp)的实时通信能力,打开了许多对于实时交互性要求较高的应用场录的想象空间,警如在线教育、视烦会议、视频社交、远程协助、远程操控等等都是其合适的应用领域。

全球领先的技术研究和咨询公司Technavio.近发布了题为全球网络实时通讯(WebRTC)市场,2017-2021"的报告。报告显示,2017-2021年期间,全球网络实时通信(WebRTC)市场将以34.37%的年均复合增长率增长,增长十分迅速。增长主要来自北美、欧洲及亚太地区。 1.4国内方案厂商

声网、即构科技、环信、融云等公司都在某于WebRTC.二次开发自己的音视频通话方案。

声网htps:ww.agora.io/cn/

即构科技https:www.Zeqo.imM

1.5 WebRTC通话原理

首先思考的问题:两个不同网络环坑的(具备摄像头麦克风多媒体设备的)刘览器,要实现点对点的实时音视频对话,难点在哪里?

1.媒体协商

彼此要了解对方支持的媒体格式

1.A端视频采用VP8做编码,然后发送给B端B端怎么去解码?????

2.BVP9做编码,发给A,A怎么去解码?

比如:Peer-A瑞可支特VP8、H264多种编码格式,而Peer-B瑞支持VP9、H264,要保证二瑞都正确的编解码,最简单的办法就是取它们的交集H264注:有一个专门的协议,称为Session Description Protocol(SDP),可用于描述上述这类信息,在WebRTC中,参与视频通讯的双方必须先交换SDP信息,这样双方才知根知底,而交换SDP的过程,也称为"媒体协商。

2.网络协商

彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路

先说结论:(1)获取外网P地址映射:(2)通过信令服务器(signal s8rver)交换"网络信息"

理想的网络情况是每个浏览器的电脑都是私有公网IP,可以直接进行点对点连接。

实际情况是:我们的电脑和电脑之前或大或小都是在某个局域网中,需要NAT(Network Address Translation,F网络地址转换),显示情况如下图:

在解决WebRTC使用过程中的上术问的时候,我们需要用到STUN和TURN。

STUN

STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet喘端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC5389定义。在遇到上述情况的时候,我们可以建立一个STUN服务器,这个服务器做什么用的呢?主要是给无法在公网环境下的视频通话设备分配公网P用的。这样两台电脑就可以在公网P中进行通话。

使用一句话说明STUN做的事情就是:告诉我你的公网IP地址+瑞口是什么。搭社STUN服务器很简单,媒体流传输是按照P2P的方式。那么问题来了,STUN并不是每次都能成功的为需要NAT的通话设备分配P地址的,P2P在传输媒体流时,使用的本地带宽,在多人视频通话的过程中,通话质量的好坏往往需要将据使用者本地的带宽确定。那么怎么办?TURN可以很好的解决这个问题

TURN

TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay1功能。如果终诺在NAT之后,那么在特定的情景下有可能使得终瑞无法和其对等端(Pee)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。这个转发的协议就被定义为 TURN.

在上图的其础上,再架设几台TURN服务器:

在STUN分配公网IP失败后,可以通过TURN服务器话求公网IP地址作为中继地址。这种方式的带宽由服务器端担,在多人视频聊天的时候,本地带宽压力较小,并且,根据Google的说明,TURN协议可以使用在所有的环境中。(单向数据200kbps一对一通话)

以上是NebRTC中经常用到的2个协议,STUN和TURN服务器我们使用coturn开源项目来搭建

补充:ICE跟STUN和TURN不一样,ICE不是一种协议,而是个框架(Framework),它整合了STUN和TURN。coturn开源项目某成了STUN和TURN功能。

打洞不成功 需要经过中继服务器转发数据包

但转发会十分消耗服务器网络资源

上图演示的是如果你没有P2P成功一对一视频通话情况下总共需要消耗的数据

即单向200kb x 4 =800kb

 

在WebRTC中用来描术网络信息的术语叫candidate。

媒体协商sdp

网络协商candidate

3.媒体协商+网络协商数据的交换通道

从上面1/2点我们知道了2个客户瑞协商媒体信息和网络信息,那怎么去交换?是不是需要一个中间商去做交换?所以我们需要一个信令服务器(Sgl server)转发彼此的媒体信息和网络信息。

如上图,我们在基于VebRTC APl开发应用(APP)时,可以将彼此的APP连接到信令服务器(Signal Server,一股搭让在公网,或者两喘都可以访问到的局域网),借助信令服务器,就可以实现上面提到的sDP媒休信息及Candidate网络信息交换。

信令服务器不只是交互媒体信息sdp和网络信息candidate,比如:

(1)    房间管理(2)人员进出房间

WebRTC APIs

1.MediaStream一MediaStream用来表示个媒体数据流(通过getUserMedia接口获取),允许你访问输入设备,如麦克风和Web摄像机,该APl允许从其中任意一个获取媒体流。

2.RTCPeerConnection一RTCPeerConnection对像允许用户在两个浏览器之间直接通讯,你可以通过网络将捕获的音频和视频流实时发送到另一个 NebRTC端点。使用这些Api,你可以在本世机器和远程对等点之问创建连接。它提供了连接到远程对等点、维护和监视连接以及在不再需要连接时关闭连接的方法。

5.NAT知识补充

具体NAT打洞的知识在本课程不做进一步的讲解,这里提供些链接给大家做参考:

P2P技术详解():NAT详解一详细原理、P2P简介https://www.cnblogs.com/mlgib/p/8243646.htm

P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解https://www.jianshu.com/p/9bfbcbee0abb

P2P技术详解(三):P2P技术之STUN、TURN、ICE详解https:www.jianshu.com/p/258e7d8be2ba

详解P2P技术中的NAT穿透原理

https://www.jianshu.com/p/f71707892eb2

posted @   南柯Dream丶  阅读(1314)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示