webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中
webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中
前言
第一篇文章,写了如何再5分钟之内搭建一个webrtc服务,并运行起来,这当然不够,turn-server以及stun-server都掌握在别人手中,实际上,连socket服务,也在别人手中,正常情况下,RTCMultiConnection官方不会停止服务的,但是咱们也不敢保证不是,所以本篇文章,我们就用最详细的方式,来手把手教会大家在centos上搭建自己的stun-server以及turn-server。
看到这里,可能有人要懵了,怎么一会儿是iceserver,一会儿是stunserver,一会儿又是turnserver,下面我们先讲解下三者的定义以及作用,然后再直接进行实操,实际上,你可以这样理stunserver+turnserver构成iceserver。
整个webrtc系列,其实搭建iceserver是最为麻烦的,为什么这么说呢,其实如何搭建,网上一搜一大把,你根据文章去实操,也没有问题,但是实际应用起来,就是不能用,我就是这样的,找了很多问题都找不到,折腾了两天才算搞定,这篇文章除了提醒大家再搭建iceserver的最重要的注意事项外,还有个目的是为了防止我自己时间长了也别忘了,下面我们就开始步入正题
一、stunserver,turnserver,iceserver是什么?
ICE:(Interactive Connectivity Establishment)是一种框架和协议,用于在网络中建立可靠的实时通信连接。ICE并不是单独的服务器,而是一种方法,它可以利用STUN(Session Traversal Utilities for NAT)和TURN(Traversal Using Relays around NAT)服务器来实现其目标。实际上ice是一个综合解决方案,它整合了STUN和TURN的功能。ICE通过在不同网络条件下选择最佳的连接路径,以确保最可靠和高效的通信。
STUN服务器: 用于解决NAT(网络地址转换)引起的连接问题。STUN协议允许客户端发现其在NAT后的公共地址和端口,从而直接通信成为可能。
TURN服务器: 用于在两个端点无法直接通信时提供中继服务。TURN服务器充当一个中继,将数据传输给两个端点,以解决NAT等问题。
其实很好理解,比方说我们两台电脑需要进行p2p通信,如果两台电脑再同一局域网,那直接就通信了,没有问题。
但是如果两台电脑再不同局域网,那么该怎么通信呢?我怎么能访问到另外一台电脑呢?它又不是服务器,我也不知道它的公网ip!
那么没有问题,STUN服务器来帮忙,他做的事情就是这个,它作用就是找到两台电脑【当然也可以是手机】的公网ip,然后两台电脑就可以通过公网ip地址,相互访问了。
问题又来了,它如果找不到公网ip怎么办? 这就是TURN服务器要干的事情了,没办法,那就只能让TURN服务器中转一下,注意,如果走到这一步,是要消耗服务器流量的。
二、具体搭建步骤
搭建stun-server和搭建turn-server,上来我们认为要搭建两个,实际上,可以用coturn解决问题, Coturn不仅仅是一个TURN服务器,还包括了STUN的功能,允许客户端发现其在NAT后的公共IP地址和端口,简而言之,只需要搭建一个就可以。
1.下载安装coturn
脚本如下:
①更新系统: yum update
②安装Coturn: yum install coturn
③启动Coturn服务: systemctl start coturn
④确保Coturn开机启动: sudo systemctl enable coturn
⑤如果有防火墙,确保打开相应的端口:
firewall-cmd --zone=public --add-port=3478/udp --permanent
firewall-cmd --reload
注意:如果用的是云服务器,还要到后台去开启tcp以及udp的3478端口,如阿里云的是在安全组那里设置【这个很重要,我就是因为没有放开udp的3478端口,导致白白耽误了很长时间】
以上所有脚本,如果有选择的,就输入y,然后enter,没有选择的,直接enter
2、处理证书问题
coturn安装成功后,打开配置文件,我的是默认安装到了/etc/coturn下,配置打开如下【无用部分已排除】:
#listening-device=eth0
#listening-port=3478
#tls-listening-port=5349
#alt-listening-port=0
#alt-tls-listening-port=0
#listening-ip=172.17.19.101
#listening-ip=10.207.21.238
#listening-ip=2607:f0d0:1002:51::4
#relay-device=eth1
#relay-ip=172.17.19.105
#relay-ip=2607:f0d0:1002:51::5
#external-ip=60.70.80.91
#external-ip=60.70.80.91/172.17.19.101
#external-ip=60.70.80.92/172.17.19.102
#relay-threads=0
# Lower and upper bounds of the UDP relay endpoints:
# (default values are 49152 and 65535)
#min-port=49152
#max-port=65535
#user=username1:password1
#cert=/etc/pki/coturn/public/turn_server_cert.pem
#pkey=/etc/pki/coturn/private/turn_server_pkey.pem
#realm=mycompany.org
安装coturn后,cert和pkey是注释状态,但是实际上,这个是不能注释的,否则运行时,会报错,报证书找不到。
①安装依赖: yum install -y make gcc gcc-c++ wget openssl-devel libevent libevent-devel openssl git
②生成证书:openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
以上脚本,都按enter进行下一步
上面两个脚本执行后,/etc文件夹下,会有两个文件,turn_server_cert.pem以及turn_server_pkey.pem,将cert以及pkey配置为上面两个文件的地址。

3、处理各个ip以及端口的配置
listening-ip配置为0.0.0.0即可,这样会监听所有的ip请求
relay-ip配置为服务器的外网ip地址
external-ip 配置为服务器的外网ip地址
listening-port=3478 保持原有配置即可
4、配置用户名密码以及域标识
创建用户名密码以及域标识的格式如下:
turnadmin -a -u [用户名] -p [密码] -r [域标识]
我这里执行:
turnadmin -a -u wjc -p 123456 -r turn.zilv.cn
相当于创建了一个wjc的用户名,密码为:123456,域标识为turn.zilv.cn
以上创建好后,再次更新turnserver.conf文件如下:
user=wjc:123456
realm=turn.zilv.cn
三、测试
可以采用谷歌提供的在线测试工具进行:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/


四、将配置放到第一篇文章的demo中
原来的配置都不用变,将自己的iceserver配置进去就可以了,如下图:

五、总结
iceserver的确是不好配置,虽然网上的文档,包括chatgpt,都有相应的步骤,但是几乎没有完整的,我自己也走了很多弯路,至少花了两天时间,才彻底搞定,为了大家少走弯路,所以今天再好好总结下,相信大家按照我的步骤一定能够完成自己的iceserver搭建
最后还是提示下容易出问题的点,大家可以对号入座,作为重点排查对象:
1、ip设置的正确吗
2、用户名密码有没有用账号密码创建?我就是没有创建,直接想当然的的配置了,主要,要用脚本创建了用户名密码才可以
3、udp以及tcp端口放开了吗?我当时是udp再阿里云后台没有放开,所以一直不通,找了好久才发现这个隐蔽的问题
4、证书配置了吗?也是需要用脚本配置的哦
同时也欢迎您关注爱自律官方微信公众号,同时体验爱自律小程序的使用,让我们一起爱上自律,拥抱自由吧。
webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中的更多相关文章
- ubuntu-14.04服务器版下搭建apache2+svn+svnmanager服务
本人linux小白,新进公司,被分配此任务,好崩溃,只能一边百度linux命令一边完成任务.从装系统开始一直到搭建好服务,也快一周了,足见水平之差,以下博文基本靠网络,再加上自己的摸索,直至搭建成功. ...
- Selenium终极自动化测试环境搭建(二)Selenium+Eclipse+Python
Selenium终极自动化测试环境搭建(二)Selenium+Eclipse+Python 前面举例了Selenium+Eclipse+Junit+TestNG自动化测试环境的搭建,在前一篇的基础上, ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- 08重编终极版《东邪西毒:终极版》DVD粤语中字
1.东邪西毒].Ashes.of.Time.1994.384p.DVDRip.x264.ac3-DTMM.mkv 这个版本最清晰 ,可惜删减了,只有87分钟,粤语,1.4G. 2.东邪西毒(初始版). ...
- python3 购物车 增改查终极版~
还是先来条NLP再说,快没了,以后想抄还没有... 十一,没有挫败,只有回应讯息 “挫败”只是指出过去的做法得不到预期的效果,是给我们需要改变的信号. “挫败”只是在事情画上句号时才能用上,欲想事情解 ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)
一.升级要求:让程序能接受用户输入答案,并判定对错.最后给出总共对/错的数量. 二.设计思想: 1.首先输入答案并判断对错.我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案.每输出一道 ...
- 孤荷凌寒自学python第六十一天在Fedora28版的linux系统上找搭建本地Mongodb数据服务
孤荷凌寒自学python第六十一天在Fedora28版的linux系统上找搭建本地Mongodb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第七天.成功在本地搭建 ...
随机推荐
- java字符串与json互转
开发中经常遇到将字符串转成json和字符串转成json属组的方法,网上搜到的方法,好多都是不好用的,今天这里记录一下方便自己今后查看,也提供给需要的人. 依赖: <!-- 处理json --&g ...
- HTTP协议六种请求:GET,HEAD,PUT,DELETE,POST
Http定义了与服务器交互的不同方法,标准Http协议支持六种请求方法,即: 1.GET 2.POST 3.PUT 4.Delete 5.HEAD 6.Options 最基本的方法有4种,分别是GET ...
- 每天学五分钟 Liunx 0110 | 服务篇:守护进程 systemd
有些进程会在系统上运行较长时间,如前面的 Hello World 程序运行时产生的进程.有些进程运行瞬间就结束了,如执行 ps 命令产生的进程,也有的进程会常驻在内存中,提供相应的服务,这样的进程称为 ...
- RL 基础 | 讲的很好的 TRPO 博客
特意存档: 知乎 | 如何看懂TRPO里所有的数学推导细节? 感觉把 idea 讲的很清楚(虽然没有特别仔细看-
- java - 运行可执行文件 (.exe)
package filerun; import java.io.File; import java.io.IOException; public class RunExe { public stati ...
- [转帖]Shell三剑客之awk
目录 awk简述 awk的工作过程 awk的工作原理 awk的基本格式及其内置变量 getline 文本内容匹配过滤打印 对字段进行处理打印 条件判断打印 awk的三元表达式与精准筛选用法 awk的精 ...
- [转帖]K8S 挂载 minio csi 的方式.
对象存储 前置条件 安装Minio(在102主机上操作) 安装csi-s3插件(在103主机上操作) 使用 参考 本文介绍kubernetes如何基于对象存储(minio)创建PV与PVC 前置条 ...
- [转帖]centos7离线安装postgresql13
https://www.cnblogs.com/summer-88/p/15341918.html 在一台可以联网的centos上安装postgresql源 yum install -y https: ...
- 不同linux发行版 FIO测试结果总结
不同linux发行版 FIO测试结果总结 背景 机器来源 配置: 2路28核心Golden 6330 2.0Ghz 512G内存 硬盘 24块 960G SSD (22块 Raid5 + 2块 hot ...
- ESXi重置密码以及修改网络IP地址的方法
Study From https://www.cnblogs.com/mk21/p/15784082.html 前期公司有部分虚拟化的服务器因为只通过vCenter进行管理. 导致密码遗失. 最近因为 ...