在 Ubuntu 上为 WebRTC 安装 TURN 服务器
Posted
技术标签:
【中文标题】在 Ubuntu 上为 WebRTC 安装 TURN 服务器【英文标题】:Installing a TURN Server on Ubuntu for WebRTC 【发布时间】:2014-10-22 03:45:08 【问题描述】:如何在我的 ubuntu 12.04 上安装 TURN 服务器?可以分享教程吗?我阅读了本教程:Implementing our own STUN/TURN server for WebRTC Application。但我不明白如何在我的 ubuntu 12.04 上安装自己的 TURN 服务器?
我目前正在使用类似下面的代码来创建RTCPeerConnection
const pc_config = "iceServers": ["url": "stun:stun.l.google.com:19302",
"url":"turn:my_username@<turn_server_ip_address>", "credential":"my_password"];
const pc_new = new webkitRTCPeerConnection(pc_config);
我想填充上面代码的参数以使用不同的网络。
当我想安装转向服务器时,我得到了
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package resiprocate-turn-server
我使用了apt-get install resiprocate-turn-server
。我也使用了这个https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html 教程。
【问题讨论】:
这表明在实际尝试安装简单的转向服务器时只需付出很少的努力...... 【参考方案1】:在linux机器上很容易安装,在其他操作系统上没有试过。
简单的方法:
sudo apt-get install coturn
如果你说不,我想要最新的尖端,你可以从他们的downloads page 下载源代码并自行安装,例如:
sudo -i # ignore if you already in admin mode
apt-get update && apt-get install libssl-dev libevent-dev libhiredis-dev make -y # install the dependencies
wget -O turn.tar.gz http://turnserver.open-sys.org/downloads/v4.5.0.3/turnserver-4.5.0.3.tar.gz # Download the source tar
tar -zxvf turn.tar.gz # unzip
cd turnserver-*
./configure
make && make install
运行 TURN 服务器的示例命令:
sudo turnserver -a -o -v -n --no-dtls --no-tls -u test:test -r "someRealm"
命令说明:
-a - 使用长期凭证机制 -o - 将服务器进程作为守护进程运行 -v - “中等”详细模式。 -n - 没有配置文件 --no-dtls - 不启动 DTLS 监听器 --no-tls - 不启动 TLS 监听器 -u - 要使用的用户凭据 -r - 要使用的默认领域,需要 TURN REST API查看wiki 了解更多详细信息和配置。
现在您可以在 WebRTC 应用程序中使用 TURN 服务器:
var peerConnectionConfig =
iceServers: [
urls: YOUR_IP:3478,
username: 'test',
password: 'test'
]
【讨论】:
可以使用 TCP 吗?或者它只适用于 UDP。 是的,可以只使用 TCP,但怕性能不好 感谢您的出色解决方案。我在 mozilla firefoxuncaught exception: buildPeerConnection failed, call not completed
上收到此错误我正在使用easyRTC。你能帮帮我吗?
要跳过 IPv6 问题,请输入服务器 IP。这对我来说就像一个魅力:turnserver -L <Your IP> -a -o -f -n --no-dtls --no-tls -u username:password -r yourdomain.com
我在我的一个 EC2 实例中遵循了这个过程,发现 TURN 服务器工作正常。但是在另一个 EC2 实例中,我也遵循了这些步骤,但是在通过 webrtc.github.io/samples/src/content/peerconnection/trickle-ice 进行测试时它不起作用在这里我应该提到两个 EC2 都在 Ubuntu 16.04 上运行,并且所有传入和传出端口或配置都是相同的。没有得到任何线索。谁能建议我如何解决这个问题?我尝试卸载并重新安装,但没有任何效果。【参考方案2】:
在您的 ubuntu 服务器机器上,设置、配置和运行 a packaged version of coturn。对于基本设置,请执行
# set up
sudo apt-get install --assume-yes coturn
# configure & run
USERNAME="some-username"
PASSWORD="some-password"
PORT=3478
# -n: use only commandline parameters, no config file
sudo turnserver \
-n \
--verbose \
--lt-cred-mech \
--user $USERNAME:$PASSWORD \
--realm "someRealm" \
--no-dtls \
--no-tls \
--listening-port $PORT
添加--daemon
以使其在后台运行。
有关turnserver
的选项列表,请参阅https://github.com/coturn/coturn/wiki/turnserver 并查看their example config file,如果您想使用-c CONFIGFILE
而不是使用-n
并像我上面所做的那样在命令行上传递所有选项。
要检查它是否工作,在 Google Chrome 中,在任何安全来源的页面(例如 ***.com)上,在开发者控制台中运行:
function checkTURNServer(turnConfig, timeout)
return new Promise(function(resolve, reject)
setTimeout(function()
if(promiseResolved) return;
resolve(false);
promiseResolved = true;
, timeout || 5000);
var promiseResolved = false
, myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection //compatibility for firefox and chrome
, pc = new myPeerConnection(iceServers:[turnConfig])
, noop = function();
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function(sdp)
if(sdp.sdp.indexOf('typ relay') > -1) // sometimes sdp contains the ice candidates...
promiseResolved = true;
resolve(true);
pc.setLocalDescription(sdp, noop, noop);
, noop); // create offer and set local description
pc.onicecandidate = function(ice) //listen for candidate events
if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf('typ relay')>-1)) return;
promiseResolved = true;
resolve(true);
;
);
const USERNAME="some-username"
const PASSWORD="some-password"
const PORT=3478
const IP="10.11.0.115" // you will have to change this
console.log('TURN server reachable on TCP?', await checkTURNServer(
url: `turn:$IP:$PORT?transport=tcp`,
username: USERNAME,
credential: PASSWORD,
))
console.log('TURN server reachable on UDP?', await checkTURNServer(
url: `turn:$IP:$PORT?transport=udp`,
username: USERNAME,
credential: PASSWORD,
))
你应该得到
TURN server reachable on TCP? true
TURN server reachable on UDP? true
【讨论】:
为我工作,谢谢:-)。旁注,如果您的服务器显示为无法访问,请检查您的服务器防火墙是否阻止了端口 需要更新,在 Firefox 上无效。 TurnConfig 现在采用urls
arary 而不是 url
: urls: [turn:$IP:$PORT?transport=tcp
]【参考方案3】:
我认为该指南有些过时了。
看看这个 Google 开源 TURN 服务器。 真的很容易安装,效果很好。https://code.google.com/p/rfc5766-turn-server/
【讨论】:
现在是遗产【参考方案4】:此链接将提供有关 TURN 服务器安装和配置的所有详细信息。
https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html
这家伙有很好的 WebRtc 演示库。
【讨论】:
【参考方案5】:转服务器安装
根据你的服务器更改包
wget http://turnserver.open-sys.org/downloads/v3.2.4.4/turnserver-3.2.4.4-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
tar -zxvf turnserver-3.2.4.4-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
wget http://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar -zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable/
./configure
make && make install
dpkg -i rfc5766-turn-server_3.2.4.4-1_amd64.deb
cd /etc/
vi turnserver.conf
添加以下转server.conf
listening-device=eth0
listening-ip=YOUR_IP_HERE
listening-port=3478
userdb=turnuserdb.conf
relay-device=eth0
realm=YOUR_REALM_IP_HERE
lt-cred-mech
log-file=/var/log/turnserver.log
在turnuserdb.conf上添加用户名和密码
vi turnuserdb.conf
格式如下
testuser:pass0wrd
启动转向服务器:
sh /data/start_turn_server.sh
添加新的转向用户:
sh /data/ addTurnUser.sh
查看 Turn Server 是否正在运行:
ps aux | grep –I turn
如果 TURN 服务器正常运行,上述命令应该列出一些进程作为 turnserver 。
【讨论】:
以上是关于在 Ubuntu 上为 WebRTC 安装 TURN 服务器的主要内容,如果未能解决你的问题,请参考以下文章
在 Ubuntu 上为 Ruby on Rails 安装 PostgreSQL
如何在 Ubuntu 18 上为 python 3.7 安装 pip?
在 Ubuntu 上为 libtorrent 安装 Python3 绑定
在 Ubuntu 18.04 上为 python 安装 mysqlclient 时出错