Webrertc. Videokonferencija u pregledniku. Višekorisni chat s korištenjem WEBRTC-a u specijaliziranim rješenjima

WEBRTC (skraćeno od Web Real-Time Communications) je tehnologija koja vam omogućuje prijenos podataka o audio i video streaming između preglednika i mobilnih aplikacija.


Razvoj ove tehnologije je Skype natjecanje. WIBRTC se može koristiti za organiziranje video konferencija izravno u pregledniku. Projekt ima otvoreni kodu i aktivno promovira Google, a posebno je razvojni tim Google Chrome Browser.


Korisnički preglednici zahvaljujući WebTC tehnologiji mogu izravno prenositi podatke. WEBRTC ne treba zaseban poslužitelj koji je pohranjivao i obradio podatke. Svi podaci obrađuju izravno od strane Brarsa i mobilnih aplikacija za krajnje korisnike.


WEBRTC tehnologija podržava sve popularne Mozilla Firefox, Opera, Google Chrome (i svi preglednici na temelju Google Chrome), kao i mobilne aplikacije na temelju Androida i iOS-a.

Opasnost webrtc.

Opasnost od tehnologije WEBRTC je definirati vašu stvarnu IP adresu. Budući da veza ide izravno s drugim korisničkim, preglednikom, web-mjestom ili mobilnim aplikacijama, mrežne postavke se ignoriraju. Da biste stvorili audio i video veze, preglednici trebaju razmjenjivati \u200b\u200bvanjske i lokalne IP adrese.

Anonimna VPN usluga rješava ovaj problem i skriva stvarnu IP adresu. Maksimalno, što se može otkriti je lokalna IP adresa dodijeljena korisničkom VPN mreži. Nije opasno, jer će se ista lokalna IP adresa biti prikazana ako koristite usmjerivač za distribuciju Interneta.


Ako koristite proxy, tada će WEBRTC moći odrediti vašu pravu IP adresu za proxy ili IP adresu VPN poslužitelju ako koristite VPN + proxy lanac.


WEBRTC također definira vašu stvarnu IP adresu kada koristite TOR mrežu.


Najbolje rješenje je da onemogućite WebRTC tehnologiju ako ga ne koristite.

Kako isključiti WebTC u preglednicima

Brza navigacija na ovoj stranici.

Kako onemogućiti WebTC u Mozilla Firefoxu

Mozilla Firefox preglednik je jedan preglednik koji vam omogućuje da onemogućite WebTC tehnologiju bez instaliranja dodatnih dodataka.

Ručna postavka

Ako ne koristite WebRTC tehnologiju, možete ga potpuno onemogućiti. U slučaju kada je potrebno koristiti WEBRTC povremeno praktičnije.

Da biste onemogućili WebRTC tehnologiju u Mozilla Firefoxu, morate unijeti sljedeći tekst u adresnu traku preglednika i pritisnite tipku Enter.

O: CONFIG


Kliknite, napravim gumb za rizik.


Izvedite sljedeće:

  1. U nizu za pretraživanje unesite tekst i pritisnite Enter.
  2. Media.pEerconection.Elen.
  3. Desnom tipkom miša kliknite na niz i odaberite Switch. Ili dvaput kliknite na liniju.


Nakon tih koraka, WebTC će biti onemogućen.

Postavljanje putem HIBRTC kontrolnog dodatka

Ako koristite WEBRTC tehnologiju, isključivanje i uključivanje kroz postavke će potrajati dugo. Instalirajte dodatak koji će vam pomoći uključiti i isključiti WeBrtc u 1 klikom miša.

Otvoreni dodaci.


Odaberite:

  1. Pretraživanje odjeljka
  2. Unesite naziv dodatka na niz pretraživanja: Kontrola WebRTC-a
  3. Kliknite gumb Install


Kako onemogućiti WebTC u Opera Browser

Da biste isključili WEBRTC u pregledniku opere, idite na galeriju proširenja.


Prati ove korake:

  1. Unesite naziv dodatka u traku za pretraživanje: Kontrola WebRTC-a
  2. Kliknite na dodatak


Kliknite Dodaj u Opera.


Aktivirajte dodatak. Ikona plug-in bi trebala biti plava za LIBRTC zaključavanje.

Kako onemogućiti WebTC u Google Chromeu

Da biste onemogućili WebTC u pregledniku Google Chrome, idite na odjeljak za proširenje.


Pomaknite se dolje prema dolje i pritisnite više proširenja.


Prati ove korake:

  1. Unesite naziv dodatka na niz pretraživanja: Kontrola WebRTC-a
  2. Kliknite gumb Instaliranje.



Aktivirajte dodatak. Ikona plug-in bi trebala biti plava za LIBRTC zaključavanje.

Kako onemogućiti WebTC u Yandex preglednik

Da biste onemogućili WebRTC na Yandex preglednik, idite na odjeljak Add-on.


Pomaknite se prema dolje prema dolje i pritisnite Directory za Yandex preglednik.


Obavljati radnje:

  1. Unesite naziv dodatka u traku za pretraživanje: Kontrola WebRTC-a
  2. Kliknite na dodatak da biste instalirali.


Kliknite Dodaj u Yandex preglednik.


Kliknite Instaliraj proširenje.


Aktivirajte dodatak. Ikona plug-in bi trebala biti plava za LIBRTC zaključavanje.

Kako onemogućiti WebTC u pregledniku Srware Iron

Preglednik Srware željezo je izrađen na temelju Google Chrome.

Ugradite HBRTC kontrolni dodatak u skladu s uputama za.

WEBRTC je API predviđen preglednikom i omogućuje vam organiziranje P2P veze i prijenosa podataka izravno između preglednika. Na internetu postoji nekoliko priručnika za pisanje vlastitog video chat pomoću WEBRTC-a. Na primjer, ovdje je članak o Habru. Međutim, svi su ograničeni na priključak dvaju kupaca. U ovom članku, pokušat ću reći o tome kako organizirati vezu i poruke između tri i više korisnika koristeći WEBRTC.

Sučelje RTCPeerconnection je peer-to-peer veza između dva preglednika. Da bismo povezali tri i više korisnika, morat ćemo organizirati mrežu mreže (mreža u kojoj je svaki čvor povezan s svim drugim čvorovima).
Koristit ćemo sljedeću shemu:

  1. Prilikom otvaranja stranice provjerite prisutnost ID-a prostorije location.hash.
  2. Ako id prostorije nije naveden, generiramo novo
  3. Šaljemo signalni poslužitelj "poruka o tome što se želimo pridružiti navedenoj sobi
  4. Signalni poslužitelj bira ostatak korisnika u ovoj sobi novi uređaj za korisnika
  5. Kupci koji su već u sobu pošaljite ponudu SDP-a
  6. Newbie odgovara da ponudi "s"

0. Signalni poslužitelj

Kao što znate, barem WebTC i pruža mogućnost P2P veza između preglednika, još uvijek zahtijeva dodatni prijevoz za razmjenu usluga. U ovom primjeru, web-poslužitelj napisan na node.js koristeći socket.IO djeluje kao takav prijevoz.

VAR Socket_io \u003d zahtijeva ("socket.io"); modul.exports \u003d (poslužitelj) (VAR korisnici \u003d (), var io \u003d socket_io (poslužitelj); i.on ("veza", funkcija (utičnica) (// želja novog korisnika pridruži se Socket.On sobi (" Soba ", funkcija (poruka) (VAR JSON \u003d JSON.PARS (poruka); // dodajte utičnicu na popis korisnika korisnik \u003d utičnica; ako (socket.room! \u003d\u003d nedefinirano) (// ako je utičnica već U nekoj sobi, izlaze iz nje socket.Lave (socket.room);) // ući u traženu sobnu socket.room \u003d json.room; Socket.Jiin (socket.id); socket.user_id \u003d json.id; / / poslati na ostatak kupaca u ovoj sobi, poruka o pridruživanju novom članu Socket.Boads.to (Socket.room) .Mit ("Novi", JSON.ID);)); // Poruka vezana uz WEBRTC ( Ponuda SDP-a, SDP-ov odgovor ili led kandidat) Socket.on ("WEBRTC", funkcija (poruka) (poruka); ako (json.to! \u003d\u003d nedefiniran && korisnici! \u003d\u003d nedefinirano) (// Ako je poruka određena Primatelj i ovaj primatelj poznat poslužitelju, pošaljite poruku Samo mu ... korisnicima.Mit ("WEBRTC", PORUKA); ) Inače (// ... inače razmatramo poruku emitiranjem socket.Boads.to (Socket.room) .Mit ("WEBRTC", poruka);)); // netko odspojen socket.On ("Odspojivanje", funkcija () (// Kada isključite klijenta, obavijestimo o ovom drugom socket.Boads.to (Socket.room) .Mit ("Ostavite", Socket.user_id); brisanje korisnika;)); )); );

1. Index.html

Izvorni kod same stranice je vrlo jednostavan. Svjesno nisam obratio pozornost na raspored i druge lijepe, jer ovaj članak nije o tome. Ako netko želi, učinite lijepom, neće raditi mnogo poteškoća.

Webrtc chat demo.

Spojen na. 0 Kolega.

2. main.js.

2.0. Primajte linkove na stavke stranice i WEBRTC sučelja
var chatlog \u003d dokument.gelementbyid ("chatlog"); var poruka \u003d \u200b\u200bdokument.gelementbyid ("poruka"); var connection_num \u003d dokument.gelementbyid ("connection_num"); var room_link \u003d dokument.gelementbyid ("room_link");

Još uvijek moramo koristiti prefiks preglednika za pristup WEBRTC sučeljima.

Var peerernection \u003d prozor.MozrtcPeerconnekcija || Prozor.WebkitrtcPeerction; Var sessionDescription \u003d prozor.MozrtcSessionDescription || Prozor.RTCSesionDescription; Var OpeCandidat \u003d Window.MozrtciceCadidate || Prozor.rtciceCadidate;

2.1. Definicija ID sobe

Ovdje ćemo trebati funkciju za generiranje jedinstvenog identifikatora sobe i korisnika. Koristit ćemo UUID za te svrhe.

Funkcija UUID () (povrat math.flu () (math.random () * 0x10000). (16);); povratak S4 () + S4 () + "-" + S4 () + "+ S4 () + "-" + S4 () + "-" + S4 () + S4 () + S4 ();)

Sada pokušaj povući identifikator sobe s adrese. Ako takva nije navedena, generirat ćemo novu. Donosimo link na trenutnu sobu na stranicu i, za jedan, generirat će trenutni identifikator korisnika.

Varni soba \u003d lokacija.hash.substr (1); ako (! soba) (sobna \u003d UUID ();) room_link.innerhtml \u003d "link u sobu"; var me \u003d uuid ();

2.2. Web-mjesto.

Odmah prilikom otvaranja stranice spojit ćete se na naš signalni poslužitelj "Y, poslati zahtjev za unos sobe i navedite rukovatelje poruka.

// Naveli smo da kada zatvorite poruku koju trebate poslati poslužitelju na VAR Socket \u003d iO.Connect ("", ("sinkronizacija isključite na istovaru": TRUE)); socket.on ("webrertc", utičnica); Socket.on ("Novi", Soktewlekseer); // Odmah pošaljite zahtjev za ulazak u Socket.EMit Soba ("Soba", JSON.STRINGIFY ((ID: ME, Soba: Soba)); // Pomoćna funkcija za slanje adresnih poruka povezanih s WebTRC funkcijom SendVinocket (vrsta, poruka, na) (Socket.EMIT ("WEBRTC", JSON.STRINGIFY ((ID: ME, na: Tip, Vrsta, Podaci) ));););)

2.3. Postavke pojašnjenja

Većina pružatelja usluga pruža internetsku vezu putem NAT-a. Zbog toga izravna veza ne tako trivijalna afera. Prilikom izrade veze moramo odrediti popis omamljivih i skretanje poslužitelja koje će preglednik pokušati koristiti za zaobilaženje nat. Također određujemo par dodatnih opcija za povezivanje.

VAR Server \u003d (OSCERVERS: [URL: "Stun: 23.21.150.121"), (URL: "Stun: Stun.l.google.com: 19302"), (URL: "Okreni: Numb.viagenie.ca", vjerodajnica : "Vaša zaporka ide ovdje", korisničko ime: " [Zaštićeno e-poštom]")]); var opcije \u003d (opcionalno: [(DTLSSRTPKEYGREMENT: TRUE), // potreban za povezivanje između Chrome i Firefoxa (RtpdatakCannels: TRUE) // Obavezno u Firefoxu za korištenje DataChannels API])

2.4. Povezivanje novog korisnika

Kada se u sobi doda novi blagdan, poslužitelj nam šalje poruku. novi, Prema gore navedenim rukovateljima poruka, funkcija će nazvati. socketnewleer.

Var vršnjaci \u003d (); Funkcija SocketNewleeer (podaci); // stvoriti novi priključak VAR PC \u003d novi peerknonekcijski (poslužitelj, opcije); // inicijaliziranje IT initConnection (PC, podaci, "ponuda"); // Držite PIR na popisu Peers.connection \u003d PC; // stvoriti DataChannel za koji VAR Channel \u003d PC.Createdatakannel ("MyChannel", ()); Channel.owner \u003d podaci; peers.Channel \u003d kanal; // instalirati događaj rukovaci kanala veziva (kanal); // stvoriti SDP Ponudite PC.Createoffer (funkcija (ponuda));) funkcija init spojite (PC, ID, SDPTTYP) (PC.OneCandidad \u003d Funkcija (događaj) (ako (događaj) (event.candidate) (// kada je otkriven novi led kandidata, dodajte ga Popis za daljnje slanje peers.candidatecache.Push (event.candidate);) drugo (// Kada je završeno otkrivanje kandidata, rukovatelj će se ponovno nazvati, ali bez kandidata // u ovom slučaju šaljemo strah prvu SDP ponudu ili SDP Odgovor (ovisno o funkcionalnom parametru) ... SendVinocket (sdptpype, pc.localdescription, ID); // ... i onda su svi prethodno pronašli kandidate za led za (var i \u003d 0;< 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 kaže: "+ e.data +"
"; }; }

2.5. SDP ponuda, SDP odgovor, kandidat za led

Nakon primitka jedne od tih poruka, nazovite rukovatelj odgovarajuće poruke.

Funkcija usavršavanja (podaci) (podaci); prekidač (json.type) (kandidat) (JSON.ID, JSON.DATA); pauza; slučaj "ponuda": Remofferefeied (JSON. ID, JSON.DATA); Odgovor ": remoteanswerreceied (json.id, json.data); pauza;))

2.5.0 SDP ponuda.
Funkcija Remofferefeived (ID, podaci) (CreateEConnection (ID); VAR PC \u003d peers.Connection; pc.setremotedesription (podaci); PC.Create7sWer (funkcija (odgovor) (odgovor);));).) (Peers \u003d\u003d\u003d undefined) (peers \u003d (candidatecache :); var PC \u003d novi peerkonnekcija (poslužitelj, opcije); initConnection (PC, ID, "Odgovor"); Peers.connection \u003d PC; PC.Dondatachannel \u003d Funkcija (E ) (peers.channel \u003d e.Kannel; peers.Channel.owner \u003d ID; vezive (peers.channel);)))))
2.5.1 SDP odgovor.
Funkcija remoteanswerreceeceeve (ID, podaci) (VAR PC \u003d peers.Connection; PC.SetremoteDeSription (novi sessedDescription (podaci));)
2.5.2 Kandidat za led.
Funkcija RemoteCandeReced (ID, podaci) (CreateEConnection (ID); VAR PC \u003d peers.Connection; PC.AddiceCandidat (novi iceKandidat (podaci);)
2.6. Slanje poruke

Pritiskom na gumb Poslati. Funkcija se zove pošalji poruku., Sve što ona radi je prošlo na popisu vršnjaka i pokušava poslati određenu poruku svima.

Svrha ovog članka je na demonstracijskom uzorku peer video chat (P2P video chat) kako bi se upoznali sa svojom strukturom i načelom rada. U tu svrhu koristimo višekorisnički demonstracijski uzorak webrtc.io-demo videa chat. Može se preuzeti referencom: https://githeb.com/webrtc/webrtc.io-demo/tree/master/site.

Treba napomenuti da je Github web stranica ili web usluga za zajednički razvoj web projekata. Na informacijskim programima mogu staviti kodove svojih događaja, raspraviti ih i komunicirati jedni s drugima. Osim toga, neke velike IT tvrtke stavljaju svoje službene spremišta na ovim stranicama. Usluga je besplatna za open source projekte. Github je spremište knjižnica knjižnica, besplatan izvor.

Dakle, preuzeto iz GitHub A demonstracijski uzorak vršnjačkog video chat, za postavljanje na disku s osobnim računalom u izrađenom direktoriju za našu aplikaciju "Webrtc_demo".


Sl. jedan

Kako slijedi iz strukture (sl. 1), vršnjački videochat se sastoji od klijentski skripte.js i Server Server.js skripte implementirane u JavaScript programskom jeziku. Skripta (knjižnica) WEBRTC.IO.js (klijent) - pruža u stvarnom vremenu komunikacije između preglednika peer-to-name: "klijent klijent" i webrertc.js (klijent) i webrertc.js (poslužitelj), Korištenje WebSocket Protocol, navedite obostranu vezu između preglednika i web poslužitelja klijenta-poslužitelja.

Skripta webrtc.io.js (poslužitelj) ulazi u knjižnicu webrtc.io i nalazi se u node_modules chebrtc.io. Sučelje index.html video chat se implementira na HTML5 i CSS3. Sadržaj datoteka aplikacije WebTC_DEMO može se vidjeti jedan od HTML urednika, kao što je "Notepad ++".

Princip video razgovora će se provjeriti u PC datotečnom sustavu. Za pokretanje poslužitelja (server.js) na računalu morate postaviti node.js Runtime. Node.js vam omogućuje da pokrenete JavaScript izvan preglednika. Možete preuzeti Node.js po referenci: http://nodejs.org/ (verzija v0.10,13 dana 07/15/13). Na glavnoj stranici web-lokacije Node.org kliknite na gumb Preuzmi i idite na http://nodejs.org/download/. Za Windows korisnike, prvo download win.installer (.msi), a zatim pokrenite Win.installer (.msi) na računalu i instalirajte nodejs i "NPM paket manager" u direktoriju programa.




Sl. 2.

Dakle, nede.js se sastoji od razvoja i izvršenja JavaScript koda, kao i iz skupa interne modula koji se mogu instalirati pomoću NPM paketa upravitelja ili upravitelja.

Da biste instalirali module, potrebno je izvršiti naredbu na naredbenoj liniji iz imenika aplikacije (na primjer, "webrtc_demo): nPM Instalirajte ime_module, Tijekom instalacije moduli NPM upravitelja stvaraju mapu Node_modules u direktoriju s kojeg je izvedena instalacija. U procesu rada, Nodejs automatski povezuje module iz imenika Node_modules.

Dakle, nakon instalacije node.js otvaramo naredbeni redak i ažuriramo Express modul u mape mape Node_modules WeBrrtc_demo pomoću upravitelja NPM paketa:

C: webrtc_demo\u003e NPM instalirati Express

Express Modul je web okvir za node.js ili web platformu za razvoj aplikacija. Da biste imali globalni pristup Express, možete ga postaviti na ovaj način: nPM Instalacija -G Express.

Tada ću ažurirati Webtc.io modul:

C: webrtc_demo\u003e NPM instalirati webrertc.io

Zatim u naredbenom retku pokrenite poslužitelj: Server.js:

C: webrtc_demo\u003e čvor poslužitelj.js


Sl. 3.

Sve, poslužitelj uspješno radi (slika 3). Sada, pomoću web-preglednika, možete kontaktirati poslužitelj preko IP adrese i preuzeti web stranicu index.html s kojom će web preglednik preuzeti kod klijenta skriptu - script.js i kod WebTC.io. JS kod skripti, i obavite ih. Za rad video chat (za ugradnju veze između dva preglednika), potrebno je iz dva preglednika koja podržavaju WEBRTC, kontaktirajte IP adresu na poslužitelj signala koji radi na node.js.

Kao rezultat toga, sučelje klijentskog dijela komunikacijske aplikacije (video chat) otvara se pomoću zahtjeva za rješavanje pristupa komori i mikrofon (slika 4).



Sl. četiri

Nakon što kliknete na gumb "Dopusti", kamera i mikrofon za multimedijsku komunikaciju su povezani. Osim toga, putem video chat sučelja može se priopćiti s tekstualnim podacima (sl. 5).



Sl. pet

Treba napomenuti da. Poslužitelj je alarm i uglavnom je dizajniran za postavljanje veze između korisničkih preglednika. Za Server Server.js Server skriptu, pružajući WEBRTC alarmi, koristi node.js.

Većina materijala u Webrertc. Usredotočen na primijenjenu razinu pisanja koda i ne doprinosi razumijevanju tehnologije. Pokušajmo produbiti i saznati kako se veza događa, što je ručka sesije i kandidati za ono što trebate Onesvijestiti. i Skretanje Poslužitelj.

Webrertc.

Uvod

WEBRTC - tehnologija orijentirana na preglednik koja vam omogućuje povezivanje dvaju klijenata za prijenos video podataka. Glavne značajke - Interna podrška za preglednike (ne trebam te tehnologije treće strane uvedene adobe Flash.) i mogućnost povezivanja kupaca bez korištenja dodatnih poslužitelja - veze peer (Unaprijediti, p2p.).

Uspostaviti vezu p2p. - prilično težak zadatak, jer računala ne moraju uvijek javno IP. Adrese, odnosno adrese na internetu. Zbog malog iznosa IPv4. Razvijena je adresa (i sigurnosne svrhe) Nat.koji vam omogućuje stvaranje privatnih mreža, na primjer, za kućnu uporabu. Mnogi kućni usmjerivači su sada podržani. Nat. I zahvaljujući tome, svi kućni uređaji imaju pristup internetu, iako internetski pružatelji usluga obično pružaju jedan IP. adresa. Javnost IP. Adrese su jedinstvene na internetu i privatnim bilješkama. Stoga se spojite p2p. - Teško.

Kako bi ga bolje razumjeli, razmotrite tri situacije: Oba čvorovi su na istoj mreži (Slika 1)Oba čvorovi su u različitim mrežama (jedan u privatnom, drugom u javnosti) (Slika 2) i oba čvorova su u različitim privatnim mrežama s istim IP. Adrese (Slika 3).

Slika 1: Oba čvorova na istoj mreži

Slika 2: čvorovi u različitim mrežama (jedan u privatnom, drugom u javnosti)

Slika 3: čvorovi u različitim privatnim mrežama, ali s brojčanim jednakim adresama

Na slikama iznad prvog slova u dvostrukoj simboličkoj notici znači tip jedinice (p \u003d peer., R \u003d. usmjerivač.). U prvom crtežu, situacija je povoljna: čvorovi u svojoj mreži vrlo su identificirani putem mreže IP. adrese i stoga se mogu međusobno povezati. U drugom crtežu imamo dvije različite mreže, koje imaju slične numeracije čvorova. Ovdje su usmjerivači (usmjerivači), koji imaju dva mrežna sučelja - unutar svoje mreže i izvan svoje mreže. Tako da imaju dva IP. Adrese. Konvencionalni čvorovi imaju samo jedno sučelje kroz koje mogu komunicirati samo u svojoj mreži. Ako prenose podatke nekome izvan njihove mreže, onda samo s Nat. unutar usmjerivača (usmjerivač) i stoga vidljivi drugima ispod IP. Adresa usmjerivača je njihov vanjski IP. adresa. Tako da je čvor p1 tamo je unutrašnjost IP. = 192.168.0.200 i vanjski IP. = 10.50.200.5 Štoviše, posljednja adresa bit će vanjska i za sve ostale čvorove na svojoj mreži. Slična situacija i za čvor p2., Stoga je njihova veza nemoguća ako koriste samo svoje unutarnje (vlastite) IP. Adrese. Možete koristiti vanjske adrese, odnosno adrese usmjerivača, ali budući da su svi čvorovi u jednoj privatnoj mreži, ista vanjska adresa je prilično teška. Ovaj problem je riješen pomoću mehanizma Nat.

Što će se dogoditi ako još odlučimo povezati čvorove kroz njihove unutarnje adrese? Podaci neće ići dalje od mreže. Kako biste poboljšali učinak, možete zamisliti situaciju prikazanu na posljednjoj slici - u oba čvorova podudaraju se unutarnje adrese. Ako ih koriste za komunikaciju, svaki čvor će komunicirati sa sobom.

Webrertc. Uspješno se popisuje s takvim problemima pomoću protokola LED, što je istina, zahtijeva korištenje dodatnih poslužitelja ( Onesvijestiti., Skretanje). O svemu to ispod.

Dvije faze webrertc.

Povezati dva čvora kroz protokol Webrertc. (ili jednostavno RtcAko su dva vezna iPhone."A) potrebno je izvršiti neke preliminarne mjere za uspostavljanje veze. Ovo je prva faza - postavljanje veze. Druga faza je prijenos video podataka.

Odmah je vrijedno reći da barem tehnologija Webrertc. U svom radu koristi mnogo različitih načina za komunikaciju ( Tcp. i UDP.) i ima fleksibilno prebacivanje između njih, ova tehnologija nema protokol za prijenos podataka o priključenju, Ne iznenađuje, nakon svega, spojite dva čvora p2p. Ne tako jednostavno. Stoga je potrebno imati neke dodatni Metoda prijenosa podataka, ni na koji način povezan s Webrertc., Može biti prijenos utičnice, protokol Http.Može čak biti protokol SMTP. Ili ruski post. Ovaj prijenosni mehanizam primaran Podaci se nazivaju signal, Morate proći ne toliko informacija. Svi podaci se prenose kao tekst i podijeljeni su u dvije vrste - SDP. i Kandidat za led., Prvi tip se koristi za uspostavljanje logičkog spoja, a drugi za fizički. Detaljno o svemu ovome kasnije, ali samo je važno zapamtiti to Webrertc. To će nam dati neke informacije koje će morati prenijeti na drugi čvor. Čim damo sve potrebne informacije, čvorovi će se moći povezati i više ne trebaju našu pomoć. Dakle, signalni mehanizam koji moramo provesti odvojeno, će se koristiti samo kada je spojeni prilikom prijenosa video podataka neće se koristiti.

Dakle, razmotrite prvu fazu - fazu veze veze. Sastoji se od nekoliko stavki. Razmotrite ovu fazu najprije za čvor koji inicira vezu, a zatim za čekanje.

  • Inicijator (pozivatelj - pozivatelj):
    1. Ponudite početak prijenosa video prijenosa (FREEOFFER)
    2. Dobivanje vaše SDP. SDP.)
    3. Dobivanje tvoje Kandidat za led. Kandidat za led.)
  • Poziv na čekanju ( callee.):
    1. Dobivanje lokalnog (vašeg) toka medija i instalirajte ga za prijenos (GetuserMediaAm)
    2. Dobivanje rečenice za početak podataka o prijenosu videozapisa i stvaranje odgovora (CreationsWer)
    3. Dobivanje vaše SDP. objekt i prijenos kroz signalni mehanizam ( SDP.)
    4. Dobivanje tvoje Kandidat za led. objekata i prolaze kroz mehanizam signala ( Kandidat za led.)
    5. Dobivanje daljinskog (stranac) medija i prikazivanje na zaslonu (odadstream)

Razlika samo u drugom stavku.

Unatoč naizgled konfuziju koraka ovdje, postoje zapravo tri: slanje svoje medijske struje (klauzula 1), postavljanje spojeva parametara (PP.2-4), dobivanje tuđeg potoka (p.5). Najsloženiji je drugi korak, jer se sastoji od dva dijela: uspostava fizički i logičan Veze. Prvi označava putKroz koje pakete trebaju ići iz jednog mrežnog čvora na drugi. Drugi pokazuje parametri video / audio - Što koristiti kvalitetu za korištenje kodeka.

Mentalno fazi fREEOFFER. ili createanswer. Trebalo bi biti spojeno na stadije prijenosa SDP. i Kandidat za led. objekti.

Glavne esencije

Medijske struje (mediaStream)

Glavna bit je medijski tok, to jest, protok video i audio podataka, sliku i zvuk. Medijske struje su dvije vrste - lokalne i izbrisane. Lokalna dobiva podatke iz ulaznih uređaja (kamera, mikrofona) i daljinski upravljač preko mreže. Dakle, svaki čvor ima lokalni i udaljeni tok. U Webrertc. Za potoke postoji sučelje Mediastream i također postoji subvencija LocalMediaOstream Osobito za lokalni fluks. U JavaScript. Prvo se možete susresti samo i ako koristite libojaTada se možete suočiti s drugom.

U Webrertc. Unutar potoka postoji prilično zbunjujuća hijerarhija. Svaka nit može se sastojati od nekoliko medijskih zapisa ( Mediatrack), što se može sastojati od nekoliko medijskih kanala ( Mediachanil). I mediji se toka mogu biti donekle.

Razmotrite sve u redu. Za to ćemo imati na umu neki primjer. Pretpostavimo da želimo ne prenijeti ne samo video sami, već i video na našim stolom, na kojem komad papira leži na kojem ćemo nešto napisati. Trebat ćemo dva videozapisa (tablica) i jedan zvuk (mi). Jasno je da mi i tablica treba podijeliti u različite potoke, jer ti podaci vjerojatno slabo ovise jedni o drugima. Tako ćemo imati dva Mediastream"A je jedan za nas i jedan za stol. Prvi će sadržavati i video i audio podatke, a drugi je samo videozapis (slika 4).

Slika 4: Dva različita medija. Jedan za nas jedan za naš stol

Odmah je jasno da mediji toka barem treba uključivati \u200b\u200bsposobnost da sadrže podatke iz različitih vrsta - video i audio. To se uzima u obzir u tehnologiji i stoga se svaka vrsta podataka provodi kroz medijsku stazu Mediatrack, Media Track ima posebnu imovinu. ljubazan.koji određuje da ispred nas - video ili zvuk (slika 5)

Slika 5: Medijski tokovi se sastoje od medijskih staza

Kako će se sve dogoditi u programu? Stvorit ćemo dvije medijske tokove. Zatim stvorite dvije video zapise i jedan audio zapis. Dobivamo pristup kamerama i mikrofonu. Naveli smo svaki put koji uređaj koristi. Dodajte video i audio zapis u prvi medijski tok i video zapis s drugog fotoaparata u drugom mediju.

Ali kako razlikovati medijske tokove na drugom kraju veze? Za to, svaki medijski protok ima nekretninu. označiti - oznaka protoka, ime (slika 6). Ista nekretnina ima medijsku stazu. Iako na prvi pogled to se čini da se video iz zvuka može razlikovati na druge načine.

Slika 6: Streami za medije i tračnice identificiraju se oznakama

Dakle, i ako se medijski tragovi mogu identificirati nakon naljepnice, zašto bismo onda trebali koristiti dva medijska toka za naš primjer, umjesto jednog? Uostalom, možete prenijeti jedan medijski tok, a zapisi koriste različite putove. Došli smo do važne imovine medijskih potoka - oni sinkronizovati Medijske staze. Različiti medijski tokovi nisu sinkronizirani jedni s drugima, ali unutar svakog medijskog toka svih zapisa igrati u isto vrijeme.

Dakle, ako želimo naše riječi, naše emocije na licu i naši listovi papira reproduciraju se u isto vrijeme, vrijedi koristiti jedan medijski tok. Ako to nije tako važno, onda je profitabilnije koristiti različite tokove - slika će biti glatka.

Ako se određena staza mora isključiti tijekom prijenosa, možete koristiti imovinu. omogućeno. Medijske staze.

Na kraju je vrijedno razmišljati o stereo zvuku. Kao što znate, stereo zvuk je dva različita zvuka. I potrebno ih je prenositi odvojeno. Da biste to učinili, koriste se kanali. Mediachanil, Medijski put putanje može imati mnogo kanala (na primjer, 6, ako trebate zvuk 5 + 1). Unutar kanala za staze medija, naravno sinkroniziran, Za videozapis se obično koristi samo jedan kanal, ali se koristi nekoliko, na primjer, za oglašavanje.

Sumiranje: Koristimo medijsku tok za prijenos video i audio podataka. Unutar svakog medija, podaci se sinkroniziraju. Možemo koristiti nekoliko medijskih tokova ako ne trebamo sinkronizaciju. Unutar svakog medija Stream se nalazi medijska staza od dvije vrste - za video i za zvuk. Staze su obično ne više od dva, ali možda i više ako trebate prenositi nekoliko različitih videozapisa (sugovornika i njezinih tablica). Svaka staza može se sastojati od nekoliko kanala, koji se obično koristi samo za stereo zvuk.

U najjednostavnijoj situaciji videochata, imat ćemo jedan lokalni medijski tok, koji će se sastojati od dva kolosijeka - video zapisi i audio zapise, od kojih će se svaki sastojati od jednog glavnog kanala. Video zapis je odgovoran za fotoaparat, audio zapis je po mikrofon, a medijski tok je spremnik njih oboje.

Deskriptor sesije (SDP)

Različita računala uvijek će imati različite kamere, mikrofoni, video kartice i drugu opremu. Postoje mnogi parametri s kojim posjeduju. Sve to mora biti koordinirano za prijenos medija podataka između dva mrežna čvorova. Webrertc. Da li to automatski i stvara poseban opis - deskriptor sesije SDP., Prođite ovaj objekt na drugi čvor i možete prenositi podatke o mediju. Samo s povezivanjem s drugim čvorom još nije.

Da biste to učinili, koristite bilo koji mehanizam signalizacije. SDP. Možete prenijeti barem kroz utičnice, barem osobu (obavijestiti ga s drugim čvorom putem telefona), čak i poštom Rusije. Sve je vrlo jednostavno - bit ćete spremni SDP. I treba ga poslati. I kada primate s druge strane - za prijenos na Odjel Webrertc., Ručka sesije pohranjuje se kao tekst i može se mijenjati u njegovim aplikacijama, ali u pravilu nije potrebno. Kao primjer, prilikom povezivanja, desktofenefon se ponekad mora prisiliti da biste odabrali željeni audio kodek.

Obično, kada je veza postavljena, morate navesti određenu adresu, na primjer Url, Nema potrebe za to, jer kroz signalni mehanizam sami šaljete odredišne \u200b\u200bpodatke. Ukazati Webrertc.što želimo instalirati p2p. Veza koju želite nazvati Funkturnu funkciju. Nakon pozivanja ove značajke i uputa za njezinu posebnu uzvratiti poziv'Bit će stvoren SDP. objekt i prenositi na isto uzvratiti poziv, Sve što je potrebno od vas je prijenos ovog objekta preko mreže na drugi čvor (sugovornika). Nakon toga, na drugom kraju, podaci će doći kroz signalni mehanizam, naime ovo SDP. objekt. Ova sesija ručka za ovaj čvor je netko drugi i stoga nosi korisne informacije. Dobivanje ovog objekta je signal na početku veze. Stoga se morate pristati na to i nazvati funkciju Createanswera. Ona je potpuni analog o stvaranju. Opet u vašem uzvratiti poziv Prošlo je lokalni deskriptor sjednice i bit će potrebno prenijeti na mehanizam signalizacije.

Važno je napomenuti da je moguće nazvati funkciju Createanswera tek nakon što je primio tuđe SDP. objekt. Zašto? Jer lokalno SDP. Objekt koji će se generirati prilikom poziva CreatingsWer mora se osloniti na daljinski upravljač SDP. objekt. Samo u ovom slučaju moguće je koordinirati svoje postavke videozapisa s postavkama sugovornika. Također nije vrijedno zvati Creatingswera i stvaranja prije nego što primite lokalni medijski tok - neću imati ništa za pisanje SDP. objekt .

Kao B. Webrertc. Moguće je urediti SDP. Objekt, nakon primitka lokalnog deskriptora, on mora biti instaliran. Može se činiti pomalo čudnim da trebate prenositi Webrertc. Činjenica da nas je dala, ali protokol. Kada primite daljinski deskriptor, također trebate instalirati. Stoga morate instalirati dva deskriptora na jedan čvor - vlastiti i netko drugi (to jest, lokalni i daljinski).

Nakon toga rukovanje Čvorovi znaju o željama jedni drugima. Na primjer, ako je čvor 1 Podržava kodeke A. i B.i čvor 2 Podržava kodeke B. i C., Budući da svaki čvor poznaje vlastite i tuđe deskriptore, oba čvorovi će izabrati kodek B. (Slika 7). Logika veza je sada instalirana, a medijski tokovi mogu se prenositi, ali postoji još jedan problem - čvorovi su još uvijek povezani s mehanizmom signalizacije.


Slika 7: Koordinacija kodeka

Kandidati (kandidat za led)

Tehnologija Webrertc. Pokušava nas zbuniti novom metodologijom. Kada je veza instalirana, adresa tog čvora nije naveden s kojim se trebate povezati. Prvo instaliran logičan veza, a ne fizičkiIako je to uvijek učinjeno naprotiv. Ali neće se činiti čudnim ako ne zaboravite da koristimo mehanizam za signalizaciju treće strane.

Dakle, veza je već instalirana (logička veza), ali ne postoji put na koji mrežni čvorovi mogu prenositi podatke. Ovdje nije tako lako, ali počnimo s jednostavnim. Neka čvorovi su u jednoj privatnoj mreži. Kao što već znamo, lako se mogu povezati u svom unutarnjem IP. adrese (ili možda za neke druge, ako se ne koriste TCP / IP.).

Kroz neke uzvratiti poziv'i Webrertc. Reci nam Kandidat za led. Objekti. Oni također dolaze u tekstualnom obliku i također, kao i sa deskriptorima sesije, moraju jednostavno proslijediti mehanizam signalizacije. Ako je deskriptor sesije sadržavao informacije o našim instalacijama na razini komore i mikrofona, kandidati sadrže informacije o našoj lokaciji na mreži. Prenesite ih na drugi čvor, a on će se moći fizički povezati s nama, a budući da već ima deskriptor sesije, to je logički sposobno povezati i podatke "protok". Ako ne zaboravi poslati nas i njegov predmet kandidata, to jest, informacije o tome gdje je u samoj mreži, onda se možemo povezati s njom. Napomena Ovdje drugu razliku od klasične interakcije klijent-poslužitelja. Komunikacija s HTTP poslužiteljem nastaje prema shemi odgovora upita, klijent šalje podatke poslužitelju, obrađuje ih i šalje ih adresa navedena u paketu zahtjeva, U Webrertc. Moram znati dvije adrese i spojite ih s obje strane.

Razlika iz deskriptora sesije je da su potrebni samo udaljeni kandidati. Uređivanje ovdje je zabranjeno i ne može donijeti nikakvu korist. U nekim implementacijama Webrertc. Kandidati se moraju instalirati tek nakon instaliranja deskriptora sesije.

I zašto je bio deskriptor sjednice, a možda postoji mnogo kandidata? Jer se mjesto na mreži može odrediti ne samo unutarnji IP. adresu, ali i vanjsku adresu usmjerivača, a ne nužno jedan, kao i adrese Skretanje Poslužitelji. Ostatak stavka bit će posvećen detaljnom razmatranju kandidata i kako povezati čvorove iz različitih privatnih mreža.

Dakle, dva čvora su na istoj mreži (slika 8). Kako ih prepoznati? Preko IP. adrese. Nema drugog načina. Istina, još uvijek možete koristiti različite transport ( Tcp. i UDP.) i različite portove. To je informacija koja se nalazi u predmetu kandidata - IP., Luka., Prijevoz. I neke druge. Neka, na primjer, koristi UDP. Prijevoz I. 531 luka.

Slika 8: Dva čvorova su na istoj mreži.

Onda, ako smo u čvoru p1T. Webrertc. dajte nam takav predmet kandidata - , Ovdje nema točnog formata, već samo sheme. Ako smo u čvoru p2., onda je kandidat , Kroz alarmni mehanizam p1 Dobiti kandidat p2. (to je mjesto čvora p2., naime IP. i Luka.). Zatim p1 može povezati S. p2. direktno. Točnije, p1 će poslati podatke na adresu 10.50.150.3:531 U nadi da će doći p2., Bez obzira na ovu adresu pripada čvor p2. Ili neki posrednik. Važno je samo da će se putem ove adrese biti poslani i mogu postići p2..

Dok su čvorovi na istoj mreži - sve je jednostavno i jednostavno - svaki čvor ima samo jedan objekt kandidata (uvijek znači vlastiti, to jest, njegova lokacija na mreži). Ali kandidati će biti mnogo više kada će čvorovi biti u drugačiji mreže.

Okrenimo se složenijoj prigodi. Jedan čvor će biti iza usmjerivača (točnije, za NAT), a drugi čvor će biti na istoj mreži s ovim usmjerivačem (na primjer, na internetu) (slika 9).

Slika 9: Jedan čvor za nat, drugi ne

Ovaj slučaj ima određeno rješenje problema koji sada i razmotrimo. Kućni usmjerivač obično sadrži tablicu Nat., Ovo je poseban mehanizam osmišljen kako bi se osiguralo da čvorovi unutar privatne mreže usmjerivača mogu, na primjer, na web-lokacijama.

Pretpostavimo da je web-poslužitelj izravno povezan s internetom, odnosno ima javnost IP.* adresa. Neka bude čvor p2., Čvor p1 (Web klijent) Pošalji zahtjev za adresu 10.50.200.10 , Prvo, podaci padaju na usmjerivač r1ili radije na njegovom unutrašnjost sučelje 192.168.0.1 , Nakon toga, usmjerivač pamti adresu izvora (adresa p1) i ulazi u poseban stol Nat., zatim mijenjaju izvornu adresu na njezinu ( p1 r1). Zatim, na svoj način vanjski Sučelje usmjerivača poslano je podatke izravno na web poslužitelj p2., Web poslužitelj obrađuje podatke generira odgovor i šalje natrag. Šalje usmjerivač r1Budući da je onaj koji stoji na suprotnoj adresi (usmjerivač je zamijenio adresu njegovoj). Usmjerivač dobiva podatke, gleda u tablicu Nat. i prosljeđuje ove čvorove p1, Usmjerivač djeluje ovdje kao posrednik.

A što ako se nekoliko čvorova s \u200b\u200bunutarnje mreže istovremeno okrene vanjskoj mreži? Kako će usmjerivač razumjeti tko će poslati odgovor natrag? Ovaj problem je riješen port, Kada usmjerivač zamjenjuje adresu čvora na njegovu, ona također zamjenjuje luku. Ako se dva čvora privlače internet, usmjerivač zamjenjuje svoje izvorne portove drugačiji, Zatim, kada se paket s web-poslužitelja vrati na usmjerivač, usmjerivač će razumjeti port koji je ovaj paket dodijeljen. Primjer ispod.

Povratak na tehnologiju Webrertc., ili radije, s njegovim dijelom koji koristi LED Protokol (odavde i LED Kandidati). Čvor p2. ima jedan kandidat (njegovo mjesto u mreži - 10.50.200.10 ) i čvor p1koji stoji iza usmjerivača s Nat će imati dva kandidata - lokalno ( 192.168.0.200 ) i kandidat usmjerivača ( 10.50.200.5 ). Prvi nije koristan, ali se ipak generira, jer Webrertc. Ne zna ništa o udaljenom čvoru - može biti u istoj mreži, a možda i ne. Drugi kandidat će biti u ruci i, kao što već znamo, luka će igrati važnu ulogu (proći Nat.).

Zabilježite u tablici Nat. Generira se samo kada se podaci izlaze iz unutarnje mreže. Dakle, čvor p1 Mora biti prvi za prijenos podataka i tek nakon ovog čvora p2. moći ćete doći do čvora p1.

Na praksi oba čvorova biti u Nat., Stvoriti unos u tablici Nat. Svaki usmjerivač, čvorovi moraju poslati nešto na udaljeni čvor, ali ovaj put ni prvo ne može doći do drugog niti suprotno. To je zbog činjenice da čvorovi ne znaju svoje vanjske IP. Adrese i slanje podataka na unutarnje adrese besmislene.

Međutim, ako su poznate vanjske adrese, veza će se lako instalirati. Ako je prvi čvor postavljen podaci na drugom čvoru usmjerivač, zatim ih usmjerivač ignorira, od svog stola Nat. Dok je prazna. Međutim, u prvom smjeru čvora u tablici Nat. Potrebna zapis. Ako drugi čvor sada šalje podatke na prvi čvor usmjerivač, usmjerivač će ih uspješno prenijeti na prvi čvor. Sada i stol Nat. Drugi usmjerivač treba podatke.

Problem je u tome što naučiti vanjske IP. Adresa, potreban vam je čvor koji se nalazi u zajedničkoj mreži. Da biste riješili takav problem, koriste se dodatni poslužitelji koji su izravno povezani s internetom. Uz njihovu pomoć, nježeni unosi su također stvoreni u tablici. Nat..

Stun i skrenite poslužitelj

Kada se inicijalizira Webrertc. Morate navesti dostupne Onesvijestiti. i Skretanje poslužitelji koji će biti pozvani u budućnosti LED poslužitelji. Ako poslužitelji nisu navedeni, samo čvorovi mogu biti spojeni na istoj mreži (povezani s njom bez Nat.). Odmah je to vrijedno napomenuti 3g.-Eset nužno koristiti Skretanje Poslužitelji.

Onesvijestiti. poslužitelj - Ovo je samo poslužitelj na internetu koji vraća povratnu adresu, odnosno adresu Skupštine pošiljatelja. Čvor koji dolazi pokraj usmjerivača Onesvijestiti. Poslužitelj za prolazak Nat., Pakiran Onesvijestiti. Poslužitelj sadrži izvornu adresu - adresu usmjerivača, to jest, vanjska adresa našeg čvora. Ova adresa Onesvijestiti. Poslužitelj i šalje natrag. Dakle, čvor dobiva vanjsku IP. Adresu i priključak kroz koji je dostupan od mreže. Unaprijediti, Webrertc. S ovom adresom stvara dodatni kandidat (vanjska adresa usmjerivača i luke). Sada u tablici Nat. Usmjerivač ima unos koji preskače pakete poslane na usmjerivač po željenom priključkom na naš čvor.

Razmotrite ovaj proces na primjeru.

Primjer (Rad Stun Server)

Onesvijestiti. Poslužitelj će biti označen s1., Usmjerivač, kao i prije, kroz r1i čvor - kroz p1, Također će biti potrebno slijediti tablicu Nat. - Mi to označavamo kao r1_nat., Štoviše, ova tablica obično sadrži mnoge zapise iz različitih čvorova podmreže - oni neće biti doneseni.

Dakle, na početku imamo prazan stol r1_nat..

Tablica 2: Zaglavlje paketa

Čvor p1 Šalje ovaj usmjerivač paketa r1 (Nije važno koliko se različite tehnologije mogu koristiti u različitim podmrežema). Usmjerivač mora biti zamijenjen izvornoj adresi SRC IP.Budući da adresa navedena u paketu nije prikladna za vanjsku podmrežu, štoviše, adrese iz ovog raspona su rezervirane, a nema adrese na internetu ima takav adresu. Usmjerivač čini zamjenu u pakiranju i stvara novi unos u svom stolu r1_nat., Da bi to učinio, mora smisliti broj porta. Sjetite se da se od nekoliko čvorova unutar podmreže može pristupiti vanjskoj mreži, tada u tablici Nat. Dodatne informacije treba pohraniti tako da usmjerivač može odrediti koji je od ovih više čvorova obrnuti paket s poslužitelja. Neka usmjerivač izmisli luku 888 .

Promijenjen naslov paketa:

Tablica 4: Nat tablica napunjena s novim snimanjem

Ovdje IP. Adresa i priključak za podmrežu apsolutno je isto kao i izvorni paket. Zapravo, kada se zaustavilo, moramo imati način da ih u potpunosti vratimo. IP. Adresa za vanjsku mrežu je adresa usmjerivača, a luka se promijenila u usmjerivač izumljen.

Ovaj priključak na kojem čvor p1 preuzima vezu - to je, naravno, 35777 ali podaci o brodu poslužitelja fiktivan luka 888 koji će se mijenjati usmjerivač na sadašnjost 35777 .

Dakle, usmjerivač je zamijenio adresu i priključak izvora u zaglavlju paketa i dodao je ulazak na stol Nat., Sada se paket šalje preko mrežnog poslužitelja, to jest, čvor s1., Na ulazu s1. Ima takav paket:

SRC IP. SRC port. IP. Luka.
10.50.200.5 888 12.62.100.200 6000

Tablica 5: Stun poslužitelj je primio paket

Ukupno, Onesvijestiti. Poslužitelj zna da je došao paket s adrese 10.50.200.5:888 , Sada ova adresa poslužitelj šalje natrag. Vrijedi ostati i ponovno vidjeti da smo upravo razmotrili. Stolovi iznad su komad zaglavlje paket nije na svim svojim sadržaj, Nismo govorili o sadržaju, jer to nije tako važno - to je nekako opisano u protokolu Onesvijestiti., Sada ćemo uzeti u obzir uz naslov također sadržaj. Bit će jednostavno i sadrži adresu usmjerivača - 10.50.200.5:888 Iako smo ga uzeli zaglavlje Paket. To se ne čini često, obično protokoli nisu važne informacije o adresama čvorova, važno je samo da se paketi isporučuju za njihovu namjenu. Ovdje smatramo protokolom koji postavlja put između dva čvora.

Dakle, sada imamo drugi paket koji ide u suprotnom smjeru:

Tablica 7: Stun poslužitelj šalje paket s takvim sadržajem

Dalje, paket putuje preko mreže dok se ne ispostavilo da bude na vanjskom sučelju usmjerivača r1, Usmjerivač razumije da mu paket nije namijenjen. Kako to razumije? Može se naći samo u luci. Luka 888 Ne koristi se za svoje osobne ciljeve, već koristi za mehanizam Nat., Stoga, u ovoj tablici, usmjerivač izgleda. Gleda u stupac Vanjski port. i tražeći niz koji se podudara Luka. iz dostavljenog paketa, to jest 888 .

Unutarnji IP. Unutarnji priključak. Vanjski IP. Vanjski port.
192.168.0.200 35777 10.50.200.5 888

Tablica 8: NAT tablica

Imali smo sreće, takva linija postoji. Ako nije bilo sreće, paket bi jednostavno bio odbačen. Sada morate razumjeti tko iz podmreže nužno je poslati ovaj paket. Nemojte žuriti, sjećamo se važnosti luka u ovom mehanizmu. U isto vrijeme, dva čvora u podmreži mogla bi poslati zahtjeve na vanjsku mrežu. Zatim, ako je usmjerivač došao na prvi čvor 888 , Onda bi se drugi smislio luka 889 , Pretpostavimo da se to dogodilo, to jest tablica r1_nat. izgleda tako:

Tablica 10: usmjerivač zamjenjuje adresu prijemnika

SRC IP. SRC port. IP. Luka.
12.62.100.200 6000 192.168.0.200 35777

Tablica 11: Usmjerivač je zamijenio adresu prijemnika

Paket uspješno dolazi do čvora p1 I gledajući sadržaj paketa, čvor uči o svom vanjskom IP. Adresu, odnosno o adresi usmjerivača u vanjskoj mreži. On također poznaje luku koju usmjerivač prođe kroz Nat..

Što je sljedeće? Koja je korist od ovoga? Koristite je zapis u tablici r1_nat., Ako sada netko će poslati na usmjerivač r1 Paket s lukom 888 Tada će usmjerivač preusmjeriti ovaj čvor paketa p1, Dakle, stvoren je mali uski prolaz do skrivenog čvora p1.

Iz gore navedenog primjera možete dobiti neku ideju o radu. Nat. i bit Onesvijestiti. Poslužitelj. Općenito, mehanizam LED i Omamljivanje / okretanje Poslužitelji su samo usmjereni na prevladavanje ograničenja Nat..

Ne postoji jedan usmjerivač između čvora i poslužitelja, već nekoliko. U tom slučaju, čvor će dobiti adresu tog usmjerivača, koji je prvi koji će ići na istu mrežu kao i poslužitelj. Drugim riječima, dobivamo adresu usmjerivača na Onesvijestiti. Poslužitelj. Za p2p. Komunikacije Ovo je upravo ono što nam je potrebno, ako ne zaboravite činjenicu da će se linija koju trebate u svakom usmjerivaču dodati u tablicu Nat., Stoga će suprotno biti isto kao i željezo.

Skretanje Poslužitelj je poboljšan Onesvijestiti. poslužitelj. Odavde ga treba odmah ukloniti Skretanje Poslužitelj može raditi i kako Onesvijestiti. poslužitelj. Međutim, postoje koristi. Ako a p2p. Komunikacija je nemoguća (kao što je u 3g. Mreže), poslužitelj se prebacuje na način repetitora ( relej), To jest, radi kao posrednik. Naravno, ne o tome p2p. onda ne dolazi, ali izvan mehanizma LED Čvorovi misle da izravno komuniciraju.

U kojim je slučajevima potrebni Skretanje poslužitelj? Zašto ne dovoljno Onesvijestiti. Poslužitelji? Činjenica je da postoji nekoliko sorti Nat., Jednako su zamijenjeni IP. Adresa i luka, međutim, neki od njih imaju dodatnu zaštitu od "falsifikacije". Na primjer, u simetričan Stol Nat. Još 2 parametri se spremaju - IP. i udaljeni čvor luka. Paket iz vanjske mreže prolazi kroz Nat. U internu mrežu samo ako se izvorna adresa i luka podudara s tablicom zabilježenim u tablici. Stoga, fokus S. Onesvijestiti. Poslužitelj ne uspije - tablica Nat. Trgovine adrese i priključak Onesvijestiti. poslužitelji i kada usmjerivač dobije paket od Webrertc. Sugovornika ga baca, kao što je on "falsificiran". Nije došao Onesvijestiti. Poslužitelj.

Na ovaj način Skretanje Poslužitelj je potreban u slučaju kada su oba sugovornici za simetričan Nat. (Svatko za sebe).

Kratak sažetak

Ovdje su neke izjave o entitetima. Webrertc.To se uvijek mora držati u tvojoj glavi. Detaljno su opisani gore. Ako se čini da bilo koja izjava neće biti potpuno jasna, ponovno pročitajte odgovarajuće stavka.

  • Medijski protok
    • Video i audio podaci pakiraju se u medijske tokove
    • Mediji Streami sinkroniziraju medijske staze iz koje se sastoje
    • Različiti medijski tokovi nisu sinkronizirani jedni s drugima.
    • Medijski tokovi mogu biti lokalni i daljinski, fotoaparat i mikrofon obično su povezani s lokalnim, izbrisanim primanjem podataka iz mreže u kodiranom obliku.
    • Medijske pjesme su dvije vrste - za video i za zvuk
    • Medijske pjesme imaju mogućnost uključivanja / isključivanja
    • Medijske staze sastoje se od medijskih kanala
    • Mediji staze sinkroniziraju medijske kanale iz kojih se sastoje
    • Medijske struje i medijske staze imaju naljepnice za koje se mogu razlikovati
  • Sesija deskriptora
    • Ručka sesije se koristi za logički povezivanje dva mrežna čvorova.
    • Ručka sesija pohranjuje informacije o dostupnim metodama kodiranja videozapisa i audio podataka.
    • Webrertc. koristi vanjski mehanizam signalizacije - zadatak prosljeđivanja deskriptora sesije ( sDP.) pada na zahtjev
    • Mehanizam logičkog spoja sastoji se od dvije faze - prijedlozi ( ponuda.) i odgovor ( odgovor.)
    • Generiranje deskriptora sesije je nemoguće bez korištenja lokalnog medijskog toka u slučaju sugestije ( ponuda.) i nemoguće bez upotrebe deskriptora daljinskog sesije u slučaju odgovora ( odgovor.)
    • Dobiveni deskriptor mora biti postignut Webrertc., štoviše, nije bitno je li ovaj deskriptor dobiven na daljinu ili lokalno iz iste implementacije Webrertc.
    • Postoji mala uređivanja deskriptora sesije
  • Kandidati
    • Kandidat Kandidat za led.) - Ovo je adresa čvora u mreži
    • Adresa čvora može biti vaša, a možda i adresu usmjerivača ili Skretanje Poslužitelj
    • Kandidati su uvijek puno
    • Kandidat se sastoji od IP. Adrese, luka i vrsti prijevoza ( Tcp. ili UDP.)
    • Kandidati se koriste za uspostavljanje fizičke veze dva čvorova u mreži.
    • Kandidati također moraju biti poslani putem mehanizma signala
    • Kandidati također trebaju prenositi provedbu Webrertc., međutim, samo daljinski
    • U nekim implementacijama Webrertc. Kandidati se mogu prenijeti samo nakon instaliranja deskriptora sesije
  • Omamljivanje / okretanje / led / nat
    • Nat. - mehanizam vanjskog pristupa
    • Kućni usmjerivači podržavaju posebnu stolu Nat.
    • Usmjerivač zamjenjuje adrese u paketima - adresu vlastitog izvora, u slučaju da paket odlazi na vanjsku mrežu, a adresa prijemnika na adresu čvora u internu mrežu, ako je paket došao s vanjskog mreža
    • Osigurati višekanalan pristup vanjskoj mreži Nat. Koristi portove
    • LED - Mehanizam za skeniranje Nat.
    • Onesvijestiti. i Skretanje Poslužitelji - poslužitelji poslužitelja za obilaznicu Nat.
    • Onesvijestiti. Poslužitelj vam omogućuje da stvorite potrebne unose u tablici. Nat.i također vraća vanjsku adresu čvora
    • Skretanje Server generalizira Onesvijestiti. mehanizam i čini ga uvijek radeći
    • U najgorim slučajevima Skretanje Poslužitelj se koristi kao posrednik ( relej), i.e p2p. pretvara u klijent-klijent klijent komunikaciju.

Webrertc. (Web u stvarnom vremenu komunikacije) je tehnologija koja omogućuje web aplikacije i web-lokacije za snimanje i selektivno prijenos audio i / ili video medijskih tokova, kao i razmjenu proizvoljnih podataka između preglednika, bez obvezne uporabe posrednika. Skup standarda koji uključuje WEBRTC tehnologiju omogućuje razmjenu podataka i obavljanje vršnjačke telekonferencije, bez potrebe za instalacijom dodataka ili bilo kojeg drugog softvera treće strane.

WEBRTC se sastoji od nekoliko međusobno povezanih programskih sučelja (API) i protokola koji rade zajedno. Dokumentacija koju ćete naći ovdje će vam pomoći razumjeti osnove WEBRTC-a, kako konfigurirati i koristiti vezu s podacima i medijskim strujom, i još mnogo toga.

Kompatibilnost

Budući da je provedba WebTC-a biti u procesu postajanja i svakog preglednika ima i WebTC funkcije, preporučujemo korištenje Adapter.js Polyfil knjižnice, od Googlea, prije rada na vašem kodu.

Adapter.js koristi klinove i polifilantse za glatke priključne razlike u VEBRTC implementaciji među kontekstima koje ga podržavaju. Adapter.js također obrađuje prefiks proizvođača i druge razlike u imenovanju svojstava, olakšavanje razvoja procesa na WEBRTC-u, s najprikladnijim rezultatom. Knjižnica je također dostupna kao NPM paket.

Da biste dodatno istražili knjižnicu adaptera.js, gledamo.

Koncepti i uporaba WEBRTC-a

WEBRTC je višenamjenska i zajedno sa snažnim multimedijskim značajkama za web, uključujući podršku audio i video konferencije, dijeljenje datoteka, snimanje zaslona, \u200b\u200bupravljanje identifikacijom i interakciju s zastarjelim telefonskim sustavima, uključujući podršku za prijenos DTMF ton signala biranja , Priključci između čvorova mogu se stvoriti bez uporabe posebnih upravljačkih programa ili dodataka, a često i bez sredstava.

Veza između dva čvora je predstavljena kao objekt sučelja RTCPeerconnection. Čim se veza uspostavi i otvori, koristeći objekt RTCPeerconnection, MediaStream s) i / ili kanali podataka (RTCdatachannel s) može se dodati u priključak.

Medijski tokovi mogu se sastojati od bilo kojeg broja pjesama (pjesama) informacija o medijima. Ove staze su predstavljene pomoću objekata sučelja MediaStreamTrack i mogu sadržavati jednu ili više vrsta medija jezika, uključujući audio, video, tekst (kao što su titlovi ili glave poglavlja). Većina niti se barem sastoji samo jedan od audio zapisa (jedan audio zapis) ili video zapise, a može se poslati i dobiti kao potoci (mediji trivijalni) ili pohranjeni u datoteci.

Također, možete koristiti vezu između dva čvora za razmjenu proizvoljnih podataka pomoću RTcdatakcannel objekta sučelja, koji se može koristiti za prijenos informacija o uslugama, podacima o zalihama, paketima statusa igre, prijenos datoteka ili zatvorenim podatkovnim kanalima.

više detalja i linkova za relevantne vodiče i tutoriale potrebne

Webrertc sučelja

Zbog činjenice da WebTC osigurava sučelje koji rade zajedno kako bi izvršili različite zadatke, podijelili smo ih u kategorije. Pogledajte pokazivač abecednog bočnog panela za brzu navigaciju.

Povezivanje i upravljanje

Ta se sučelja koriste za konfiguriranje, otvaranje i upravljanje WebTC vezama. Oni predstavljaju jednokratne medijske veze, kanale podataka i sučelja koja se koriste razmjenom informacija o mogućnostima svakog čvora za odabir najbolje konfiguracije prilikom instaliranja dvostrane multimedijske veze.

RTCPeerconnection predstavlja WEBRTC vezu između lokalnog računala i udaljenog čvora. Koristi se za rješavanje uspješnog prijenosa podataka između dva čvora. RTCSessessDescription predstavlja parametre sesije. Svaki RTCSessionDescription sadrži opise tipa koji pokazuje koji dio (ponuda / odgovora) pregovaračkog procesa, opisuje, a SDP sesija SDP. RTCiceCadidate je kandidat za instaliranje internetske veze (ICE) za postavljanje RTCPeerconnection Connections. RTCiceTransport pruža informacije o alatu za internet priključak (led). RTCPeercondiciclektictent predstavlja događaje koji se pojavljuju s kandidatima led obično RTCPeerknection. Jedan tip se prenosi na ovaj objekt događaja: IceCadidate. RtCrtplender kontrolira iskrivljeno i prijenos podataka kroz MediaTstreamTrack objekt za objekt RTCPeerconnection. RTCRTPRECEIVER upravlja prijem i dekodirajući podatke putem objekta MediaStreamTrack za objekt RTCPeerconnection. RTCTrackevent označava da je stvoren novi dolazni medijstrukt objekt i dodan je objekt tipa RtCrtpreceiver u objekt RTCPeerconnection. RTccertifinate predstavlja certifikat koji koristi objekt RTCPeerconnection. RTCdatacannel predstavlja dvostruki podatkovni kanal između dva čvorova veza. RTCDATACHANELevent predstavlja događaje koji se događaju kada je objekt tipa Rtcdatachannel priključen na objekt objekta objekta RTCPeerconnection. RTCDTMFSender kontrolira kodiranje i prijenos dvostrukog multi-frekvencijskog (DTMF) alarm za objekt tipa RTCPeerkNection. RTCDTMFONCHANGEEVANT označava dolazni događaj za promjenu tona Darton Multi-frekvencijskog alarma (DTMF). Ovaj događaj se ne pojavljuje (osim ako nije drugačije naznačeno) i nije otkazan (osim ako nije drugačije naznačeno). RTCStatisReport asinchrono izvješćuje status prenosećeg objekta MediaStreamTrack. RTCidentityproviderreGistrar registrira davatelja identifikacije (IDP). RTCidentityprovider aktivira sposobnost preglednika da zatraži stvaranje ili provjeru obveza identifikacije. RTCidentityity predstavlja identifikator udaljenog čvora trenutne veze. Ako čvor još nije instaliran i potvrđen, veza na sučelje će se vratiti nula. Nakon instalacije ne mijenja. RTCidentityevent predstavlja objekt objekta koji deklarifikacija identifikator identifikator (IDP). Vrsta objekta RTCPeerconnection. Jedan tip se prenosi na ovaj događaj identiteta. RTCidentityErorevent predstavlja objekt događaja o pogrešci povezan s identifikacijskim davateljem (IDP). Vrsta objekta RTCPeerconnection. Dvije vrste pogrešaka se prenose na ovaj događaj: IDPSERTERROR i IDPVALIDATIORERR.

Priručnik

Pregled arhitekture WebTC-a pod API-ja, koji koriste programeri za stvaranje i korištenje WEBRTC-a, skup je mrežnih protokola i standarda spajanja. Ovaj pregled je izlog ovih standarda. WEBRTC vam omogućuje organiziranje veze u načinu čvora za prijenos proizvoljnih podataka, audio, video streamova ili bilo koje kombinacije u pregledniku. U ovom članku pogledamo život sesije WebTC-a, počevši s instalacijom veze i prolazim kroz cijeli put prije nego što se dovrši kada više nije potrebno. WEBRTC WEBRTC WEBRTC Pregled se sastoji od nekoliko međusobno povezanih programskih sučelja (API) i protokola koji rade zajedno kako bi pružili podršku za razmjenu podataka i medijskih tokova između dva ili više čvorova. Ovaj članak prikazuje kratak pregled svakog od ovih API-ja i koju svrhu provodi. Osnove WebRTC Ovaj članak će vas zadržati kroz stvaranje RTC preglednika RTC. Do kraja ovog članka, morate imati radne podatke i medijski kanal koji radi u načinu rada od točke do točke. WebTC protokoli u ovom članku predstavlja protokole, uz koji je stvoren API WEBRTC. Ovaj vodič opisuje kako možete koristiti jedinični čvor i povezati