Lov*_*Lxr 17 api rest webrtc turn coturn
我已经建立了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正确回复?你能举个例子吗?
mid*_*ido 26
这里要澄清的几件事情是:
GET /?service=turn&username=mbzrxpgjys它返回一个JSON,只是一个建议的 uri,用于从服务器检索有时间限制的 TURN凭证,你不必遵循它,你的uri就可以了/?giveMeCredentials.实际上,我使用我的套接字连接来检索此数据,而不是使用json响应直接进行http调用.一天结束时,只要它们有效,您(使用所述TURN的客户端)如何获得这些凭证并不重要.
您不直接向TURN服务器发出任何请求,您无法控制对TURN服务器的休息api调用.
你在启动TURN服务器时分配一个密钥,这可以从一个db(因此动态变化)获取,但我只是懒惰,只是硬编码,并在转向配置文件中给它,也记得启用REST API.作为转弯命令的一部分,turnserver ... --use-auth-secret --static-auth-secret=MySecretKey
现在,在您的应用程序服务器中,您将使用相同的密钥生成凭据,对于用户名,它是UNIX时间戳和一些字符串(可以是随机或用户ID或其他东西)分隔,:密码将是用户名的HMAC你的秘密密钥.
关于UNIX时间戳,这是TURN服务器中你的凭证必须有效的时间,因此计算这个时间确保你考虑应用服务器和你的转弯服务器之间的时钟时差.
现在一些示例代码取自我对另一个问题的回答
用于声明TURN服务器的命令:
turnserver -v --syslog -a -L xx.xxx.xx.xx -X yy.yyy.yyy.yy -E zz.zzz.zz.zzz --max-bps=3000000 -f -m 3 --min-port=32355 --max-port=65535 --use-auth-secret --static-auth-secret=my_secret --realm=north.gov --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -q 100 -Q 300 --cipher-list=ALL
Run Code Online (Sandbox Code Playgroud)
node.js 在应用程序服务器中创建TURN凭据的代码:
var crypto = require('crypto');
function getTURNCredentials(name, secret){
var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600, // this credential would be valid for the next 24 hours
username = [unixTimeStamp, name].join(':'),
password,
hmac = crypto.createHmac('sha1', secret);
hmac.setEncoding('base64');
hmac.write(username);
hmac.end();
password = hmac.read();
return {
username: username,
password: password
};
}
Run Code Online (Sandbox Code Playgroud)
浏览器代码使用此:
...
iceServers:[
{
urls: "turn:turn_server_ip",
username: username,
credential:password
}
...
Run Code Online (Sandbox Code Playgroud)
经过(许多)小时的沮丧之后,@Mido在这里的出色回答是唯一真正让 CoTurn 的 REST API 为我工作的东西。
我的凭证服务器是 PHP,我使用 CoTurn 的配置文件“turnserver.conf”,所以这里是 Mido 在这种情况下工作的经过测试和有效的翻译:
假设'3575819665154b268af59efedee8826e'的'共享秘密',这里是相关的turnserver.conf条目:
lt-cred-mech
use-auth-secret
static-auth-secret=3575819665154b268af59efedee8826e
Run Code Online (Sandbox Code Playgroud)
...和 PHP(误导了我多年):
$ttl = 24 * 3600; // Time to live
$time = time() + $ttl;
$username = $time . ':' . $user;
$password = base64_encode(hash_hmac('sha1', $username, '3575819665154b268af59efedee8826e', true));
Run Code Online (Sandbox Code Playgroud)
基于@Mido 和@HeyHeyJC 的回答,这里是为 coturn 构建凭证的 Python 实现。
import hashlib
import hmac
import base64
from time import time
user = 'your-arbitrary-username'
secret = 'this-is-the-secret-configured-for-coturn-server'
ttl = 24 * 3600 # Time to live
timestamp = int(time()) + ttl
username = str(timestamp) + ':' + user
dig = hmac.new(secret, username, hashlib.sha1).digest()
password = base64.b64encode(dig).decode()
print('username: %s' % username)
print('password: %s' % password)
Run Code Online (Sandbox Code Playgroud)
这是一个基于 Web 的页面,用于测试您的 coturn 服务器的登录。使用turn:host.example.com作为服务器名称。