Comment WebRTC travail?
Je suis intéressé par Peer-to-Peer connexions dans le navigateur. Puisque cela semble être possible avec WebRTC, je me demandais comment cela fonctionne exactement.
J'ai lu quelques explications et vu les diagrammes à ce sujet et maintenant il est clair pour moi, que la connexion establishmet fonctionne sur le serveur. Le serveur semble échanger des données entre le client qui sont prêts à se connecter les uns aux autres, afin qu'ils puissent commencer une connexion directe, qui est indépendante du serveur.
Mais c'est exactement ce que je ne comprends pas. Jusqu'à maintenant, je pensais que la seule façon de créer des connexions est pour écouter sur un port sur Un ordinateur et de se connecter à ce port de l'ordinateur B. Mais cela ne semble pas être le cas dans WebRTC. Je pense que aucun des clients commence à écouter sur un port. En quelque sorte, ils peuvent créer une connexion sans écouter sur les ports et accepter des connexions. Ni le client, ni le client B commence à agir comme un serveur.
Mais comment? Quelles sont les données échangées sur le WebRTC serveur, que les clients peuvent utiliser pour se connecter les uns aux autres?
Merci pour vos explications à cela 🙂
Modifier
J'ai trouvé cette article. Il n'est pas lié à WebRTC, mais je pense que ça répond à une partie de ma question. Je ne suis pas sûr, difficile. Il serait quand même cool, si quelqu'un pourrait-il m'expliquer et me donner quelques liens supplémentaires.
- Pour initialiser “etat machine”, la partie de base de WebRTC, nous avons utiliser un moyen de l'agent comme un serveur pour obtenir de la GLACE candidats via LANCÉ protocole de connexion/de STUN/TURN serveur ..... Aujourd'hui, nous sommes en s'appuyant sur des serveurs SIP cependant, il ya quelques autres options aussi!
- RTCWeb / WebRTC Expliqué -- ~40 minutes de vidéo de présentation de WebRTC co-éditeur de Cullen Jennings -- adf.ly/DHgzv
Vous devez vous connecter pour publier un commentaire.
WebRTC donne SDP Offre au client JS app pour envoyer (cependant la JS app veut) de l'autre appareil, qui l'utilise pour générer un SDP de Réponse.
Le truc, c'est que le SDP GLACE comprend les candidats (en réalité, d'essayer de parler de moi à cette adresse IP et ce port"). GLACE fonctionne à coup de poing ouvrir des ports dans le pare-feu; mais si les deux côtés sont symétriques NATs, il ne sera pas possible en général, et d'un autre candidat (sur un serveur TURN) peut être utilisé.
Une fois qu'ils parlent directement (ou par l'intermédiaire de TOUR, ce qui est effectivement un paquet-miroir), ils peuvent ouvrir un DTLS de la connexion et de l'utiliser pour la clé de la SRTP-DTLS les flux de médias, et d'envoyer DataChannels sur DTLS.
Edit:
Acronymes ici: http://blog.1click.io/10-jargons-abbreviations-for-webrtc-fans/ pour le reste, il y a Google. La plupart de ces services sont définis par l'IETF (http://ietf.org/)
Edit 2:
Firefox et Chrome (et le spec) ont déménagé à l'aide de "goutte à goutte" pour la GLACE candidats, donc, la GLACE, les candidats sont généralement ajoutés après le visage de la PeerConnection et échangés indépendamment de la première SDP (si vous pouvez attendre jusqu'à ce que les premiers candidats sont prêts avant l'envoi d'une offre, et de les regrouper ensemble).
Voir https://webrtcglossary.com/trickle-ice/ et https://datatracker.ietf.org/doc/draft-ietf-ice-trickle/
Une très bonne explication peut être trouvée dans ce livre http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#STUN_TURN_ICE
qui constitue la base sur la façon WebRTC utilise la technologie de GLACE.
En particulier, en supposant que l'adresse IP du serveur STUN est connu, le WebRTC application envoie une demande de liaison au serveur STUN. Le serveur STUN répond avec une réponse qui contient l'adresse IP publique et le port du client comme on le voit à partir du réseau public.
Maintenant l'application découvre son IP publique et le port n-uplet qui peut envoyer à l'autre par les pairs par le biais de SDP. (notez que les SDP sont envoyés sur un externe de signalisation de canal, f.j'. websocket établi par le biais d'un service web)
Avec ce mécanisme mis en place, chaque fois que deux pairs envie de parler les uns aux autres sur UDP, ils peuvent ensuite utiliser les IP publique et le port de tuples pour l'échange de données.
Malheureusement, dans certains cas, UDP peut être bloqué par un pare-feu. Pour résoudre ce problème, chaque fois que STUN échoue, nous pouvons utiliser la Traversée à l'Aide de Relais autour de NAT (TOUR) protocole de secours, qui peut s'exécuter sur UDP et passer à TCP si tout le reste échoue.
L'établissement d'un p2p WebRTC connexion a 3 étapes (10.000 pieds aperçu) :
Étape 1: de Signalisation: les deux camarades se connecter à un serveur signalisation (utiliser les websockets sur 80/443, comète, SIP,etc..) et d'échanger des informations (sur leurs capacités de médias, public IP:port paires lorsqu'ils sont disponibles, etc.)
Étape 2: Découverte: les Périphériques connectés à un LAN ou les réseaux mobiles ne sont pas conscients de leur adresse IP publique (et le port) où ils peuvent être joints à utiliser STUN/TURN serveurs situés sur le réseau Internet public pour découvrir leur ip:port paire de GLACE (les candidats). Dans le processus, ils percer un trou à travers le NAT/routeur qui est utilisé à l'étape 3:
Étape 3: P2P connexion: une fois que la GLACE candidats sont échangées par le biais de l'initiale de chaque canal de signalisation par les pairs est conscient des uns et des autres ip:port (et les trous ont été percés dans les NATs/routeurs) si un peer to peer UDP connexion peut être établie.
Le schéma ci-dessus explique le processus avec 2 appareils connectés à des réseaux locaux. C'est la deuxième partie d'un article que j'ai écrit qui traite avec dépannage des problèmes de connexion mais il fait un bon travail en expliquant comment WebRTC œuvres.
Comment WebRTC Œuvres
Ce document fournit un moyen rapide et résumé introduction à WebRTC. Afin d'obtenir plus d'informations sur WebRTC veuillez jeter un oeil à la Poursuite de la Lecture de la section à la fin de ce document.
WebRTC
WebRTC(Web Real-Time Communication) est un ensemble de technologies qui est développé pour le peer to peer duplex de communication en temps réel entre les navigateurs. Comme son nom le mentionne, il est compatible avec le Web et c'est un standard dans le W3C l'Une des caractéristique importante de WebRTC est qu'il fonctionne même derrière les adresses NAT.
WebRTC utilise plusieurs technologies pour fournir en temps réel la communication entre pairs entre les navigateurs. Ces technologies sont
* SDP (Session Description Protocol)
* De la GLACE (l'Interactivité de l'Établissement de Connexion)
* RTP (Real Time Protocol)
Il y a une chose qui est de Signalisation Serveur est requis pour l'exécution de WebRTC. Cependant, il n'existe pas de standart dans la mise en œuvre de la signalisation serveur. La mise en œuvre de crée son propre style. Il va donner un peu plus d'informations sur la Signalisation Serveur plus loin dans cette section.
Nous allons donner quelques infos sur les technologies ci-dessus.
SDP (Session Description Protocol)
SDP est un protocole simple et il est utilisé pour les codecs sont pris en charge dans les navigateurs. Par exemple, supposons qu'il existe deux pairs(Client Un et Client B) qui sera connecté via WebRTC. Client Un et Client B créer SDP chaînes de caractères qui définit les codecs qu'ils soutiennent. Par exemple, Client Un peut soutenir H264, VP8 et VP9 codecs pour la vidéo, Opus PCM et les codecs audio. Client B peut soutenir qu'H264 pour la vidéo et le seul Opus de codec audio. Pour ce cas, les codecs qui sera utilisé entre Client Un et Client B sont H264 et Opus. Si il n'y a aucun codecs courants entre pairs, la communication entre pairs ne peut pas être établie.
Vous avez une question à propos de la façon dont ces SDP chaînes sont envoyées entre les uns des autres. C'est là où la Signalisation le Serveur prend place.
GLACE (Interactivité de l'Établissement de Connexion)
GLACE est la magie qui établit la connexion entre pairs, même s'ils sont derrière un NAT. Supposons de nouveau Client Un et Client B vont se connecter et de prendre un coup d'oeil à la façon dont la GLACE est utilisée pour cela.
Client Un découvre leur adresse locale et le public à l'adresse Internet en utilisant serveur STUN et envoie ces adresse à Client B par le biais de la Signalisation Serveur. Chaque adresses reçues du serveur STUN est appelé GLACE candidat
Dans l'image ci-dessus, il y a deux serveurs. L'un d'eux est d'ÉTOURDISSEMENT et d'autres d'entre eux est au TOUR du serveur.
Serveur STUN est utilisé pour laisser Client Un apprendre son toutes les adresses. Permettez-moi de donner un exemple pour cela, nos ordinateurs en général a une adresse locale dans le réseau 192.168.0.0 et il y a une deuxième adresse que nous voyons lorsque nous nous connectons à http://www.whatismyip.com, cette adresse IP est en fait l'adresse IP Publique de notre Passerelle Internet(modem, routeur, etc.) donc, nous allons définir un serveur STUN; STUN serveurs permet de pairs connaître leur Public et les adresses IP Locales. Btw, Google offre gratuitement de serveur STUN(étourdissement.l'.google.com:19302).
Il y a plus de serveur, ACTIVER le Serveur de l'image. TOUR Serveur est utilisé lorsque le peer to peer connexion ne peut être établie entre pairs. TOUR serveur de relais de données entre pairs.
Client B fait la même chose, obtient locales et publiques adresses IP de serveur STUN et envoie ces adresses à Client Un par le biais de la Signalisation Serveur.
Client Un reçoit Client B's les adresses et les essais des adresses IP en envoyant des pings afin de créer une connexion avec Client B. Si Client Un reçoit la réponse de toutes les adresses IP, il met cette adresse dans une liste, avec son temps de réponse et d'autres titres de performance. Enfin Client Un choisir les bonnes adresses en fonction de ses performances.
Client B fait de même afin de se connecter à Client Un
RTP (Real Time Protocol)
RTP est une mature protocole pour la transmission de données en temps réel. Il est basé sur UDP. Audio et Vidéo sont transmis avec RTP dans WebRTC. Il y a une soeur protocole RTP dont le nom est RTCP(Real time Control Protocol), qui offre la qualité de service dans le protocole RTP de la communication. RTP est également utilisé dans le protocole RTSP(Real-time Streaming Protocol)
De Signalisation Serveur
La dernière partie est la Signalisation Serveur qui n'est pas définie dans WebRTC. Comme mentionné ci-dessus, la Signalisation Serveur est utilisé pour envoyer des SDP chaînes de GLACE et de Candidats entre Client Un et Client B. Signalisation Serveur décide de pairs se connecter les uns aux autres. WebSocket la technologie est généralement utilisé dans la Signalisation des Serveurs de communication.
Compatibilité
Dans la dernière année, tous les navigateurs, y compris Safari, Bord ont publié de nouvelles versions de soutien WebRTC. Chrome, Firefox et Opera ont déjà pris en charge WebRTC pour un certain temps. Le codec vidéo est commun pour les navigateurs sont H264. Pour l'audio, l'Opus est commun dans les navigateurs. PCM peut également être utilisé pour l'audio codec, mais AAC n'est pas utilisé, même si AAC est pris en charge dans tous les navigateurs à cause de problèmes de licence. Les Caméras IP de manière générale, de soutenir H264 pour la vidéo et codec PCM ou AAC pour l'audio codec.
Plus de lectures et de Références
Btw, je suis développeur à Ant Media Server qui prend en charge évolutive, un-à-plusieurs WebRTC et de peer to peer WebRTC connexion