web-dev-qa-db-fra.com

Implémentation de notre propre serveur STUN / TURN pour l'application WebRTC

Je travaille sur une application webrtc et je dois implémenter le serveur TURN suivant.

https://code.google.com/p/rfc5766-turn-server/

Je suis ce tutoriel.

http://www.dialogic.com/den/developer_forums/f/71/t/10238.aspx

et il indique de référencer le serveur TURN comme suit, dans le code javascript où RTCPeerConnection est créé.

var pc_config = {"iceServers": [{"url": "stun:stun.l.google.com:19302"},
  {"url":"turn:<turn_server_ip_address>", "username":"my_username", "credential":"my_password"}]};

pc_new = new webkitRTCPeerConnection(pc_config);

Je suis un peu confus, pourquoi faisons-nous référence au serveur public STUN de Google. Je pensais que le serveur RFC5766 TURN avait STUN à l'intérieur.

Le RFC5766 est-il uniquement un serveur TURN? et non serveur STUN? Ne pouvons-nous pas implémenter notre propre serveur STUN plutôt que celui fourni par Google?

Désolé pour cette question naïve. Je suis nouveau sur WebRTC.

Merci.

27
Sam Fast

TURN est une extension de STUN, donc le serveur TURN a aussi des fonctionnalités STUN.

https://code.google.com/p/rfc5766-turn-server/ fonctionne également comme STUN, vous pouvez donc essayer d'écrire quelque chose comme ceci:

var pc_config = {"iceServers": [{"url":"turn:my_username@<turn_server_ip_address>", "credential":"my_password"}]};

pc_new = new webkitRTCPeerConnection(pc_config);
16
Rubycon

Ajoutant simplement sur la réponse d'Igor,

coturn est un fork de rfc5766-turn-server, les fonctionnalités de base sont les mêmes, avec des fonctionnalités supplémentaires et auxquelles de nouvelles fonctionnalités sont ajoutées, je vous conseille donc de les utiliser à la place.

dans les propres mots de l'auteur:

Ce projet a évolué à partir du projet rfc5766-turn-server ( https://code.google.com/p/rfc5766-turn-server/ ). Il existe de nombreuses nouvelles spécifications TURN avancées qui vont bien au-delà du document RFC 5766 d'origine. Ce projet prend le code de rfc5766-turn-server comme démarreur et lui ajoute de nouvelles fonctionnalités avancées.

Quant à l'installation, elle est facile à installer sur les machines Linux, pas essayée dans les autres OS.

manière simple:

Sudo apt-get install coturn

Si vous dites non, je veux le dernier tranchant, vous pouvez télécharger le code source depuis leur page de téléchargements en l'installant vous-même, exemple:

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.6/turnserver-4.5.0.6.tar.gz     # Download the source tar
tar -zxvf turn.tar.gz     # unzip
cd turnserver-*
./configure
make && make install 

pour exécuter TURN, il est conseillé de l'exécuter en tant que démon, et vous pouvez utiliser ceci wiki comme référence pour le configurer.

exemple de commande pour exécuter le serveur TURN:

Sudo turnserver -a -o -v -n  --no-dtls --no-tls -u test:test -r "someRealm"

description de la commande:

  • -a - Utiliser un mécanisme d'identification à long terme
  • -o - Exécute le processus serveur en tant que démon
  • -v - Mode verbeux "modéré".
  • -n - pas de fichier de configuration
  • --no-dtls - Ne démarre pas les écouteurs DTLS
  • --no-tls - Ne démarre pas les écouteurs TLS
  • -u - informations d'identification utilisateur à utiliser
  • -r - domaine par défaut à utiliser, besoin de TURN REST API

vous pouvez maintenant utiliser le serveur TURN dans votre application WebRTC comme:

var peerConnectionConfig = {
  iceServers: [{
    urls: YOUR_IP:3478,
    username: 'test',
    password: 'test'
  }]
}
35
mido