Для подключения клиентских приложений (Web, iOS, Android, Desktop) к Slyber Turn Server необходимо передать в WebRTC RTCPeerConnection список URI серверов и временные username/password. Сделать это можно двумя способами: через встроенное HTTP API.
Способ 1. Получение доступов через HTTP API
Запрос: GET /api/turn-credentials
Параметры URL (Query Parameters):
user_id(опционально) — строковый идентификатор пользователя для аналитики и логов (если не указан, генерируетсяanonymous_<nanoseconds>).ttl(опционально) — желаемое время жизни токена в секундах (без заголовкаX-Turn-Secretзначение не может превышатьCREDENTIAL_TTL_SECиз настроек сервера).
Заголовки (Headers):
X-Turn-Secret: <ваш_секрет>илиAuthorization: Bearer <ваш_секрет>(обязателен приREQUIRE_SECRET=true).Origin: https://your-domain.com(проверяется при вызове напрямую из браузера).
Пример запроса (curl):
Bash
curl -s "http://127.0.0.1:8080/api/turn-credentials?user_id=user_42&ttl=3600" \
-H "X-Turn-Secret: your-super-secret-turn-key-12345"
Пример ответа (200 OK):
JSON
JSON
{
"username": "1761583600:user_42",
"password": "K8x9pL2mQ4vR7wT1yZ3aB5cD8eF=",
"ttl": 3600,
"uris": [
"stun:203.0.113.1:3478",
"turn:203.0.113.1:3478?transport=udp",
"turn:203.0.113.1:3478?transport=tcp",
"turns:rtc.example.com:5349?transport=tcp"
]
}
Примечание: URIturns:...автоматически добавляется в ответ, если на сервере включен TLS; при этом если задан файл сертификата и кастомныйREALM(отличный отturn.local), вturns:автоматически подставляется доменное имя изREALM.
Пример подключения в браузере (JavaScript / WebRTC):
JavaScript
async function createPeerConnection(userId) {
// 1. Запрашиваем временные учетные данные TURN
const res = await fetch(`https://turn.example.com:8080/api/turn-credentials?user_id=${encodeURIComponent(userId)}`);
if (!res.ok) throw new Error('Failed to fetch TURN credentials');
const turnConfig = await res.json();
// 2. Передаем полученные URI, username и password в RTCPeerConnection
const pc = new RTCPeerConnection({
iceServers: [
{
urls: turnConfig.uris,
username: turnConfig.username,
credential: turnConfig.password
}
]
});
return pc;
}