记录一下部署coturn服务的过程,以下步骤是作者亲自实践并确认好用的,可放心食用。
服务器环境: 华为云服务器 CentOS7
1、安装依赖
yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel
2、下载源码包
wget https://coturn.net/turnserver/v4.5.0.8/turnserver-4.5.0.8.tar.gz
解压并进入目录
tar -zxvf turnserver-4.5.0.8.tar.gz
cd turnserver-4.5.0.8/
3、编译安装
./configure --prefix=/usr/turnserver # 指定安装的目录
make && make install
4、设置环境变量
vim ~/.bashrc
插入以下内容
export turnserver_home=/usr/turnserver
export PATH=$PATH:$turnserver_home/bin
配置立即生效
source ~/.bashrc
5、编辑配置文件
先找到配置文件
find /usr -name turnserver.conf
例如:返回/usr/turnserver/share/examples/turnserver/etc/turnserver.conf
编辑配置
vim /usr/turnserver/share/examples/turnserver/etc/turnserver.conf
配置文件末尾添加以下内容
realm=stun.xxx.cn # 域名,这个必须设置
listening-port=3478 # 服务端口
listening-ip=0.0.0.0
external-ip=x.x.x.x # 外网ip(本例中就是华为云服务器的公网ip)
user=admin:123456 # 设置账号密码
min-port=49152 # 连接端口最小值
max-port=65535 # 连接端口最大值
6、指定配置文件启动服务
turnserver -v -r 外网ip -a -o -c /usr/turnserver/share/examples/turnserver/etc/turnserver.conf
由于是在华为云上,需要开放端口的访问,关闭对应端口的防火墙,包括端口3478和端口范围49152-65535,UDP和TCP都需要
7、测试是否成功
8、调用(js为例)
var iceServer = {
"iceServers": [{
"urls" : ["stun:外网ip:3478"]
}, {
"urls" : ["turn:外网ip:3478"],
"username" : "admin",
"credential" : "123456"
}]
};
window.RTCPeerConnection = window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var peerConnection = new RTCPeerConnection(iceServer)
补充说明:
- coturn服务是集STUN/TURN为一体的,STUN负责打洞穿透,如果端到端无法穿透,则使用TURN进行转发。从上面代码可以看到,使用STUN时不需要携带账号密码,因为STUN服务只负责尝试打洞,如果打洞成功,则建立p2p直连,不会占用coturn服务器带宽和流量;而如果使用TURN转发,则需要携带账号密码,因为一端的音视频流需要经过coturn服务器进行转发,会占用服务器带宽和流量,所以必须经过认证。
- TURN地址可以只在一端配置,比如web端与安卓端进行WebRTC连接,可以只在web端或安卓端的iceServers中配置turn地址;两端都必须配置stun地址。