Webrtc. Vidéoconférence dans le navigateur. Chat à plusieurs utilisateurs avec et en utilisant WEBRTC Utilisation dans des solutions spécialisées

WEBRTC (abrégé de Web Communications en temps réel) est une technologie qui vous permet de transmettre des données de diffusion audio et vidéo entre navigateurs et applications mobiles.


Le développement de cette technologie est la compétition Skype. WEBRTC peut être utilisé pour organiser la vidéoconférence directement dans le navigateur. Le projet dispose d'un code open source et est activement promu par Google et en particulier l'équipe de développement du navigateur Google Chrome.


Les navigateurs d'utilisateurs grâce à la technologie WEBRTC peuvent transmettre des données les unes aux autres directement. WEBRTC n'a pas besoin d'un serveur séparé qui stocké et traité les données. Toutes les données sont traitées directement par BRATS et des applications utilisateur d'extrémité mobile.


La technologie WEBRTC est prise en charge par tous les populaires Mozilla Firefox, Opera, Google Chrome (et tous les navigateurs basés sur Google Chrome), ainsi que des applications mobiles basées sur Android et iOS.

Danger Webrtc.

Le danger de la technologie WEBRTC est de définir votre véritable adresse IP. Étant donné que la connexion va directement avec un autre utilisateur, navigateur, application Web ou mobile, les paramètres réseau sont ignorés. Pour créer des liens audio et vidéo, les navigateurs doivent échanger des adresses IP externes et locales.

Le service VPN anonyme résout ce problème et cache la vraie adresse IP. Maximum, qui peut être détecté est une adresse IP locale attribuée au réseau VPN utilisateur. Ce n'est pas dangereux, car les mêmes adresses IP locales seront affichées si vous utilisez un routeur pour la distribution d'Internet.


Si vous utilisez un proxy, alors WEBRTC pourra déterminer votre adresse IP réelle pour un serveur VPN d'adresse proxy ou IP si vous utilisez une chaîne VPN + Proxy.


WEBRTC définit également votre adresse IP réelle lors de l'utilisation du réseau Tor.


La meilleure solution consiste à désactiver la technologie WEBRTC si vous ne l'utilisez pas.

Comment éteindre WEBRTC dans les navigateurs

Navigation rapide sur cette page.

Comment désactiver Webrtc à Mozilla Firefox

Mozilla Firefox Browser est un navigateur unique qui vous permet de désactiver la technologie WEBRTC sans installer de plug-ins supplémentaires.

Réglage manuel

Si vous n'utilisez pas la technologie WEBRTC, vous pouvez le désactiver complètement. Dans le cas où il est nécessaire d'utiliser WEBRTC périodiquement plus pratique.

Pour désactiver la technologie WEBRTC à Mozilla Firefox, vous devez entrer le texte suivant dans la barre d'adresse du navigateur et appuyer sur le bouton ENTER.

À propos de: config


Cliquez sur, je fais un bouton de risque.


Effectuez ce qui suit:

  1. Dans la chaîne de recherche, entrez le texte et appuyez sur Entrée.
  2. media.peerconnection.enabled.
  3. Cliquez avec le bouton droit sur la chaîne et sélectionnez Commutateur. Ou double-cliquez sur la ligne.


Après ces étapes, WEBRTC sera désactivé.

Réglage via le plug-in WebrTC Control

Si vous utilisez la technologie WEBRTC, puis éteignez et passez à travers les paramètres. Installez un plugin qui vous aidera à allumer et à éteindre le WEBRTC en 1 clic de la souris.

Ouvrez les add-ons.


Choisir:

  1. Section Recherche
  2. Entrez le nom du plug-in à la chaîne de recherche: Contrôle de la WEBRTC
  3. Cliquez sur le bouton Installer


Comment désactiver la connexion WEBLTC dans le navigateur d'opéra

Pour éteindre la WEBRTC dans le navigateur de l'opéra, allez à la galerie Extensions.


Suivez ces étapes:

  1. Entrez le nom du plug-in dans la barre de recherche: Contrôle de la WEBRTC
  2. Cliquez sur Plugin


Cliquez sur Ajouter à Opera.


Activer le plugin. L'icône Plug-in doit être bleue pour la serrure WEBRTC.

Comment désactiver Webrtc dans Google Chrome

Pour désactiver WEBRTC dans le navigateur Google Chrome, passez à la section d'expansion.


Faites défiler la page vers le bas et appuyez sur plusieurs extensions.


Suivez ces étapes:

  1. Entrez le nom du plug-in à la chaîne de recherche: Contrôle de la WEBRTC
  2. Cliquez sur le bouton Installer.



Activer le plugin. L'icône Plug-in doit être bleue pour la serrure WEBRTC.

Comment désactiver la connexion WEBRTC dans le navigateur YANDEX

Pour désactiver la connexion WEBRTC au navigateur YANDEX, allez à la section Add-OnS.


Faites défiler la page Down Bas et appuyez sur le répertoire d'extension pour le navigateur Yandex.


Effectuez ce qui suit:

  1. Entrez le nom du plugin dans la barre de recherche: Contrôle de la WEBRTC
  2. Cliquez sur le plugin à installer.


Cliquez sur Ajouter au navigateur Yandex.


Cliquez sur l'extension d'installation.


Activer le plugin. L'icône Plug-in doit être bleue pour la serrure WEBRTC.

Comment désactiver la connexion WEBRTC dans le navigateur de srware Iron

Le navigateur SRWare Iron est effectué sur la base de Google Chrome.

Installez le plug-in WEBRTC Control en fonction des instructions pour.

WEBRTC est une API fournie par un navigateur et vous permet d'organiser la connexion P2P et le transfert de données directement entre les navigateurs. Sur Internet, il y a plusieurs manuels pour écrire votre propre chat vidéo à l'aide de WEBRTC. Par exemple, voici un article sur Habré. Cependant, tous sont limités à la connexion de deux clients. Dans cet article, je vais essayer de dire comment organiser la connexion et la messagerie entre trois et plus d'utilisateurs à l'aide de WEBRTC.

L'interface RTCPEerconnection est une connexion entre pairs entre deux navigateurs. Pour connecter trois utilisateurs et plus, nous devrons organiser un réseau de mailles (un réseau dans lequel chaque nœud est connecté à tous les autres nœuds).
Nous utiliserons le schéma suivant:

  1. Lors de l'ouverture d'une page, vérifiez la présence de l'ID de la pièce dans lieu.Hash.
  2. Si l'identifiant de la pièce n'est pas spécifié, nous générons un nouveau
  3. Nous envoyons un serveur de signalisation "le message sur ce que nous voulons rejoindre la salle spécifiée
  4. Signaling Server compose le reste des clients dans cette pièce une nouvelle alerte utilisateur
  5. Les clients qui sont déjà à la chambre envoient une nouvelle offre SDP
  6. Newbie répond pour offrir "s

0. Signaling Server

Comme vous le savez, au moins WEBRTC et fournit la possibilité de connexions P2P entre les navigateurs, elle nécessite toujours un moyen de transport supplémentaire pour échanger des messages de service. Dans cet exemple, le serveur WebSocket écrit sur Node.js à l'aide de Socket.IO agit comme un tel transport.

Var socket_io \u003d nécessite ("socket.io"); module.exports \u003d (serveur) (var utilisateurs \u003d (); var io \u003d socket_io (serveur); io.on ("raccordement", fonction (// désire d'un nouvel utilisateur rejoindre la socket.on salle (" Chambre ", fonction (message) (var json \u003d json.parse (message); // Ajouter une prise à la liste des utilisateurs utilisateurs \u003d Prise; Si (socket.room! \u003d\u003d Undefined) (// Si la prise est déjà dans une certaine pièce, sortez-en-t-il (socket.room);) // Entrez la prise de la pièce demandée.Rouse \u003d Json.room; socket.join (socket.roid); socket.user_id \u003d json.id; / / Envoyer au reste des clients de cette pièce, un message sur rejoindre une nouvelle prise de membre.Broadcast.to (socket.room) .emit ("Nouveau", json.id);)); // Message lié à webrtc ( Offre SDP, réponse SDP ou candidat à glace) socket.on ("webrtc", fonction (message) (message); si (json.to! \u003d\u003d indéfini && utilisateurs! \u003d\u003d Undefined) (// Si le message est spécifié par Le destinataire et ce destinataire connu du serveur, envoyez un message seulement pour lui ... des utilisateurs.emit ("webrtc", message); ) Sinon (// ... sinon nous considérons le message en diffusant la socket.Broadcast.to (socket.room) .emit ("WEBRTC", message);)));)); // quelqu'un a déconnecté socket.on ("déconnecter", fonction () (// Lorsque vous déconnectez le client, nous en informons sur cette autre socket.Broadcast.to (socket.room) .emit ("laisser", socket.user_id); Supprimer les utilisateurs;)); )); );

1. index.html

Le code source de la page elle-même est assez simple. Je n'ai consciemment pas prêté attention à la mise en page et à une autre belle, car cet article n'est pas à ce sujet. Si quelqu'un veut, faites-le bien, ne fonctionnera pas beaucoup de difficulté.

Démo de chat de WEBRTC.

Connecté à. 0 Pairs.

2. Main.js.

2.0. Recevoir des liens vers des éléments de page et des interfaces WEBRTC
var chatlog \u003d document.getElementyID ("chatlog"); var message \u003d document.getelementyID ("message"); Var Connection_num \u003d Document.getElementByID ("Connection_num"); var room_link \u003d document.getelementByID ("room_link");

Nous devons toujours utiliser des préfixes de navigateur pour accéder aux interfaces WEBRTC.

Var peerconnection \u003d fenêtre.mozrtcpeercection || Fenêtre.webkitrtcpeercection; Var sessiondescription \u003d fenêtre.mozrtcsessionDescription || Window.rtcsessionDescription; var opecandidate \u003d fenêtre.mozrtcicecandidate || Window.rtcicecandidate;

2.1. Définition id de la pièce

Ici, nous aurons besoin d'une fonction pour générer un identifiant unique de la pièce et de l'utilisateur. Nous utiliserons UUID à ces fins.

Fonction uuid () (retour math.floor () (math.random () * 0x10000) .Tostring (16);); retour S4 () + S4 () + "-" + S4 () + "-" + S4 () + "-" + S4 () + "-" + S4 () + "-" + S4 () + "-" + S4 () + S4 () + S4 (););

Essayons maintenant de tirer l'identifiant de la pièce de l'adresse. Si tel n'est pas spécifié, nous allons générer une nouvelle. Apportons le lien vers la pièce actuelle à la page et, pour une, générera l'identifiant de l'utilisateur actuel.

Var Room \u003d Emplacement.Hash.Substr (1); Si (! Chambre) (chambre \u003d uuid ();) room_link.innerhtml \u003d "lien vers la pièce"; var me \u003d uuid ();

2.2. Websocket.

Immédiatement lors de l'ouverture de la page, vous vous connectez à notre serveur de signalisation "Y, envoyez une demande d'entrée dans la salle et de spécifier les gestionnaires de messages.

// Nous spécifions que lorsque vous fermez le message, vous devez envoyer le serveur à la prise Var \u003d io.connect ("", ("Synchroniser la déconnexion sur le déchargement": true)); socket.on ("webrtc", sockétreceed); socket.on ("Nouveau", SocketNewPeer); // Envoie immédiatement une demande d'entrer dans la salle Socket.emit room ("salle", json.stringify ((id: moi, salle: chambre)); // Fonction auxiliaire Pour envoyer des messages d'adresse associés à la fonction WEBRTC SendVIASCocket (type, message, à) (socket.emit ("webrtc", json.stringify ((ID: ME, TO: to, Tapez: Type, Données: Message) )));)

2.3. Paramètres Peerconnection

La plupart des fournisseurs fournissent une connexion Internet via NAT. Pour cette raison, la connexion directe ne devient pas une affaire si triviale. Lors de la création d'une connexion, nous devons spécifier la liste des serveurs d'étourdissement et de tournant que le navigateur essaiera d'utiliser pour contourner NAT. Nous spécifions également une paire d'options supplémentaires pour la connexion.

Var Server \u003d (URL: [URL: "Stun: 23.21.150.121"), (URL: "Stun:" Stun.l.google.com: 19302 "), (URL:" Turn: numb.viagenie.ca ", Cidéologie : "Votre mot de passe va ici", nom d'utilisateur: " [Email protégé]")])] Options de var \u003d (facultatif: [(DTLSSRTPKeyGreement: true), // requis pour se connecter entre chrome et firefox (RTPDataChalnels: true) // requis dans Firefox à utiliser API de DataChaneLels])

2.4. Connecter un nouvel utilisateur

Lorsqu'un nouveau festin est ajouté à la pièce, le serveur nous envoie un message. nouveau. Selon les gestionnaires de messages spécifiés ci-dessus, une fonction appellera une fonction. socketnewpeeer.

Var pairs \u003d (); Fonction SocketNewPeer (Data); // Créer une nouvelle connexion Var PC \u003d Nouvelle Peerconnection (serveur, options); // Initialisation IT initConnection (PC, données, "OFFRE"); // Gardez le PIR dans la liste des peers.Connection \u003d PC; // Créez DataChannel pour lequel var canal \u003d pc.createdatachlanneau ("myChannel", ()); canal.owner \u003d données; peers.channel \u003d canal; // Installation des liants d'événements Bindervents de canal (canal); // Créer le SDP; Offre pc.crereeoffer (fonction (offre));) Fonction initconnection (PC, ID, SDPType) (PC.Onicecandidate \u003d Fonction (Event) (if (Event.candidate) (// Quand la nouvelle glace d'un candidat est détectée, ajoutez-la à La liste pour envoyer d'autres peers.candidatecache.push (Event.candidate);) Sinon (// Lorsque la détection du candidat est terminée, le gestionnaire sera appelé à nouveau, mais sans candidat // dans ce cas, nous envoyons une première offre de SDP de peur ou alors Réponse SDP (selon le paramètre de fonction) ... SendVIASCocket (sdptype, pc.localdescription, ID); // ... puis tous ont déjà trouvé de glace candidats pour (var i \u003d 0; i< peers.candidateCache.length; i++) { sendViaSocket("candidate", peers.candidateCache[i], id); } } } pc.oniceconnectionstatechange = function (event) { if (pc.iceConnectionState == "disconnected") { connection_num.innerText = parseInt(connection_num.innerText) - 1; delete peers; } } } function bindEvents (channel) { channel.onopen = function () { connection_num.innerText = parseInt(connection_num.innerText) + 1; }; channel.onmessage = function (e) { chatlog.innerHTML += "

Peer dit: "+ E.Data +"
"; }; }

2.5 Offre SDP, réponse SDP, Candidat de glace

Dès réception de l'un de ces messages, appelez le gestionnaire du message correspondant.

Fonction Socketreceiveed (données) (données); commutateur (json.type) (candidat) (json.id, json.data); casse; cas "Offre": remoteoFFERReceived (JSON. Id, json.data); casse; cas " Réponse ": RemoteanswErreceived (json.id, json.data); pause;))

2.5.0 offre SDP.
Fonction RemoteFerrececeived (ID, données) (CréationConnection (ID); Var PC \u003d peers.Connection; PC.SeRemoteDeption (Données); PC.Createnswe (Fonction) (réponse););) Fonction CreateConnection (ID) (Paiers \u003d\u003d\u003d indéfini) (pairs \u003d (candidatecache :); var pc \u003d nouvelle peerconnection (serveur, options); initconnection (PC, ID, "Réponse"); peers.connection \u003d PC; PC.ONDAtaCharnel \u003d Fonction (E ) (peers.channel \u003d e.channel; peers.channel.owner \u003d id; Bindantales (peers.channel);))))
2.5.1 réponse SDP.
Fonction RemoteanswErreceived (ID, données) (Var PC \u003d peers.Connection; PC.SetremoteDesription (Nouvelle SessionDescription (Données));)
2.5.2 Candidat de glace.
Fonction RemoteCandidateCed (ID, données) (CréationConnection (ID); Var PC \u003d peers.Connection; pc.addicecandidate (nouveau ICECANDIDATE (données);)
2.6. Envoi d'un message

En appuyant sur le bouton Envoyer. La fonction est appelée envoyer le message.. Tout ce qu'elle fait est transmis sur la liste des pairs et tente d'envoyer le message spécifié à tous.

L'objectif de cet article est sur un échantillon de démonstration du chat vidéo de pair (chat vidéo P2P) pour se familiariser avec sa structure et son principe de travail. À cette fin, nous utilisons l'échantillon de démonstration multi-utilisateurs de la discussion vidéo à peering webrtc.io-démo. Il peut être téléchargé par référence: https://github.com/webrtc/webrtc.io-demo/tree/master/Site.

Il convient de noter que GitHub est un site Web ou un service Web pour un développement commun de projets Web. Sur les développeurs informatiques peuvent placer des codes de leurs développements, en discuter et communiquer les uns avec les autres. En outre, certaines grandes entreprises informatiques placent leurs référentiels officiels sur ce site. Le service est gratuit pour des projets open source. GitHub est un référentiel de bibliothèques de bibliothèque, code source libre.

Donc, téléchargée à partir de l'échantillon de démonstration GitHub, un échantillon de démonstration de pair, pour publier sur le disque avec un ordinateur personnel dans le répertoire créé pour notre application "webrtc_demo".


Figure. une

Comme suit la structure (figure 1), la chat vidéo par pair est composée de scripts client.js et de serveur Server.js Scripts implémentés dans la langue de programmation JavaScript. Script (bibliothèque) webrtc.io.js (Client) - fournit des communications en temps réel entre les navigateurs peer-nommée: "Client client" et webrtc.i.js (client) et webrtc.i.js (serveur), Utilisation du protocole WebSocket, fournissez une connexion en duplex entre le navigateur et le serveur Web d'architecture client-serveur.

Le script webrtc.io.js (serveur) entre dans la bibliothèque WEBRTC.IO et se trouve dans le répertoire Node_Modules \\ webrTC.IO \\ lib. L'interface du chat vidéo Index.html est implémentée sur HTML5 et CSS3. Le contenu des fichiers d'application webrtc_demo peut être visualisé l'un des éditeurs HTML, tels que "Notepad ++".

Le principe de la discussion vidéo sera vérifié dans le système de fichiers PC. Pour démarrer le serveur (serveur.js) sur le PC, vous devez définir le nœud.js Runtime. Nœud.js vous permet d'exécuter JavaScript en dehors du navigateur. Vous pouvez télécharger node.js par référence: http://nodejs.org/ (version V0.10.13 le 07/15/13). Sur la page principale du site Web Node.org, cliquez sur le bouton Télécharger et accédez à http://nodejs.org/download/. Pour les utilisateurs de Windows, vous téléchargez d'abord Win.Installer (.msi), puis exécutez Win.Installer (.msi) sur le PC et installez NDEJS et "NPM Package Manager" dans le répertoire des fichiers de programme.




Figure. 2.

Ainsi, nœud.js consiste en un environnement de développement et d'exécution de code JavaScript, ainsi qu'à partir d'un ensemble de modules internes pouvant être installés à l'aide d'un gestionnaire de paquets NPM ou d'un gestionnaire.

Pour installer les modules, il est nécessaire d'exécuter la commande sur la ligne de commande dans le répertoire d'applications (par exemple, "webrtc_demo): nPM Installation nom_module. Pendant le processus d'installation, les modules de gestionnaire NPM créent le dossier Node_Modules dans le répertoire à partir duquel l'installation a été effectuée. En cours de fonctionnement, NodeJS connecte automatiquement les modules du répertoire Node_Modules.

Ainsi, après avoir installé Node.js, nous ouvrons la ligne de commande et mettons à jour le module Express dans le répertoire de dossier Node_Modules webrtc_demo à l'aide du gestionnaire de packages NPM:

C: \\ webrtc_demo\u003e NPM Install Express

Le module Express est un cadre Web pour Node.js ou une plate-forme Web pour développer des applications. Pour avoir un accès mondial à express, vous pouvez la définir de cette manière: nPM Installer -g Express.

Ensuite, je vais mettre à jour le module webrtc.io:

C: \\ webrtc_demo\u003e NPM installer webrtc.io

Ensuite, dans l'invite de commande, lancez le serveur: serveur.js:

C: \\ webrtc_demo\u003e nœud server.js


Figure. 3.

Tout, le serveur fonctionne avec succès (Figure 3). Maintenant, à l'aide d'un navigateur Web, vous pouvez contacter le serveur via l'adresse IP et télécharger la page Web Index.html avec laquelle le navigateur Web récupérera le code du script client - script.js et le code de la WEBRTC.IO. Code de script JS et les exécutez. Pour le fonctionnement de la touche Video homologue (pour installer une connexion entre deux navigateurs), il est nécessaire de recevoir deux navigateurs prenant en charge WEBRTC, contactez l'adresse IP sur le serveur de signal en cours d'exécution sur Node.js.

En conséquence, l'interface de la partie client de l'application de communication (chat vidéo) s'ouvre avec une demande de résolution de l'accès à la chambre et au microphone (Fig. 4).



Figure. quatre

Après avoir cliqué sur le bouton "Autoriser", la caméra et le microphone pour la communication multimédia sont connectés. De plus, via l'interface de chat vidéo peut être communiquée avec des données de texte (Fig. 5).



Figure. cinq

Il convient de noter que. Le serveur est alarme et est principalement conçu pour définir la connexion entre les navigateurs d'utilisateurs. Pour le script Server Server.js Server, fournissant des alarmes WEBRTC, utilise node.js.

La plupart des matériaux dans Webrtc. Axé sur le niveau appliqué du code d'écriture et ne contribue pas à la compréhension de la technologie. Essayons d'approfondir et de déterminer comment se passe la connexion, quelle est une poignée de session et des candidats à ce dont vous avez besoin Étourdir. et Tour Serveur.

Webrtc.

introduction

WEBRTC - Technologie orientée du navigateur qui vous permet de connecter deux clients pour la transmission de données vidéo. Caractéristiques principales - Prise en charge interne des navigateurs (je n'ai pas besoin de technologies de type introduites par des tiers adobe Flash.) et la possibilité de connecter des clients sans utiliser de serveurs supplémentaires - connexion d'égal à égal (Plus loin, p2p.).

Établir une connexion p2p. - une tâche assez difficile, car les ordinateurs n'ont pas toujours du public IP. Adresses, c'est-à-dire adresses sur Internet. En raison d'une petite quantité IPv4. Les adresses (et à des fins de sécurité) Le mécanisme a été développé Nat.Ce qui vous permet de créer des réseaux privés, par exemple, pour une utilisation à la maison. De nombreux routeurs à domicile sont maintenant pris en charge. Nat. Et grâce à cela, tous les appareils à domicile ont accès à Internet, bien que les fournisseurs Internet fournissent généralement une IP. adresse. Publique IP. Les adresses sont uniques sur Internet et des notes privées. Donc connecter p2p. - difficile.

Afin de mieux comprendre, considérez trois situations: les deux nœuds sont sur le même réseau. (Image 1)Les deux nœuds sont dans différents réseaux (un en privé, autre en public) (Figure 2) et les deux nœuds sont dans différents réseaux privés avec le même IP. Adresses (Figure 3).

Figure 1: Les deux nœuds du même réseau

Figure 2: Nœuds dans différents réseaux (un en privé, autre en public)

Figure 3: Nœuds de différents réseaux privés, mais avec des adresses numériquement égales

Sur les figures au-dessus de la première lettre en double notation symbolique, le type d'unité (p \u003d pair., R \u003d. routeur.). Dans le premier dessin, la situation est favorable: les nœuds de leur réseau sont tout à fait identifiés par le réseau IP. adresses et peuvent donc être connectés directement les uns aux autres. Dans le deuxième dessin, nous avons deux réseaux différents, qui ont une numération similaire de nœuds. Voici des routeurs (routeurs), qui ont deux interfaces réseau - dans leur réseau et en dehors de leur réseau. Alors ils ont deux IP. Adresses. Les nœuds conventionnels n'ont qu'une interface à travers laquelle ils ne peuvent communiquer que dans leur réseau. S'ils transmettent des données à une personne en dehors de leur réseau, alors seulement avec Nat. à l'intérieur du routeur (routeur) et donc visible pour les autres sous IP. L'adresse du routeur est leur externe IP. adresse. Donc le nœud p1 il y a intérieur IP. = 192.168.0.200 et externe IP. = 10.50.200.5 De plus, la dernière adresse sera également externe pour tous les autres nœuds de son réseau. Situation similaire et pour un nœud p2.. Par conséquent, leur connexion est impossible si elles utilisent uniquement leur interne (leur propre) IP. Adresses. Vous pouvez utiliser des adresses externes, c'est-à-dire des adresses de routeur, mais, puisque tous les nœuds d'un réseau privé, la même adresse externe est assez difficile. Ce problème est résolu en utilisant le mécanisme Nat.

Que se passera-t-il si nous décidons toujours de connecter des nœuds à travers leurs adresses internes? Les données ne vont pas au-delà du réseau. Pour améliorer l'effet, vous pouvez imaginer que la situation décrite dans la dernière figure - dans les deux nœuds coïncident les adresses internes. S'ils les utilisent pour la communication, chaque nœud communiquera avec lui-même.

Webrtc. Aboutit avec succès avec de tels problèmes à l'aide du protocole GLACE, qui est vrai, nécessite l'utilisation de serveurs supplémentaires ( Étourdir., Tour). À propos de tout cela ci-dessous.

Deux phases WEBRTC.

Pour connecter deux nœuds à travers le protocole Webrtc. (ou simplement RtcSi deux sont contraignants iPhone.'A) Il est nécessaire de mener des actions préliminaires pour établir une connexion. Ceci est la première phase - réglage de la connexion. La deuxième phase est le transfert de données vidéo.

Immédiatement, il convient de dire que, au moins la technologie Webrtc. Dans son travail utilise de nombreuses façons différentes de communiquer ( TCP. et Udp.) et a une commutation flexible entre eux, cette technologie n'a pas de protocole de transmission de données de connexion. Pas surprenant, après tout, connecter deux nœuds p2p. Pas si facile. Par conséquent, il est nécessaire d'avoir certains additionnel La méthode de transfert de données, en aucun cas associé à Webrtc.. Il peut s'agir d'une transmission de socket, de protocole Http.Il peut même être un protocole SMTP. Ou poste russe. Ce mécanisme de transmission primaire Les données sont appelées signal. Vous devez passer tellement d'informations. Toutes les données sont transmises sous forme de texte et sont divisées en deux types - SDP. et Candidat de glace.. Le premier type est utilisé pour établir un composé logique et la seconde pour physique. En détail sur tout cela plus tard, mais seulement il est important de se rappeler que Webrtc. Cela nous donnera des informations qui devront transmettre à un autre nœud. Dès que nous accordons toutes les informations nécessaires, les nœuds seront en mesure de se connecter et n'ont plus besoin de notre aide. Ainsi, le mécanisme de signal que nous devons mettre en œuvre séparément, sera utilisé seulement quand connectéet lorsque la transmission de données vidéo ne sera pas utilisée.

Donc, considérez la première phase - la phase de connexion de la connexion. Il se compose de plusieurs articles. Considérez d'abord cette phase pour un nœud qui initie la connexion, puis pour l'attente.

  • Initiateur (appelant - votre interlocuteur):
    1. Offre Démarrer le transfert de données vidéo (Createoffer)
    2. Obtenir votre SDP. SDP.)
    3. Obtenir le vôtre Candidat de glace. Candidat de glace.)
  • Appel en attente ( callee.):
    1. Obtenir un flux multimédia local (votre) et installez-le pour la transmission (GetTusermediatreream)
    2. Obtenir une phrase pour démarrer les données de transmission vidéo et la création d'une réponse (Creeenswer)
    3. Obtenir votre SDP. objet et transmission à travers le mécanisme de signal ( SDP.)
    4. Obtenir le vôtre Candidat de glace. objets et les transmettre à travers le mécanisme de signal ( Candidat de glace.)
    5. Obtenir un flux de média distant (extraterrestre) et l'affichage à l'écran (Onadstream)

Différence que dans le deuxième paragraphe.

Malgré la confusion apparemment des étapes, il y a en fait trois: l'envoi de son flux de média (clause 1), définissant les paramètres composés (PP.2-4), obtenant le flux de quelqu'un d'autre (p.5). Le plus compliqué est la deuxième étape, car il se compose de deux parties: établissement physique et logique Connexions. Le premier indique cheminÀ travers quels packages devraient aller d'un nœud réseau à un autre. La seconde indique paramètres vidéo / audio - Quoi utiliser la qualité pour utiliser les codecs.

Scène mentalement createoFer. ou alors creeenwer. Il devrait être connecté aux étapes de la transmission SDP. et Candidat de glace. objets.

Essences principales

Streams multimédia (MediaStream)

L'essence principale est le flux multimédia, c'est-à-dire le flux de données vidéo et audio, l'image et le son. Les flux de médias sont deux types - locaux et supprimés. La locale reçoit des données des périphériques d'entrée (caméra, microphone) et distant sur le réseau. Ainsi, chaque nœud a un flux local et distant. DANS Webrtc. Pour les flux, il y a une interface Mediamstream et aussi il y a une sous-interface Localmediatream Surtout pour le flux local. DANS Javascript. Vous ne pouvez rencontrer d'abord que et si vous utilisez libjingleEnsuite, vous pouvez faire face à la seconde.

DANS Webrtc. Il y a une hiérarchie plutôt confuse à l'intérieur du ruisseau. Chaque fil peut être composé de plusieurs pistes multimédia ( Médiévier), qui peut se composer de plusieurs canaux multimédia ( Médias). Et les flux de médias eux-mêmes peuvent également être quelque peu.

Considérez tout dans l'ordre. Pour cela, nous garderons un exemple à l'esprit. Supposons que nous voulions transmettre non seulement la vidéo de nous-mêmes, mais aussi la vidéo de notre table, sur laquelle un morceau de papier sur lequel nous allons écrire quelque chose. Nous aurons besoin de deux vidéos (We + Table) et d'un audio (nous). Il est clair que nous et la table devraient être divisés en différents flux, car ces données dépendent probablement de l'autre. Donc nous aurons deux Mediamstream'A est un pour nous et un pour la table. Le premier contiendra des données vidéo et audio, et la seconde est la vidéo uniquement (Figure 4).

Figure 4: Deux flux de médias différents. Un pour nous un pour notre table

Il est immédiatement clair que le flux de média doit au moins inclure la possibilité de contenir des données de différents types - vidéo et audio. Ceci est pris en compte dans la technologie et donc chaque type de données est implémenté via la piste multimédia. Médiévier. Médias Track a une propriété spéciale. gentil.qui détermine cela devant nous - vidéo ou audio (Figure 5)

Figure 5: Les flux de support sont constitués de pistes multimédia

Comment tout se passera-t-il dans le programme? Nous allons créer deux flux média. Ensuite, créez deux pistes vidéo et une piste audio. Nous avons accès aux caméras et au microphone. Nous spécifions chaque piste que le périphérique à utiliser. Ajoutez une piste vidéo et audio dans le premier flux multimédia et la piste vidéo d'une autre caméra dans le deuxième flux multimédia.

Mais comment distinguons-nous les flux de média à l'autre extrémité de la connexion? Pour cela, chaque flux de média a une propriété. Étiqueter - Marque d'écoulement, son nom (Figure 6). La même propriété a une piste multimédia. Bien que, au premier abord, il semble que la vidéo du son puisse être distinguée par d'autres moyens.

Figure 6: Les flux de support et les pistes sont identifiés par des balises

Ainsi, et si les pistes multimédia peuvent être identifiées après l'étiquette, alors pourquoi devrions-nous utiliser deux flux média pour notre exemple, au lieu d'un? Après tout, vous pouvez transférer un flux multimédia et les pistes utilisent des chemins différents. Nous avons atteint la propriété importante des flux de médias - ils synchroniser Pistes multimédia. Différents flux de média ne sont pas synchronisés les uns avec les autres, mais dans chaque flux multimédia, toutes les pistes jouer en même temps.

Ainsi, si nous voulons nos mots, nos émotions sur le visage et nos feuilles de papier sont reproduites en même temps, cela vaut la peine d'utiliser un flux média. Si ce n'est pas si important, il est plus rentable d'utiliser différents flux - la photo sera plus lisse.

Si une piste doit être déconnectée pendant la transmission, vous pouvez utiliser la propriété. activée. Pistes multimédia.

À la fin, il convient de penser au son stéréo. Comme vous le savez, le son stéréo est deux sons différents. Et il est nécessaire de les transmettre séparément. Pour ce faire, les canaux sont utilisés. Médias. Le chemin de son de média peut avoir de nombreux canaux (par exemple, 6, si vous avez besoin d'un son 5 + 1). À l'intérieur des canaux de piste multimédia, bien sûr aussi synchronisé. Pour la vidéo, un seul canal est généralement utilisé, mais plusieurs, par exemple, pour la publicité sont utilisés.

Résumation: Nous utilisons le flux multimédia pour transférer des données vidéo et audio. Dans chaque flux de média, les données sont synchronisées. Nous pouvons utiliser plusieurs flux de média si nous n'avons pas besoin de synchronisation. Dans chaque flux de média, une piste multimédia de deux types - pour la vidéo et pour l'audio. Les pistes ne sont généralement pas plus de deux, mais peut-être plus si vous devez transmettre plusieurs vidéos différentes (interlocuteur et ses tables). Chaque piste peut être composée de plusieurs canaux, généralement utilisés uniquement pour le son stéréo.

Dans la situation la plus simple du chat vidéo, nous aurons un flux multimédia local, qui consistera en deux pistes - pistes vidéo et pistes audio, chacune composée d'un canal principal. La piste vidéo est responsable de la caméra, la piste audio est par microphone et le flux multimédia est le conteneur.

Descripteur de session (SDP)

Différents ordinateurs auront toujours différentes caméras, microphones, cartes vidéo et autres équipements. Il existe de nombreux paramètres avec lesquels ils possèdent. Tout cela doit être coordonné pour la transmission de données multimédia entre deux nœuds de réseau. Webrtc. Est-ce que c'est automatiquement et crée un descripteur de session d'objet spécial SDP.. Passez cet objet à un autre nœud et vous pouvez transmettre des données multimédia. Seulement avec la connexion avec un autre noeud n'est pas encore.

Pour ce faire, utilisez n'importe quel mécanisme de signalisation. SDP. Vous pouvez transmettre au moins à travers les sockets, au moins une personne (informez-la avec un autre noeud par téléphone), même par courrier de la Russie. Tout est très simple - vous serez prêt SDP. Et il doit être envoyé. Et lors de la réception de l'autre côté - pour transférer au département Webrtc.. La poignée de session est stockée en tant que texte et peut être modifiée dans ses applications, mais, en règle générale, il n'est pas nécessaire. À titre d'exemple, lors de la connexion, le bureau doit parfois être obligé de sélectionner le codec audio souhaité.

Habituellement, lorsque la connexion est définie, vous devez spécifier une adresse, par exemple URL. Il n'y a pas besoin de cela, car dans le mécanisme de signalisation, vous envoyez vous-même les données de destination. Indiquer Webrtc.Ce que nous voulons installer p2p. La connexion que vous souhaitez appeler la fonction Createoffer. Après avoir appelé cette fonctionnalité et des instructions à sa spéciale rappeler'A sera créé SDP. objet et transféré au même rappeler. Tout ce qui est requis de votre part est de transférer cet objet sur le réseau vers un autre noeud (interlocuteur). Après cela, à l'autre extrémité, les données viendront par le mécanisme de signal, à savoir ceci SDP. un objet. Ce gérant de la session pour ce nœud est quelqu'un d'autre et comporte donc des informations utiles. Obtenir cet objet est un signal au début de la connexion. Par conséquent, vous devez accepter cela et appeler la fonction CreeenaNswer. Elle est un analogue complet de CreeCeoffer. Encore dans votre rappeler Un descripteur de session locale sera passé et il sera nécessaire de transférer sur le mécanisme de signalisation.

Il convient de noter qu'il est possible d'appeler la fonction CreeenaNswer uniquement après avoir reçu quelqu'un d'autre SDP. objet. Pourquoi? Parce que local SDP. L'objet qui sera généré lors de l'appel de Creeenswer doit compter sur la télécommande SDP. un objet. Ce n'est que dans ce cas, il est possible de coordonner vos paramètres vidéo avec les paramètres de l'interlocuteur. Il ne vaut également pas la peine d'appeler Creeenswer et Createoffer avant de recevoir un flux de médias local - ils n'auront rien à écrire SDP. un objet .

Comme B. Webrtc. Il est possible de modifier SDP. Objet, après réception du descripteur local, il doit être installé. Il peut sembler un peu étrange que vous devez transmettre Webrtc. Le fait qu'elle nous ait donné, mais le protocole. Lorsque vous recevez un descripteur distant, vous devez également être installé. Par conséquent, vous devez installer deux descripteurs sur un nœud - votre propre et quelqu'un d'autre (c'est-à-dire, local et distant).

Après ça poignée de main Les nœuds connaissent les souhaits l'un de l'autre. Par exemple, si le nœud 1 Prend en charge les codecs UNE. et B.et noeud 2 Prend en charge les codecs B. et C., puisque chaque nœud connaît ses propres descripteurs et les descripteurs de quelqu'un d'autre, les deux nœuds choisiront un codec B. (Figure 7). La logique de connexion est maintenant installée et les flux de support peuvent être transmis, mais il y a un autre problème - les nœuds sont toujours associés à un mécanisme de signalisation.


Figure 7: Coordination du codec

Candidats (candidat à glace)

La technologie Webrtc. Essaie de nous confondre avec sa nouvelle méthodologie. Lorsque la connexion est installée, l'adresse de ce nœud n'est pas spécifiée avec laquelle vous devez vous connecter. Installé en premier logique connexion et non physiqueBien que cela ait toujours été fait au contraire. Mais il ne semblera pas étrange si vous n'oubliez pas que nous utilisons un mécanisme de signalisation tiers.

Donc, la connexion est déjà installée (connexion logique), mais il n'y a pas de chemin avec lequel les nœuds de réseau peuvent transmettre des données. Ce n'est pas si facile ici, mais commençons par un simple. Laissez les nœuds sont dans un réseau privé. Comme nous le savons déjà, ils peuvent facilement se connecter à l'autre dans leur intérieur IP. adresses (ou peut-être pour un autre, sinon utilisé TCP / IP.).

À travers certains rappeler'et Webrtc. Dites-nous Candidat de glace. Objets. Ils entrent également sous forme de texte et, comme avec les descripteurs de session, ils doivent simplement transmettre le mécanisme de signalisation. Si le descripteur de session contenait des informations sur nos installations au niveau de la chambre et du microphone, les candidats contiennent des informations sur notre emplacement sur le réseau. Transférez-les vers un autre nœud et il sera en mesure de vous connecter physiquement avec nous et qu'il dispose déjà d'un descripteur de session, il est logiquement capable de se connecter et du «flux» de données. S'il n'oublie pas, envoyez-nous et son objet du candidat, c'est-à-dire des informations sur l'endroit où il se trouve sur le réseau lui-même, nous pouvons ensuite vous connecter avec cela. Notez ici une autre différence de l'interaction classique client-serveur. La communication avec le serveur HTTP se produit conformément au schéma de requête-réponse, le client envoie des données au serveur, il les traite et les envoie. l'adresse spécifiée dans le package de demande. DANS Webrtc. Dois savoir deux adresses et connectez-les des deux côtés.

La différence des descripteurs de session est que seuls les candidats distants sont nécessaires. La modification est interdite et ne peut apporter aucun avantage. Dans certaines implémentations Webrtc. Les candidats doivent être installés uniquement après l'installation des descripteurs de session.

Et pourquoi le descripteur de session est-il seul et peut-être qu'il peut y avoir beaucoup de candidats? Parce que l'emplacement sur le réseau peut être déterminé non seulement par son intérieur IP. adresse, mais aussi l'adresse externe du routeur, et pas nécessairement une, ainsi que des adresses Tour Les serveurs. Le reste du paragraphe sera consacré à la prise en compte détaillée des candidats et à la manière de connecter des nœuds de différents réseaux privés.

Donc, deux nœuds sont sur le même réseau (Figure 8). Comment les identifier? Passant par IP. adresses. Pas d'autre chemin. Vrai, vous pouvez toujours utiliser différents transports ( TCP. et Udp.) et différents ports. Ceci est l'information contenue dans l'objet du candidat - IP., Port., Transport. Et d'autres. Laisser, par exemple, utilisé Udp. Transport I. 531 Port.

Figure 8: Deux nœuds sont sur le même réseau.

Ensuite, si nous sommes dans le nœud p1T. Webrtc. Donnez-nous un tel objet du candidat - . Il n'y a pas de format précis ici, mais seulement un schéma. Si nous sommes dans le nœud p2., alors le candidat est . À travers le mécanisme d'alarme p1 Obtenir un candidat p2. (C'est l'emplacement du nœud p2., à savoir son IP. et Port.). Puis p1 peut connecter S. p2. directement. Plus correct, p1 Enverra des données à l'adresse 10.50.150.3:531 Dans l'espoir qu'ils vont atteindre p2.. Peu importe si cette adresse appartient au nœud p2. Ou un intermédiaire. Il est seulement important que, grâce à cette adresse, les données soient envoyées et peuvent atteindre p2..

Pendant que les nœuds du même réseau - tout est simple et facile - chaque nœud n'a qu'un seul objet du candidat (ce qui signifie toujours le sien, c'est-à-dire son emplacement sur le réseau). Mais les candidats seront beaucoup plus quand les nœuds seront dans différent réseaux.

Passons à une occasion plus complexe. Un nœud sera derrière le routeur (plus précisément, pour NAT), et le deuxième nœud sera sur le même réseau avec ce routeur (par exemple, sur Internet) (Figure 9).

Figure 9: Un noeud pour Nat, autre non

Ce cas a une solution particulière au problème que nous examinons maintenant. Le routeur de la maison contient généralement une table Nat.. Il s'agit d'un mécanisme spécial conçu pour garantir que les nœuds à l'intérieur du réseau privé du routeur peuvent gérer, par exemple, sur des sites Web.

Supposons que le serveur Web soit connecté à Internet directement, c'est-à-dire public. IP.* adresse. Que ce soit un nœud p2.. Nouer p1 (Client Web) Envoyer une demande à l'adresse 10.50.200.10 . Tout d'abord, les données tombent sur le routeur r1, ou plutôt sur son intérieur interface 192.168.0.1 . Après cela, le routeur se souvient de l'adresse de la source (adresse p1) et l'entre dans une table spéciale Nat., puis change l'adresse source à son ( p1 r1). Ensuite, à sa manière extérieur L'interface de routeur a envoyé des données directement sur le serveur Web p2.. Le serveur Web traite les données génère la réponse et renvoie. Envoie le routeur r1Puisque c'est celui qui se tient dans l'adresse opposée (le routeur a remplacé l'adresse). Le routeur obtient des données, regarde dans la table Nat. et transmet ces nœuds p1. Le routeur agit ici comme un intermédiaire.

Et si plusieurs nœuds du réseau interne se tournent simultanément vers le réseau externe? Comment le routeur comprendra qui envoie la réponse? Ce problème est résolu avec portov. Lorsque le routeur remplace l'adresse du nœud à son, elle remplace également le port. Si deux nœuds font appel à Internet, le routeur remplace ses ports source sur différent. Ensuite, lorsque l'emballage du serveur Web revient sur le routeur, le routeur comprendra le port que ce paquet est attribué. Exemple ci-dessous.

Retourner à la technologie Webrtc., ou plutôt, à sa part qui utilise GLACE Protocole (d'ici et GLACE Candidats). Nouer p2. a un candidat (son emplacement dans le réseau - 10.50.200.10 ), et le noeud p1Ce qui est derrière le routeur avec Nat aura deux candidats - local ( 192.168.0.200 ) et le candidat du routeur ( 10.50.200.5 ). Le premier n'est pas utile, mais il est néanmoins généré, car Webrtc. Il ne sait rien sur le nœud distant - il peut être dans le même réseau, et peut-être pas. Le deuxième candidat sera utile et, comme nous le savons déjà, le port jouera un rôle important (à passer par Nat.).

Enregistrer dans la table Nat. Il n'est généré que lorsque les données sortent du réseau interne. Par conséquent, le nœud p1 Doit être le premier à transférer des données et seulement après ce nœud p2. sera capable d'arriver au noeud p1.

Sur la pratique les deux nœuds sera en Nat.. Pour créer une entrée dans la table Nat. Chaque routeur, les nœuds doivent envoyer quelque chose au nœud distant, mais cette fois ni le premier ne peut aller au deuxième ni le contraire. Cela est dû au fait que les nœuds ne connaissent pas leur externe IP. Adresses et envoyer des données aux adresses internes sans signification.

Toutefois, si les adresses externes sont connues, la connexion sera facilement installée. Si le premier nœud est déployé des données sur le deuxième routeur de nœud, le routeur les ignore, car sa table Nat. Tandis que vide. Cependant, dans le premier routeur de nœud dans la table Nat. Un enregistrement nécessaire. Si le deuxième nœud envoie désormais des données au premier routeur de nœuds, le routeur les transmettra avec succès au premier nœud. Maintenant et table Nat. Le deuxième routeur a besoin de données.

Le problème est que pour apprendre votre externe IP. Adresse, vous avez besoin d'un nœud situé dans un réseau commun. Pour résoudre un tel problème, des serveurs supplémentaires sont utilisés, qui sont directement liés à Internet. Avec leur aide, des entrées chérisées sont également créées dans la table. Nat..

Stun et Turn Server

Quand l'initialisation Webrtc. Vous devez spécifier disponible Étourdir. et Tour serveurs qui seront appelés à l'avenir GLACE les serveurs. Si les serveurs ne sont pas spécifiés, seuls les nœuds peuvent être connectés sur le même réseau (connecté à celui-ci sans Nat.). Immédiatement, il convient de noter que pour 3G.-Sette nécessairement utiliser Tour Les serveurs.

Étourdir. serveur - Ceci est juste un serveur sur Internet qui renvoie l'adresse de retour, c'est-à-dire l'adresse de l'assemblée de l'expéditeur. Un nœud venant par le routeur fait appel à Étourdir. Serveur à passer Nat.. Emballé Étourdir. Server contient l'adresse source - l'adresse du routeur, c'est-à-dire de l'adresse externe de notre nœud. Cette adresse Étourdir. Serveur et renvoie. Ainsi, le nœud obtient son externe IP. Adresse et port par lequel il est disponible sur le réseau. Plus loin, Webrtc. Avec cette adresse crée un candidat supplémentaire (l'adresse externe du routeur et le port). Maintenant dans la table Nat. Le routeur a une entrée qui saute les paquets envoyés au routeur par le port souhaité à notre noeud.

Considérez ce processus sur l'exemple.

Exemple (serveur d'étourdissement de travail)

Étourdir. Le serveur sera noté par s1.. Routeur, comme avant, à travers r1et le nœud - à travers p1. Il sera également nécessaire de suivre la table Nat. - Nous l'indiquons comme r1_nat.. De plus, cette table contient généralement de nombreux enregistrements de différents nœuds de sous-réseau - ils ne seront pas apportés.

Donc, au début, nous avons une table vide r1_nat..

Tableau 2: En-tête d'emballage

Nouer p1 Envoie ce routeur de paquet r1 (Peu importe la manière dont les technologies différentes peuvent être utilisées dans différents sous-réseaux). Le routeur doit être remplacé par l'adresse source SRC IP.Étant donné que l'adresse spécifiée dans l'emballage ne convient pas au sous-réseau externe, d'ailleurs, les adresses de cette plage sont réservées et aucune adresse sur Internet n'a une telle adresse. Le routeur fait une substitution dans l'emballage et crée une nouvelle entrée dans sa table r1_nat.. Pour ce faire, il doit proposer le numéro de port. Rappelez-vous que puisque plusieurs nœuds à l'intérieur du sous-réseau peuvent accéder au réseau externe, puis dans la table. Nat. Des informations supplémentaires doivent être stockées afin que le routeur puisse déterminer lequel de ces nœuds multiples est le package inverse du serveur. Laissez le routeur inventé le port 888 .

Titre du package modifié:

Tableau 4: Tableau Nat reconstitué avec un nouvel enregistrement

Ici IP. L'adresse et le port du sous-réseau sont absolument identiques à ceux du package source. En fait, lors de la marche arrière, nous devons avoir un moyen de les restaurer pleinement. IP. L'adresse du réseau externe est l'adresse du routeur et le port a été modifié au routeur inventé.

Ce port sur lequel le nœud p1 prend la connexion - c'est bien sûr 35777 Mais les données de navire serveur sur fictif Port 888 qui sera changé par le routeur au présent 35777 .

Donc, le routeur a remplacé l'adresse et le port de la source dans l'en-tête de paquet et ajouté une entrée à la table. Nat.. Maintenant, le colis est envoyé sur le serveur de réseau, c'est-à-dire le nœud s1.. À l'entrée s1. Il a un tel paquet:

SRC IP. Port SRC. Dest IP. Port Dest.
10.50.200.5 888 12.62.100.200 6000

Tableau 5: Stun Server a reçu un package

LE TOTAL, Étourdir. Le serveur sait qu'il est venu un colis de l'adresse 10.50.200.5:888 . Maintenant, ce serveur d'adresse renvoie. Il vaut la peine de rester et de voir une fois de plus que nous venons de considérer. Les tables ci-dessus sont un morceau de entête paquet pas du tout de son contenu. Nous n'avons pas parlé de contenu, car ce n'est pas si important - il est décrit en quelque sorte dans le protocole Étourdir.. Nous examinerons maintenant en plus du titre également du contenu. Ce sera simple et contenir l'adresse du routeur - 10.50.200.5:888 Bien que nous ayons pris de entête Paquet. Ceci n'est pas fait pas souvent, généralement les protocoles ne sont pas des informations importantes sur les adresses des nœuds, il est important que les packages sont livrés à des fins visées. Nous considérons ici le protocole qui définit le chemin entre deux nœuds.

Donc, maintenant, nous avons un deuxième paquet qui va dans la direction opposée:

Tableau 7: Stun Server envoie un paquet avec un tel contenu

Ensuite, le paquet voyage sur le réseau jusqu'à ce qu'il s'avère être sur l'interface externe du routeur. r1. Le routeur comprend que le colis ne lui est pas destiné. Comment comprend-il cela? Il ne peut être trouvé que dans le port. Port 888 Il n'utilise pas ses objectifs personnels, mais utilise pour le mécanisme Nat.. Par conséquent, dans cette table, le routeur regarde. Regarde la colonne Port externe. et à la recherche d'une chaîne qui coïncide avec Port Dest. du paquet soumis, c'est-à-dire 888 .

IP interne. Port interne. IP externe. Port externe.
192.168.0.200 35777 10.50.200.5 888

Tableau 8: Tableau NAT

Nous avons eu de la chance, une telle ligne existe. Si ce n'était pas chanceux, le colis serait simplement jeté. Maintenant, vous devez comprendre qui à partir des nœuds de sous-réseau, il est nécessaire d'envoyer ce package. Ne vous pressez pas, rappelons-nous à nouveau l'importance des ports de ce mécanisme. Dans le même temps, deux nœuds du sous-réseau pourraient envoyer des demandes au réseau externe. Ensuite, si le routeur est venu pour le premier nœud 888 , alors pour la seconde, il proposerait le port 889 . Supposons que c'était arrivé, c'est-à-dire la table r1_nat. Ressemble à ça:

Tableau 10: Le routeur remplace l'adresse du récepteur

SRC IP. Port SRC. Dest IP. Port Dest.
12.62.100.200 6000 192.168.0.200 35777

Tableau 11: Routeur a remplacé l'adresse du récepteur

Le package vient avec succès au nœud p1 Et, en regardant le contenu de l'emballage, le noeud apprend à propos de son externe IP. Adresse, c'est-à-dire à propos de l'adresse du routeur dans le réseau externe. Il connaît également le port que le routeur passe à travers Nat..

Et après? Quel est l'avantage de cela? L'utilisation est un enregistrement dans la table r1_nat.. Si maintenant, tout le monde enverra au routeur r1 Paquet avec port 888 Ensuite, le routeur redirigera ce nœud d'emballage p1. Ainsi, un petit passage étroit au nœud caché a été créé p1.

De l'exemple ci-dessus, vous pouvez avoir une idée du travail. Nat. et essence Étourdir. Serveur. Généralement, le mécanisme GLACE et Étourdissement / tour Les serveurs viennent juste de surmonter les restrictions Nat..

Il n'y a personne de routeur entre le nœud et le serveur, mais plusieurs. Dans ce cas, le nœud recevra l'adresse de ce routeur, qui est le premier à accéder au même réseau que le serveur. En d'autres termes, nous obtenons l'adresse du routeur connecté à Étourdir. Serveur. Pour p2p. Communications C'est exactement ce dont nous avons besoin, si vous n'oubliez pas le fait que la ligne dont vous avez besoin dans chaque routeur sera ajoutée à la table. Nat.. Par conséquent, le contraire sera le même que le fer.

Tour Le serveur est amélioré Étourdir. serveur. D'ici, il devrait être immédiatement supprimé que tout Tour Le serveur peut fonctionner et comment Étourdir. serveur. Cependant, il y a des avantages. Si un p2p. La communication est impossible (comme dans 3G. réseaux), le serveur passe au mode répéteur ( relais), C'est-à-dire que cela fonctionne comme un intermédiaire. Bien sûr, non sur p2p. alors ça ne va pas, mais au-delà du mécanisme GLACE Les nœuds pensent qu'ils communiquent directement.

Dans quels cas sont nécessaires Tour serveur? Pourquoi pas assez Étourdir. Les serveurs? Le fait est qu'il y a plusieurs variétés Nat.. Ils sont également remplacés IP. Adresse et port, cependant, certains d'entre eux ont une protection supplémentaire contre la "falsification". Par exemple, dans symétrique Tableau Nat. 2 autres paramètres sont enregistrés - IP. et le port de nœud distant. Le paquet du réseau externe passe à travers Nat. Dans le réseau interne uniquement si l'adresse source et le port coïncident avec la table enregistrée dans le tableau. Par conséquent, concentrer S. Étourdir. Le serveur échoue - Tableau Nat. Stocke Adresse et Port Étourdir. serveurs et quand le routeur obtient un colis de Webrtc. L'interlocuteur, il le jette, comme il est "falsifié". Il n'est pas venu de Étourdir. Serveur.

De cette façon Tour Le serveur est nécessaire dans le cas où les deux interlocuteurs sont pour symétrique Nat. (Tout le monde pour lui-même).

Bref résumé

Voici quelques déclarations sur les entités. Webrtc.qui doit toujours être gardé dans votre tête. En détail, ils sont décrits ci-dessus. Si l'une des déclarations vous semble ne pas préciser complètement, relisez-la des paragraphes pertinents.

  • Flux de médias
    • Les données vidéo et audio sont emballées dans des flux de support
    • Les flux de média synchronisent des pistes multimédia à partir de laquelle consistent
    • Différents flux de média ne sont pas synchronisés les uns avec les autres.
    • Les flux de médias peuvent être locaux et distants, la caméra et le microphone sont généralement connectés aux données de réception locales et supprimées du réseau sous une forme codée.
    • Les pistes multimédia sont deux types - pour la vidéo et pour l'audio
    • Les pistes multimédia ont la capacité d'allumer / éteindre
    • Les pistes multimédia sont constituées de canaux multimédia
    • Pistes multimédia synchronisent les canaux de média à partir duquel consistent
    • Les flux de médias et les pistes multimédia ont des étiquettes pour lesquelles ils peuvent être distingués
  • Session de descripteur
    • La poignée de session est utilisée pour connecter logiquement deux nœuds de réseau.
    • Le manipulateur de session stocke des informations sur les méthodes de codage vidéo disponibles et les données audio.
    • Webrtc. Utilise un mécanisme de signalisation externe - la tâche de transmettre des descripteurs de session ( sDP.) tombe sur l'application
    • Le mécanisme du composé logique consiste en deux étapes - propositions ( offrir.) et répond ( répondre.)
    • La génération du descripteur de session est impossible sans utiliser de flux de média local dans le cas de la suggestion ( offrir.) et impossible sans utiliser un descripteur de session distant en cas de réponse ( répondre.)
    • Le descripteur résultant doit être atteint Webrtc.De plus, peu importe que ce descripteur soit obtenu à distance ou localement à partir de la même mise en œuvre. Webrtc.
    • Il y a une petite édition du descripteur de session
  • Candidats
    • Candidat Candidat de glace.) - Ceci est l'adresse du nœud du réseau
    • L'adresse du nœud peut être à vous et peut-être l'adresse du routeur ou Tour Serveur
    • Les candidats sont toujours beaucoup
    • Le candidat consiste en IP. Adresses, port et type de transport ( TCP. ou alors Udp.)
    • Les candidats sont utilisés pour établir une connexion physique de deux nœuds du réseau.
    • Les candidats doivent également être envoyés via le mécanisme de signal
    • Les candidats doivent également transmettre la mise en œuvre Webrtc., cependant, seulement à distance
    • Dans certaines implémentations Webrtc. Les candidats ne peuvent être transférés que après l'installation du descripteur de session.
  • Stun / Turn / Ice / Nat
    • Nat. - Mécanisme d'accès externe
    • Les routeurs de la maison soutiennent une table spéciale Nat.
    • Le routeur remplace les adresses des paquets - l'adresse de la source à elle-même, si l'emballage va sur le réseau externe et l'adresse du récepteur à l'adresse du nœud dans le réseau interne, si le colis est venu de l'externe réseau
    • Fournir un accès multicanal au réseau externe Nat. Utilise des ports
    • GLACE - Mécanisme de balayage Nat.
    • Étourdir. et Tour Serveurs - Serveurs de pick-up pour contournement de contournement Nat.
    • Étourdir. Le serveur vous permet de créer les entrées nécessaires dans la table. Nat.et retourne également l'adresse externe du noeud
    • Tour Le serveur généralise Étourdir. mécanisme et le fait fonctionner toujours
    • Dans les pires cas Tour Le serveur est utilisé comme intermédiaire ( relais), c'est à dire p2p. se transforme en une communication client client-client.

Webrtc. (Web communications en temps réel) est une technologie qui permet aux applications Web et aux sites de capturer et de transmettre de manière sélective des flux de média audio et / ou vidéo, ainsi que des données arbitraires échangées entre navigateurs, sans utilisation obligatoire d'intermédiaires. Un ensemble de normes qui inclut la technologie WEBRTC vous permet d'échanger des données et de mener à bien la téléconférence, sans avoir à installer des plugins ni d'autres logiciels tiers.

WEBRTC se compose de plusieurs interfaces de programme interconnectées (API) et de protocoles qui travaillent ensemble. La documentation que vous trouvez ici vous aidera à comprendre les bases de WEBRTC, comment configurer et utiliser une connexion au flux de données et multimédia, et bien plus encore.

Compatibilité

Étant donné que la mise en œuvre de la WEBRTC doit être en cours de devenir et que chaque navigateur dispose de fonctions WEBRTC, nous vous recommandons vivement d'utiliser la bibliothèque Adapter.js Polyfil, de Google, avant de travailler sur votre code.

Adapter.js utilise des quartiers et des polyphilants pour des différences d'accueil en douceur dans les implémentations de la WEBRTC parmi les contextes qui l'appuient. Adapter.js traite également les préfixes des fabricants et d'autres différences de nommage des propriétés, facilitant le processus de développement sur la WEBRTC, avec le résultat le plus compatible. La bibliothèque est également disponible en tant que package NPM.

Pour explorer davantage la bibliothèque Adapter.js, nous examinons.

Concepts et utilisation de WEBRTC

WEBRTC est à usage multi-usage et avec les puissantes fonctionnalités multimédia pour le Web, notamment en soutenant des conférences audio et vidéo, le partage de fichiers, la capture de fichiers, la gestion d'identification et l'interaction avec des systèmes téléphoniques obsolètes, y compris la prise en charge de la transmission des signaux de numérotation de tonalité DTMF. . Les connexions entre les nœuds peuvent être créées sans utiliser de pilotes spéciaux ni de plug-ins, et souvent sans services intermédiaires.

La connexion entre les deux nœuds est représentée comme objet d'interface RTCPEconnection. Dès que la connexion est établie et ouverte, l'utilisation de l'objet RTCPEerConnection, le MediaStream S) et / ou les canaux de données (RTCDatachannel S) peut être ajouté à la connexion.

Les flux de médias peuvent consister en un nombre quelconque de pistes (pistes) d'informations sur les médias. Ces pistes sont représentées par les objets d'interface MediaStreamTrack et peuvent contenir un ou plusieurs types de langues multimédia, y compris audio, vidéo, texte (tels que les sous-titres ou les têtes de chapitres). La plupart des fils consistent au moins, une seule des pistes audio (une piste audio) ou des pistes vidéo, et peut être envoyée et obtenue sous forme de flux (média trivial) ou stockée dans un fichier.

De plus, vous pouvez utiliser la connexion entre les deux nœuds pour échanger des données arbitraires à l'aide de l'objet d'interface RTCDataChannel, qui peut être utilisé pour transférer des informations de service, des données de stock, des packages d'état du jeu, des fichiers de transfert ou des canaux de données fermés.

plus de détails et des liens vers des guides et des tutoriels pertinents nécessaires

Interfaces WEBRTC

En raison du fait que WEBRTC fournit des interfaces travaillant ensemble pour effectuer diverses tâches, nous les avons divisés en catégories. Voir le pointeur du panneau latéral alphabétique pour une navigation rapide.

Connexion et gestion

Ces interfaces sont utilisées pour configurer, ouvrir et contrôler les connexions WEBRTC. Ils représentent des connexions multimédias à un niveau unique, des canaux de données et des interfaces utilisées en échangeant des informations sur les capacités de chaque nœud pour sélectionner la meilleure configuration lors de l'installation d'une connexion multimédia double face.

RTCPEconnection représente la connexion WEBRTC entre l'ordinateur local et le nœud distant. Utilisé pour gérer la transmission de données réussie entre deux nœuds. RTCSessionDescription présente les paramètres de session. Chaque RTCSessionDescription contient des descriptions du type montrant quelle partie de la (offre / réponse) du processus de négociation, elle décrit et la session SDP SDP. RTCicecandidate est un candidat à l'installation d'une connexion Internet (ICE) pour définir les connexions RTCPEerconnection. RTCICETRANSPORT fournit des informations sur l'outil de connexion Internet (ICE). RTCPEERCONNOCKICEEvente représente des événements qui se produisent avec les candidats glaciaires habituellement rtcpeerconnection. Un type est transmis à cet objet d'événement: Icecandidate. RTCRTPSender contrôle les données tordues et transmises de données via l'objet MediaStreamTrack pour l'objet RTCPEerconnection. RTCRTPReceiver gère la réception et la décodage des données via l'objet MediaStreamTrack pour l'objet RTCPeerconnection. RTCTRACKEvent indique que le nouvel objet de médiastreamtrack entrant est créé et un objet de type RTCRTPeceiver a été ajouté à l'objet RTCPEerconnection. RTCCertificate présente un certificat utilisant l'objet RTCPEerconnection. RTCDataChannel représente un canal de données à deux permanentes entre deux nœuds de connexions. RTCDataChanNelEvent représente des événements qui se produisent lorsque l'objet de type RTCDatachannel est joint à l'objet Objet de DataChannel RTCPEconnection. RTCDTMFSender contrôle le codage et la transmission de l'alarme Twonal Multi-fréquence (DTMF) pour l'objet de type RTCPEerconnection. RTCDTMFONECHANGANGANGANGANGANGANDEVENT Indique un événement entrant pour modifier la tonalité de l'alarme multi-fréquence Darton (DTMF). Cet événement ne figure pas (sauf indication contraire) et n'est pas annulé (sauf indication contraire). RTCStatisReport Rapports Assinchroneusement Statut de l'objet Transmis MediaStreamTrack. RTCidentityProviderRregistrar registre le fournisseur d'identification (PDI). RTCidentityProvider active la capacité du navigateur à demander la création ou la vérification des obligations d'identification. RTCidentityServation représente l'identifiant du nœud distant de la connexion actuelle. Si le nœud n'est pas encore installé et confirmé, le lien vers l'interface retournera NULL. Après l'installation ne change pas. RTCidentityEvent représente un fournisseur d'identifiant d'identifiant d'objet d'objet (IDP). Type d'objet RTcPeerconnection. Un type est transmis à cet événement IdentityResult. RTCidentityERRorevent représente un objet d'événement d'erreur associé au fournisseur d'identification (IDP). Type d'objet RTcPeerconnection. Deux types d'erreurs sont transmis à cet événement: idpruperserterror et idpvalidationError.

Manuel

Vue d'ensemble de l'architecture WEBRTC dans l'API, qui est utilisée par les développeurs pour créer et utiliser WEBRTC, est un ensemble de protocoles réseau et de normes de connexion. Cet examen est la vitrine de ces normes. WEBRTC vous permet d'organiser une connexion dans le mode nœud pour transmettre des données arbitraires, des flux audio, des vidéos ou une combinaison dans le navigateur. Dans cet article, nous examinons la vie de la session WEBRTC, en commençant par l'installation de la connexion et passez à travers l'ensemble du chemin avant de terminer le moment où il n'est plus nécessaire. WEBRTC WEBRTC WEBRTC Aperçu consiste en plusieurs interfaces de programmation interconnectées (API) et de protocoles qui travaillent ensemble pour assurer la prise en charge des flux de données et des flux de média entre deux nœuds ou plus. Cet article présente un bref aperçu de chacune de ces API et à quel point il poursuit. WEBRTC BASICS Cet article vous détiendra grâce à la création d'une application Cross-navigateur RTC. À la fin de cet article, vous devez disposer d'une chaîne de données de travail et de média fonctionnant en mode point à point. Les protocoles WEBRTC dans cet article présentent des protocoles, en plus de la création de l'API WEBRTC. Ce guide décrit comment utiliser le nœud de l'unité et associé