我已经建立了coturn并成功运行它.IP:192.168.1.111.现在我遇到的问题是通过REST API获取Turn凭证. http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00根据该段落的要求格式应该是
GET /?service=turn&username=mbzrxpgjys
应该是JSON.现在我的问题是:
a)如何配置和命令TURN SERVER使其在REST API模式下运行?
b)如何以正确的格式编写http请求以便TURN SERVER正确回复?你能举个例子吗?
我想为我的 WebRTC 项目托管一个 TURN 服务器,但我不知道 'realm' 属性的作用。我看过 coturn 和 pion,他们似乎都要求我输入这个。有人可以解释它是什么吗?
如何在我的ubuntu 12.04上安装TURN服务器?你能分享教程吗?我读了这篇教程:为WebRTC应用程序实现我们自己的STUN/TURN服务器.但我不明白的是如何在我的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);
Run Code Online (Sandbox Code Playgroud)
我想填写上面代码的参数来使用不同的网络.
当我想安装转服务器然后我得到
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package resiprocate-turn-server
Run Code Online (Sandbox Code Playgroud)
我用过apt-get install resiprocate-turn-server.我还使用了这个https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html教程.
我有一个使用共同转向并托管在 GCP 上的转向服务器。
并且已经成功安装服务器,没有任何错误并启用了端口。
但是当我在我的 web rtc 项目中使用它时,它似乎不起作用,因为我的应用程序只能在同一个路由器或网络上运行。
它不适用于不同的网络。
我尝试检查https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/并得到以下结果,表明它很好。
所以,我有点不知道去哪里检查了。
请帮助我我可以在其他任何地方检查的内容。谢谢。
============================================
添加外部 IP 后更新。
当我在 chrome://webrtc-internals/ 上调试时,icecandidateerror 事件上有一条错误消息,状态为未授权。
url: turn:turn.xxxxx.live:5349?transport=udp
address: 10.19.95.x
port: 41207
host_candidate: 10.19.95.x:41207
error_text: Unauthorized
error_code: 401
Run Code Online (Sandbox Code Playgroud)
当我重新检查参考此链接创建的轮流服务器时,我仍然有 user=guest:somepassword 行,因此尝试使用该密码的服务器以确认是否是用户问题。
仍然没有运气。请帮助我指导我需要更多研究的地方。
由于我是这项技术和基础设施的新手,我在这里有点迷失。
我正在玩这个,能够使用 Node/Javascript 让它立即工作,使用 Golang 花了一些时间(这只是生成要发送到 coturn 的用户/密码。)注意秘密应该与 coturn 配置和 API 中的匹配JS/Go 方面。
coturn上的配置:/etc/turnserver.conf
listening-port=443
tls-listening-port=443
listening-ip=10.100.0.2
relay-ip=10.100.0.2
external-ip=123.456.78.9
min-port=10000
max-port=20000
verbose
fingerprint
lt-cred-mech
server-name=myserver
realm=myserver
cert=/etc/SSL/fullchain.pem
pkey=/etc/SSL/privkey.pem
log-file=/var/log/turnserver.log
use-auth-secret
static-auth-secret=MySecret
Run Code Online (Sandbox Code Playgroud)
以下是 Node/Js 实现 API(从其他地方复制 - 有效):
var crypto = require('crypto');
var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600, // this credential valid for 24 hours
TempUser = [unixTimeStamp, "SomeUser"].join(':'),
TempPassword,
hmac = crypto.createHmac('sha1', "MySecret");
hmac.setEncoding('base64');
hmac.write(TempUser);
hmac.end();
TempPassword = hmac.read();
Run Code Online (Sandbox Code Playgroud)
以下是GOLANG实现API(花了点时间):
UserId := "SomeUser"
// This worked, returned the exact seconds
timestamp …Run Code Online (Sandbox Code Playgroud) 这个问题以前有人问过,但我还没有找到答案。我基本上遇到了与此处和此处所述相同的问题。
我正在尝试使用 PeerJS 设置 webRTC 连接。它在 LAN 中完美运行,但我无法让它在 Internet 上工作。我使用 coturn 作为 TURN 服务器,但到目前为止这还没有解决问题。 Chromium 控制台打印出以下内容:
PeerJS: Added ICE candidate for: client1
peer.js:1476 PeerJS: Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS: Set remoteDescription: OFFER for: client1
peer.js:1476 PeerJS: Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS: Received remote stream
peer.js:1476 PeerJS: Receiving stream MediaStream
peer.js:1476 PeerJS: Created answer.
peer.js:1476 PeerJS: Set localDescription: answer for: client1
3peer.js:1476 PeerJS: Received ICE candidates for: client1
3peer.js:1476 PeerJS: Added ICE candidate …Run Code Online (Sandbox Code Playgroud) 我正在尝试为基于 WebRTC 的应用程序设置 COTURN 服务器。但是,我遇到了一些我无法理解的错误消息,并且无法在互联网上找到任何帮助。
以下是有关该应用程序的一些详细信息:
两个用户登录到应用程序,一个用户可以与另一个用户共享他们的屏幕 - 所以流只向一个方向前进
我能够让应用程序在内部网和一些外部网络上工作。所以我相信只要 STUN 模式足够,应用程序就能正常工作。
对于某些网络,STUN 候选者不断失败,所以我需要一个 TURN 服务器来中继流。
我从服务器收集了一些服务器日志,以防有人可以根据它们识别问题:
handle_udp_packet: New UDP endpoint: local addr <IP Address>:3478, remote addr <IP Address2>:59942
handle_turn_command: STUN method 0x1 ignored
handle_udp_packet: New UDP endpoint: local addr <IP Address>:3478, remote addr <IP Address2>:59944
handle_turn_command: STUN method 0x1 ignored
session 128000000000000096: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised
session 128000000000000097: realm <server URL> user <>: incoming packet message processed, error 401: …Run Code Online (Sandbox Code Playgroud) 使用appr.tc ice 服务器(google turn 服务器)时,我可以在任何情况下进行连接。但我无法连接到我自己的回合服务器。我确实通过coturn project.
我正在使用谷歌的libjingle_peerconnectionapi 创建一个Android Application可以执行video call.
当我运行转向服务器时:
<pre>
RFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server
Version Coturn-4.5.0.5 'dan Eider'
0:
Max number of open files/sockets allowed for this process: 4096
0:
Due to the open files/sockets limitation,
max supported number of TURN Sessions possible is: 2000 (approximately)
0:
==== Show him the instruments, Practical Frost: ====
0: TLS supported
0: DTLS supported
0: DTLS 1.2 is not supported
0: TURN/STUN …Run Code Online (Sandbox Code Playgroud) 在 iOS 11(iPhone 5s 和 iPhone 7)或桌面上使用 Safari 11 时,我的 Web 应用程序无法通过 CoTURN 服务器收集 WebRTC 中继 ICE 候选对象。Web 应用程序(建立单向音频 WebRTC 对等连接)在真实浏览器(Chrome 和 Firefox)之间直接或通过 CoTURN 中继工作正常,我通常在这些浏览器上获得 6-15 个 ICE 候选者。
我在接收端有一个(坦率地说,不必要的)调用 getUserMedia,它允许 Safari 生成主机 ICE 候选对象。(注意……在 Safari 提供主机 Ice Candidates 之前,用户必须批准音频和/或视频访问,即使是在仅接收端。我已经克服了那个障碍,但只是这样你就不会遇到它。 ..这是出于“隐私”考虑。)。在我添加允许 getUserMedia 之前,我没有收到 ICE。现在我收到了两个候选人。一个使用私有 IPv4,另一个使用 IPv6。这足以让应用程序在同一台机器或本地网络上正常工作。所以我对应用程序代码的其他部分非常有信心。我不确定我的问题是与应用程序代码还是 CoTURN 服务器有关。
收到的 ICE 候选人示例:
{"candidate":{"candidate":"candidate:622522263 1 udp 2113937151 172.27.0.65 56182 typ host generation 0 ufrag r23H network-cost 50","sdpMid":"audio","sdpMLineIndex":0,"usernameFragment":"r23H"}}
Run Code Online (Sandbox Code Playgroud)
我很确定我的 RTCPeerConnection 的 RTCIceServer 字典符合以下标准:
我尝试了多种参数变体:
// For Example:
var …Run Code Online (Sandbox Code Playgroud) 在使用 Chrome 62.0.3202.89 的 MacBook 10.12.6 上使用 Trickle ICE 测试 STUN & TURN 服务器 (CoTurn) 时,我没有得到任何候选者:
\n\nhttps://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
\n\n和:
\n\nstun:<ip-adres>:3478\nturn:<ip-adres>:3478 [username:test] \nRun Code Online (Sandbox Code Playgroud)\n\n在 Digital Ocean 上,我创建了一个 Droplet Ubuntu 16.04.3 x64 并安装了 CoTurn 版本 4.5.0.3,执行以下操作:
\n\nsudo apt-get update\nsudo apt-get install coturn\nRun Code Online (Sandbox Code Playgroud)\n\n默认情况下,防火墙处于非活动状态。
\n\n接下来,我编辑sudo vi /etc/turnserver.conf并给出以下选项:
fingerprint\nlt-cred-mech\nuser=username:test\nrealm=<ip-adres>\nlistening-ip=<ip-adres>\nrelay-ip=<ip-adres>\nexternal-ip=<ip-adres>\nRun Code Online (Sandbox Code Playgroud)\n\n接下来,我编辑sudo vi /etc/default/coturn并取消注释该选项:
TURNSERVER_ENABLED=1\nRun Code Online (Sandbox Code Playgroud)\n\n然后我启动 Coturn 守护进程:
\n\nsudo systemctl start coturn\nsudo systemctl status coturn\nRun Code Online (Sandbox Code Playgroud)\n\n这给出了输出:
\n\n\xe2\x97\x8f coturn.service - …Run Code Online (Sandbox Code Playgroud)