设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10101|回复: 0

webrtc音视频通话(一)搭建turn服务器

[复制链接]

63

主题

505

回帖

956

积分

高级会员

Rank: 4

积分
956
发表于 2022-3-26 10:32:30 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
webrtc音视频通话(一)搭建turn服务器

全球定位:
webrtc音视频通话(一)搭建turn服务器
webrtc音视频通话(二)简单音视频通话
webrtc音视频通话(三)整合websocket

在学习webrtc之前呢,需要对websocket有一定基础,如果还不会websocket的同学,请转到
springboot整合websocket(一)简单聊天室
将前两部分看下就能使用websocket了。

温馨提示

   本文通过其他参考资料(其他博客、官网等)实践并分享。在安装一些文件的时候,版本请尽量和我保持一致
第一章其实就是搭建环境,暂不需要写代码。
  我因版本问题搞了一下午,最后降了版本才成功的。
另外,我们需要一台服务器,外网能访问的那种,可以在阿里云或者腾讯云租一台。
一、webrtc的简单概念


上述序列中,WebRTC并不提供Stun服务器Signal服务器,服务器端需要自己实现。Stun服务器可以用google提供的实现stun协议的测试服务器(stun:stun.l.google.com:19302),Signal服务器则完全需要自己实现了,它需要在ClientA和ClientB之间传送彼此的SDP信息candidate信息,ClientA和ClientB通过这些信息建立P2P连接来传送音视频数据。由于网络环境的复杂性,并不是所有的客户端之间都能够建立P2P连接,这种情况下就需要有个relay服务器做音视频数据的中转。
Signal服务器其实就是我们的websocketstun服务器其实就是webrtc啦。
图中的流程如下(比较长哈,大家粗略看下,有个概念,之后还有简化版的)



  • ClientA首先创建PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream添加到PeerConnection中。
  • ClientA调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。ClientA通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signal服务器发送给ClientB
  • ClientB接收到ClientA发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象并将它通过Signal服务器发送给ClientA
  • ClientA接收到ClientB发送过来的应答SDP对象,将其通过PeerConnection的SetRemoteDescription方法保存起来。
  • 在SDP信息的offer/answer流程中,ClientA和ClientB已经根据SDP信息创建好相应的音频Channel和视频Channel并开启Candidate数据的收集,Candidate数据可以简单地理解成Client端的IP地址信息(本地IP地址、公网IP地址、Relay服务端分配的地址)。
  • 当ClientA收集到Candidate信息后,PeerConnection会通过OnIceCandidate接口给ClientA发送通知,ClientA将收到的Candidate信息通过Signal服务器发送给ClientB,ClientB通过PeerConnection的AddIceCandidate方法保存起来。同样的操作ClientB对ClientA再来一次。
  • 这样ClientA和ClientB就已经建立了音视频传输的P2P通道,ClientB接收到ClientA传送过来的音视频流,会通过PeerConnection的OnAddStream回调接口返回一个标识ClientA端音视频流的MediaStream对象,在ClientB端渲染出来即可。同样操作也适应ClientB到ClientA的音视频流的传输。
二、搭建turn服务器(正文开始)

对了,记得使用root用户登录!!!
2.1 安装gcc环境

由于服务器基本上都会默认安装gcc,所以这里不说咋装。
可以通过以下命令检测是否安装了gcc环境
  1. which gcc
复制代码

2.2 安装ssh

2.2.1 使用yum安装

  1. yum -y install openssl-devel
复制代码
2.2.2 生成签名

  1. openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
复制代码
执行后一直按回车就行了,结果是

意思是:
生成了key,并保存再 /etc/turn_server_pkey.pem
生成了cert,并保存再 /etc/turn_server_cert.pem
有效期99999天。
2.3 安装libevent

2.3.1 下载安装包

这是一个c的扩展库,
可以使用下面命令直接安装
  1. wget --no-check-certificate https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
复制代码
也可以进入官网安装最新版的https://libevent.org/,下载到本地,再上传的服务器即可。

2.3.2 执行安装命令

下载下来后会有一个libevent-2.1.12-stable.tar.gz的包
依次执行以下命令
  1. tar -zxvf libevent-2.1.12-stable.tar.gzcd libevent-2.1.12-stable/./configuremakemake install
复制代码
2.3.3 看看是否安装成功

由于这是个扩展库,没有执行命令,我从网上找了一个代码,如果能执行就是安装成功。
2.4 安装coturn(turn服务器)

以下内容参考自 coturn GitHub
2.4.1 下载安装包

  1. wget --no-check-certificate https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
复制代码
2.4.2 执行安装命令

下载下来后会有一个4.5.1.1.tar.gz的包
依次执行以下命令
  1. tar -zxvf 4.5.1.1.tar.gzcd coturn-4.5.1.1./configuremakemake install
复制代码
2.4.3 生成用户

  1. turnadmin -a -u chr -p 11111 -r xxx.com
复制代码
上面的命令,将创建用户chr,密码为11111 ,同时指定realmxxx.com,大家根据实际情况修改(包括那个xxx.com都是随便写
2.4.4 修改配置文件

去到配置文件目录

  1. cd /usr/local/etc
复制代码
里面有一个turnserver.conf.default的文件
复制一份

  1. cp turnserver.conf.default turnserver.conf
复制代码
查看ip地址

  1. ifconfig
复制代码
记住这两个东西

编辑

  1. vim turnserver.conf
复制代码
里面都是注释,直接再最下面插入
  1. #与前ifconfig查到的网卡名称一致relay-device=eth0#内网IPlistening-ip=10.0.16.7#公网IPexternal-ip=159.75.239.36#用户名密码,创建IceServer时用user=chr:123456#一般与turnadmin创建用户时指定的realm一致realm=chr.com#端口号listening-port=3478#不开启会报CONFIG ERROR: Empty cli-password, and so telnet cli interface is disabled! Please set a non empty cli-password!错误cli-password=qwertycert=/etc/turn_server_cert.pempkey=/etc/turn_server_pkey.pem
复制代码
2.4.5 开启3478的tcp和udp端口

如果使用的云服务器,建议去阿里云控制台/腾讯云控制台开启。
也可以使用下面命令开启:
  1. firewall-cmd --zone=public --add-port=3478/udp --permanentfirewall-cmd --zone=public --add-port=3478/tcp --permanent
复制代码
查看端口是否开放

  1. firewall-cmd --zone=public --query-port=3478/tcpfirewall-cmd --zone=public --query-port=3478/udp
复制代码
2.4.6 开启服务

需要注意的是,-r参数后面是上一步的-r的值
  1. turnserver -a -f -r xxx.com
复制代码
如果看到下面的图,那就是成功了

然后ctrl+C退出,使用 -o 参数后台启动
  1. turnserver -a -o -f -r xxx.com
复制代码
2.4.7 测试turn服务器

webrtc-samples官网提供了一个测试用的地址
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
进去之后是这个样子


添加turn服务器


同理,添加两个,一个stun,一个turn,如图

测试


End

全球定位:
webrtc音视频通话(一)搭建turn服务器
webrtc音视频通话(二)简单音视频通话
webrtc音视频通话(三)整合websocket

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表