Servicii web cloud de comunicare bazate pe WebRTC. WebRTC, chat audio și video direct în browser fără nicio aplicație Conexiune prin WebRTC

WebRTC(Web Real-Time Communications) este o tehnologie care permite aplicațiilor și site-urilor Web să capteze și să transmită selectiv fluxuri media audio și/sau video, precum și să schimbe date arbitrare între browsere, fără a utiliza neapărat intermediari. Setul de standarde pe care le include tehnologia WebRTC vă permite să faceți schimb de date și să desfășurați teleconferințe peer-to-peer, fără a fi nevoie ca utilizatorul să instaleze pluginuri sau orice alt terț. software.

WebRTC constă din mai multe interconectate interfețe software(API) și protocoale care funcționează împreună. Documentația pe care o veți găsi aici vă va ajuta să înțelegeți elementele de bază ale WebRTC, cum să configurați și să utilizați o conexiune pentru streaming de date și media și multe altele.

Compatibilitate

Deoarece implementarea WebRTC este încă la început și fiecare browser are funcționalitate WebRTC, vă recomandăm insistent să utilizați biblioteca de completare polivalentă Adapter.js de la Google înainte de a începe să lucrați la codul dvs.

Adapter.js folosește wedges și polyfills pentru a compensa fără probleme diferențele în implementările WebRTC dintre contextele care îl suportă. Adapter.js gestionează, de asemenea, prefixele furnizorilor și alte diferențe de denumire a proprietăților, facilitând dezvoltarea pe WebRTC cu cele mai compatibile rezultate. Biblioteca este disponibilă și ca pachet NPM.

Pentru a explora în continuare biblioteca Adapter.js, aruncați o privire.

Concepte și utilizare WebRTC

WebRTC este multifuncțional și, împreună cu , oferă capabilități multimedia puternice pentru Web, inclusiv suport pentru conferințe audio și video, partajare de fișiere, captură de ecran, gestionare a identității și interoperabilitate moștenită. sisteme telefonice, inclusiv suport pentru apelarea tonurilor DTMF . Conexiunile între noduri pot fi create fără utilizarea de drivere sau plugin-uri speciale și, adesea, fără servicii intermediare.

Conexiunea dintre două noduri este reprezentată ca un obiect de interfață RTCPeerConnection. Odată ce o conexiune este stabilită și deschisă, folosind obiectul RTCPeerConnection, fluxurile media (MediaStreams) și/sau canalele de date (RTCDataChannels) pot fi adăugate la conexiune.

Fluxurile media pot consta din orice număr de piese (melodii) de informații media. Aceste piese sunt reprezentate de obiecte de interfață MediaStreamTrack și pot conține unul sau mai multe tipuri de date media, inclusiv audio, video, text (cum ar fi subtitrări sau titluri de capitole). Majoritatea fluxurilor constau din cel puțin o singură pistă audio (o pistă audio) sau pistă video și pot fi trimise și primite ca fluxuri (media în timp real) sau salvate într-un fișier.

De asemenea, puteți utiliza o conexiune între două noduri pentru a schimba date arbitrare folosind obiectul de interfață RTCDataChannel, care poate fi folosit pentru a transfera informatii oficiale, date stoc, pachete de stare a jocului, transfer de fișiere sau canale de date închise.

sunt necesare mai multe detalii și link-uri către ghiduri și tutoriale relevante

Interfețe WebRTC

Deoarece WebRTC oferă interfețe care lucrează împreună pentru a îndeplini diferite sarcini, le-am împărțit în categorii. Consultați indexul barei laterale pentru navigare rapidă.

Configurarea și gestionarea conexiunii

Aceste interfețe sunt folosite pentru a configura, deschide și gestiona conexiunile WebRTC. Acestea reprezintă conexiuni media cu un singur strat, canale de date și interfețe care sunt utilizate pentru a schimba informații despre capacitățile fiecărui nod pentru a selecta cea mai bună configurație pentru stabilirea unei conexiuni multimedia bidirecționale.

RTCPeerConnection Reprezintă o conexiune WebRTC între calculator localși nodul la distanță. Folosit pentru a gestiona transferul de date cu succes între două noduri. RTCSessionDescription Reprezintă parametrii sesiunii. Fiecare RTCSessionDescription conține descrieri de tip , indicând ce parte (ofertă/răspuns) a procesului de negociere o descrie și un descriptor SDP pentru sesiune. evenimente: icecandidate.

RTCRtpSender Controlează fluxul și transmiterea datelor printr-un obiect de tip MediaStreamTrack pentru un obiect de tip RTCPeerConnection.

RTCRtpReceiver Controlează recepția și decodificarea datelor printr-un obiect de tip MediaStreamTrack pentru un obiect de tip RTCPeerConnection. RTCTrackEvent Indică faptul că un nou obiect MediaStreamTrack de intrare a fost creat și un obiect RTCRtpReceiver a fost adăugat la obiectul RTCPeerConnection. RTCCertificate Reprezintă un certificat care utilizează obiectul RTCPeerConnection. hai să mergem până la capăt cale până când este finalizată când nu mai este necesar.

Prezentare generală a API-ului WebRTC WebRTC constă din mai multe interfețe de programare a aplicațiilor (API) și protocoale interconectate care funcționează împreună pentru a sprijini schimbul de date și fluxuri media între două sau mai multe noduri. Acest articol oferă o scurtă prezentare generală a fiecăruia dintre aceste API-uri și scopului pe care îl servesc. WebRTC Noțiuni de bază pentru WebRTC Acest articol vă va ghida prin crearea unei aplicații RTC între browsere. Până la sfârșitul acestui articol, ar trebui să aveți un canal de date și media de lucru punct la punct. Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată Majoritatea materialului pe se concentrează pe nivelul aplicației de codificare și nu contribuie la înțelegerea tehnologiei. Să încercăm să mergem mai adânc și să aflăm cum are loc conexiunea, ce sunt descriptorul de sesiune și candidații, pentru ce sunt necesari aceștia

STUN

Şi

ÎNTOARCE server. WebRTC Introducere WebRTC este o tehnologie orientată spre browser care vă permite să conectați doi clienți pentru transferul de date video. Caracteristici principale: suport intern pentru browser (nu este nevoie de tehnologii implementate de terți, cum ar fi adobe flash).

) și capacitatea de a conecta clienți fără a utiliza servere suplimentare - conexiune adobe flash de la persoană la persoană (mai departe, p2p Stabiliți o conexiune- o sarcină destul de dificilă, deoarece computerele nu au întotdeauna public IP adrese, adică adrese de pe Internet. Datorită cantității mici IP IPv4 (mai departe, adrese (și din motive de securitate), a fost dezvoltat un mecanism (mai departe, NAT adobe flash, care vă permite să creați rețele private, de exemplu, pentru uz casnic. Multe routere de acasă acceptă acum

și datorită acestui fapt, toate dispozitivele de acasă au acces la Internet, deși furnizorii de internet oferă de obicei unul adresa. Public adresele sunt unice pe Internet, dar adresele private nu sunt. Prin urmare conectează-te - dificil. Pentru a înțelege mai bine acest lucru, luați în considerare trei situații: ambele noduri sunt în aceeași rețea (mai departe,(Figura 1) , ambele noduri sunt pe rețele diferite (unul este privat, celălalt este public).

(Figura 2)

și ambele noduri sunt pe rețele private diferite cu același

adrese

(Figura 3) Figura 1: Ambele noduri din aceeași rețea Figura 2: Noduri în diferite rețele (unul în privat, unul în public) Figura 3: Noduri din rețele private diferite, dar cu adrese egale numeric). În prima figură, situația este favorabilă: nodurile din rețeaua lor sunt complet identificate de rețea (mai departe, adrese și, prin urmare, se pot conecta direct între ele. În a doua figură avem două rețele diferite cu numere de noduri similare. Aici apar routerele (routere), care au două interfețe de rețea - în interiorul rețelei și în afara rețelei lor. De aceea au două (mai departe, adrese. Nodurile obișnuite au o singură interfață prin care pot comunica doar în cadrul rețelei lor. Dacă transmit date către cineva din afara rețelei lor, atunci numai folosind IPîn interiorul routerului (routerului) și, prin urmare, vizibil celorlalți sub (mai departe, adresa routerului este a lor extern (mai departe, adresa. Astfel, la nod p1 Există interior (mai departe, = 192.168.0.200 Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată extern (mai departe, = 10.50.200.5 , iar ultima adresă va fi, de asemenea, externă tuturor celorlalte noduri din rețeaua sa. O situație similară pentru nod p2. Prin urmare, conexiunea lor este imposibilă dacă le folosiți doar intern (propriul) (mai departe, adrese. Puteți utiliza adrese externe, adică adrese de router, dar deoarece toate nodurile din aceeași rețea privată au aceeași adresă externă, acest lucru este destul de dificil. Această problemă este rezolvată folosind mecanismul IP

Ce se va întâmpla dacă decidem să conectăm nodurile prin adresele lor interne? Datele nu vor părăsi rețeaua. Pentru a spori efectul, vă puteți imagina situația prezentată în ultima figură - ambele noduri au aceleași adrese interne. Dacă le folosesc pentru a comunica, atunci fiecare nod va comunica cu el însuși.

WebRTC face față cu succes unor astfel de probleme folosind protocolul GHEAŢĂ, care, totuși, necesită utilizarea de servere suplimentare ( Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC., Majoritatea materialului pe). Mai multe despre toate acestea mai jos.

Două faze ale WebRTC

Pentru a conecta două noduri printr-un protocol WebRTC(sau doar RTC, dacă doi comunică iPhone‘a) este necesar să se efectueze unele acțiuni prealabile pentru a stabili o conexiune. Aceasta este prima fază - stabilirea unei conexiuni. A doua fază este transmisia de date video.

Merită spus imediat că, deși tehnologie WebRTC folosește multe în munca sa în diverse moduri comunicatii ( TCP Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată UDP) și are comutare flexibilă între ele, această tehnologie nu are un protocol pentru transmiterea datelor de conexiune. Nu este surprinzător, deoarece conectați două noduri adobe flash nu atat de usor. Prin urmare, este necesar să aveți câteva adiţional o metodă de transmitere a datelor care nu are nicio legătură cu WebRTC. Ar putea fi un transfer de socket, un protocol HTTP, ar putea fi chiar un protocol SMTP sau Poșta Rusă. Acest mecanism de transmisie iniţială se numesc date semnal. Nu trebuie transmise prea multe informații. Toate datele sunt transmise sub formă de text și sunt împărțite în două tipuri - SDP Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată Candidat de gheață. Primul tip este folosit pentru a stabili o conexiune logică, iar al doilea pentru o conexiune fizică. Mai multe despre toate acestea mai târziu, dar deocamdată este doar important să ne amintim asta WebRTC ne va oferi câteva informații care vor trebui transmise la un alt nod. Imediat ce vom transmite toate informațiile necesare, nodurile se vor putea conecta și ajutorul nostru nu va mai fi nevoie. Deci mecanismul de semnalizare pe care trebuie să-l implementăm este separat, va fi folosit numai atunci când este conectat, dar nu va fi folosit la transmiterea datelor video.

Deci, să luăm în considerare prima fază - faza de stabilire a conexiunii. Este format din mai multe puncte. Să ne uităm la această fază mai întâi pentru nodul care inițiază conexiunea și apoi pentru cel care așteaptă.

  • Inițiator (apelant - apelant):
    1. Oferiți să începeți transferul de date video (createOffer)
    2. Primindu-l pe al tău SDP SDP)
    3. Primindu-l pe al tău Candidat de gheață Candidat de gheață)
  • Apel în așteptare ( apelat):
    1. Primirea unui flux media local (dvs.) și setarea acestuia pentru transmisie (getUserMediaStream)
    2. Primirea unei oferte pentru a începe transferul de date video și crearea unui răspuns (createAnswer)
    3. Primindu-l pe al tău SDP obiect și transmiterea acestuia printr-un mecanism de semnalizare ( SDP)
    4. Primindu-l pe al tău Candidat de gheață obiecte și transmiterea lor printr-un mecanism de semnalizare ( Candidat de gheață)
    5. Primirea unui flux media de la distanță (străin) și afișarea lui pe ecran (onAddStream)

Singura diferență este în al doilea punct.

În ciuda complexității aparente a pașilor, există de fapt trei dintre ei: trimiterea propriului flux media (articolul 1), setarea parametrilor de conexiune (articolele 2-4), primirea fluxului media altcuiva (articolul 5). Pasul cel mai dificil este cel de-al doilea pas, deoarece constă din două părți: stabilirea fizic Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată logic conexiuni. Primul indică cale, de-a lungul căruia pachetele trebuie să călătorească pentru a ajunge de la un nod de rețea la altul. Al doilea indică parametrii video/audio– ce calitate să folosești, ce codecuri să folosești.

Stadiul mental createOffer sau createRăspuns trebuie conectat la etapele de transmisie SDP Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată Candidat de gheață obiecte.

Entități de bază

Fluxuri media (MediaStream)

Entitatea principală este fluxul media, adică fluxul de date video și audio, imagine și sunet. Există două tipuri de fluxuri media - locale și la distanță. Cel local primește date de la dispozitivele de intrare (cameră, microfon), iar cel la distanță prin rețea. Astfel, fiecare nod are atât un fir local, cât și unul la distanță. ÎN WebRTC există o interfață pentru fire MediaStreamși există și o subinterfață LocalMediaStream special pentru thread-ul local. ÎN JavaScriptîl poți întâlni doar pe primul și dacă îl folosești libjingle, atunci s-ar putea să îl întâlnești pe al doilea.

ÎN WebRTC Există o ierarhie destul de confuză în cadrul firului. Fiecare flux poate consta din mai multe piese media ( MediaTrack), care la rândul său poate consta din mai multe canale media ( MediaChannel). Și pot exista, de asemenea, mai multe fluxuri media în sine.

Să privim totul în ordine. Pentru a face acest lucru, să ținem cont de un exemplu. Să spunem că vrem să transmitem nu doar un videoclip cu noi înșine, ci și un videoclip al mesei noastre, pe care se află o bucată de hârtie pe care urmează să scriem ceva. Vom avea nevoie de două videoclipuri (noi + tabel) și unul audio (noi). Este clar că noi și tabelul ar trebui să fim împărțiți în fire diferite, deoarece aceste date sunt probabil puțin dependente unele de altele. Prin urmare, vom avea două MediaStream‘a – unul pentru noi și unul pentru masă. Primul va conține atât date video, cât și audio, iar al doilea va conține doar video (Figura 4).

Figura 4: Două fluxuri media diferite. Unul pentru noi, unul pentru masa noastră

Este imediat clar că un flux media trebuie să includă cel puțin capacitatea de a conține date diferite tipuri- video și audio. Acest lucru este luat în considerare în tehnologie și, prin urmare, fiecare tip de date este implementat printr-o pistă media MediaTrack. Piesele media au o proprietate specială fel, care determină ce avem în fața noastră – video sau audio (Figura 5)

Figura 5: Fluxurile media constau din piese media

Cum se va întâmpla totul în program? Vom crea două fluxuri media. Apoi vom crea două piese video și o pistă audio. Să obținem acces la camere și microfon. Să spunem fiecărei piese ce dispozitiv să folosească. Să adăugăm o pistă video și audio la primul flux media și o pistă video de la o altă cameră la al doilea flux media.

Dar cum distingem fluxurile media la celălalt capăt al conexiunii? Pentru a face acest lucru, fiecare flux media are proprietatea eticheta– eticheta fluxului, numele acestuia (Figura 6). Piesele media au aceeași proprietate. Deși la prima vedere pare că videoclipul poate fi distins de sunet în alte moduri.

Figura 6: Fluxurile și melodiile media sunt identificate prin etichete

Deci, dacă melodiile media pot fi identificate printr-o etichetă, atunci de ce trebuie să folosim două fluxuri media pentru exemplul nostru, în loc de unul? La urma urmei, puteți transmite un flux media, dar utilizați diferite piese în el. Am ajuns la o proprietate importantă a fluxurilor media - ei sincroniza piese media. Diferitele fluxuri media nu sunt sincronizate între ele, dar în cadrul fiecărui flux media toate piesele sunt redate simultan.

Astfel, dacă vrem ca cuvintele noastre, emoțiile noastre faciale și bucata noastră de hârtie să fie redate simultan, atunci merită să folosiți un flux media. Dacă acest lucru nu este atât de important, atunci este mai profitabil să folosiți diferite fluxuri - imaginea va fi mai netedă.

Dacă o piesă trebuie oprită în timpul transmisiei, puteți folosi proprietatea activat piese media.

În cele din urmă, merită să ne gândim la sunetul stereo. După cum știți, sunetul stereo este două sunete diferite. Și trebuie să fie transferate și separat. Canalele sunt folosite pentru aceasta MediaChannel. O pistă audio media poate avea mai multe canale (de exemplu, 6 dacă aveți nevoie de 5+1 audio). Există și canale în interiorul pieselor media, desigur. sincronizate. Pentru video, de obicei este utilizat un singur canal, dar mai multe pot fi folosite, de exemplu, pentru suprapunerea publicității.

Pentru a rezuma: Folosim un flux media pentru a transmite date video și audio. În cadrul fiecărui flux media, datele sunt sincronizate. Putem folosi mai multe fluxuri media dacă nu avem nevoie de sincronizare. În interiorul fiecărui flux media există două tipuri de piese media - pentru video și pentru audio. De obicei, nu există mai mult de două piese, dar pot fi mai multe dacă trebuie să transmiteți mai multe videoclipuri diferite (ale interlocutorului și a mesei sale). Fiecare piesă poate consta din mai multe canale, care este de obicei folosit doar pentru sunet stereo.

În cea mai simplă situație de chat video, vom avea un flux media local, care va consta din două piese - o pistă video și o pistă audio, fiecare dintre acestea fiind compusă dintr-un canal principal. Piesa video este responsabilă pentru cameră, pista audio este pentru microfon, iar fluxul media este containerul pentru ambele.

Descriptor de sesiune (SDP)

U diferite calculatoareÎntotdeauna vor exista camere diferite, microfoane, plăci video și alte echipamente. Există multe opțiuni pe care le au. Toate acestea trebuie coordonate pentru transferul media de date între două noduri de rețea. WebRTC face acest lucru automat și creează un obiect special - un descriptor de sesiune SDP. Treceți acest obiect către alt nod și datele media pot fi transferate. Numai că nu există încă nicio legătură cu un alt nod.

Pentru aceasta este folosit orice mecanism de semnalizare. SDP poate fi transmis fie prin prize, fie de persoană (spuneți-l unui alt nod prin telefon), fie prin Russian Post. Este foarte simplu - vă vor oferi un gata făcut SDPși trebuie trimis. Și la primire pe cealaltă parte - transfer la departament WebRTC. Descriptorul de sesiune este stocat ca text și poate fi modificat în aplicațiile dvs., dar acest lucru nu este în general necesar. De exemplu, când conectați desktop ↔ telefon, uneori trebuie să forțați selectarea sunetul dorit codec

De obicei, atunci când stabiliți o conexiune, trebuie să specificați un fel de adresă, de exemplu URL. Nu este nevoie de acest lucru aici, deoarece prin mecanismul de semnalizare tu însuți vei trimite datele la destinație. Pentru a indica WebRTC ce vrem să instalăm adobe flash conexiune trebuie să apelați funcția createOffer. După ce a apelat această funcție și i-ai dat un special sună din nou‘a va fi creat SDP obiect şi transferat la acelaşi sună din nou. Tot ceea ce vă este necesar este să transferați acest obiect prin rețea către un alt nod (interlocutor). După aceasta, datele vor ajunge la celălalt capăt prin mecanismul de semnalizare și anume acesta SDP obiect. Acest descriptor de sesiune pentru acest nod este străin și, prin urmare, poartă informatii utile. Primirea acestui obiect este un semnal de pornire a conexiunii. Prin urmare, trebuie să fiți de acord cu acest lucru și să apelați funcția createAnswer. Este un analog complet al createOffer. Înapoi la a ta sună din nou va trece descriptorul de sesiune local și va trebui să fie transmis înapoi prin mecanismul de semnalizare.

Este de remarcat faptul că puteți apela funcția createAnswer numai după ce ați primit-o pe a altcuiva SDP obiect. De ce? Pentru că local SDP obiectul care va fi generat atunci când createAnswer este apelat trebuie să se bazeze pe telecomandă SDP obiect. Numai în acest caz este posibil să vă coordonați setările video cu setările interlocutorului dvs. De asemenea, nu ar trebui să apelați createAnswer și createOffer înainte de a primi fluxul media local - nu vor avea nimic la care să scrie SDP obiect .

Din moment ce în WebRTC se poate edita SDP obiect, apoi după primirea mânerului local acesta trebuie instalat. Acest lucru poate părea puțin ciudat de transmis WebRTC ceea ce ea însăși ne-a dat, dar acesta este protocolul. Când se primește un mâner de la distanță, acesta trebuie de asemenea instalat. Prin urmare, trebuie să instalați doi descriptori pe un nod - al dvs. și al altcuiva (adică, local și la distanță).

După aceasta strângeri de mână nodurile știu unul despre dorințele celuilalt. De exemplu, dacă nodul 1 acceptă codecuri O Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată B, și nodul 2 acceptă codecuri B Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată C, atunci, deoarece fiecare nod își cunoaște descriptorii proprii și ai altora, ambele noduri vor alege codecul B(Figura 7). Logica de conectare este acum stabilită și fluxurile media pot fi transmise, dar există o altă problemă - nodurile sunt încă conectate doar printr-un mecanism de semnalizare.


Figura 7: Negocierea codecului

Candidat de gheață

Tehnologie WebRTCîncercând să ne confunde cu noua lui metodologie. La stabilirea unei conexiuni, adresa nodului la care doriți să vă conectați nu este specificată. Instalat mai întâi logic conexiune, nu fizic, deși întotdeauna s-a făcut invers. Dar acest lucru nu va părea ciudat dacă nu uităm că folosim un mecanism de semnalizare terță parte.

Deci, conexiunea a fost deja stabilită (conexiune logică), dar încă nu există o cale pe care nodurile rețelei să poată transmite date. Nu este chiar atât de simplu, dar să începem simplu. Lăsați nodurile să fie în aceeași rețea privată. După cum știm deja, ei se pot conecta cu ușurință unul cu celălalt în funcție de interiorul lor (mai departe, adrese (sau poate către alte persoane, dacă nu sunt utilizate TCP/IP).

După unii sună din nou'Şi WebRTC ne spune Candidat de gheață obiecte. Ele vin, de asemenea, sub formă de text și, ca și descriptorii de sesiune, pur și simplu trebuie să fie trimise printr-un mecanism de semnalizare. Dacă descriptorul de sesiune conținea informații despre setările noastre la nivel de cameră și microfon, atunci candidații conțin informații despre locația noastră în rețea. Transmite-le la un alt nod și se va putea conecta fizic la noi și, deoarece are deja un descriptor de sesiune, se va putea conecta în mod logic și datele vor „fluge”. Dacă își amintește să ne trimită obiectul său candidat, adică informații despre locul în care se află el însuși în rețea, atunci vom putea să ne conectăm cu el. Să remarcăm aici încă o diferență față de interacțiunea clasică client-server. Comunicarea cu server HTTP are loc conform schemei cerere-răspuns, clientul trimite date către server, care le prelucrează și le trimite prin adresa specificată în pachetul de solicitare. ÎN WebRTC trebuie sa stiu două adreseși conectați-le pe ambele părți.

Diferența față de descriptorii de sesiune este că doar candidații la distanță trebuie să fie instalați. Editarea aici este interzisă și nu poate aduce niciun beneficiu. În unele implementări WebRTC candidații trebuie să fie instalați numai după ce au fost setați descriptori de sesiune.

De ce a existat un singur descriptor de sesiune, dar ar putea fi mulți candidați? Deoarece locația în rețea poate fi determinată nu numai de interiorul acesteia (mai departe, adresa, dar și adresa externă a routerului, și nu neapărat doar una, precum și adresele Majoritatea materialului pe servere. Restul paragrafului va fi dedicat unei discuții detaliate despre candidați și despre modul de conectare a nodurilor din diferite rețele private.

Deci, două noduri sunt în aceeași rețea (Figura 8). Cum să le identificăm? Prin utilizarea (mai departe, adrese. Nu mai mult. Adevărat, puteți folosi în continuare mijloace de transport diferite ( TCP Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată UDP) și diferite porturi. Acestea sunt informațiile conținute în obiectul candidat - (mai departe,, PORT, TRANSPORT si inca una. Să folosim, de exemplu UDP transport si 531 port.

Figura 8: Două noduri sunt în aceeași rețea

Atunci dacă suntem la nod p1, Asta WebRTC ne va transmite un astfel de obiect candidat - . Acesta nu este un format exact, doar o diagramă. Dacă suntem într-un nod p2, atunci candidatul este - . Printr-un mecanism de semnalizare p1 va primi un candidat p2(adică locația nodului p2, anume a lui (mai departe, Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată PORT). După care p1 se poate conecta cu p2 direct. Mai corect, p1 va trimite datele la adresa 10.50.150.3:531 în speranţa că vor ajunge p2. Nu contează dacă adresa aparține nodului p2 sau vreun intermediar. Singurul lucru important este că datele vor fi trimise prin această adresă și pot ajunge p2.

Atâta timp cât nodurile sunt în aceeași rețea, totul este simplu și ușor - fiecare nod are un singur obiect candidat (însemnând întotdeauna propriul său, adică locația sa în rețea). Dar vor fi mult mai mulți candidați când nodurile vor fi introduse diferit retelelor.

Să trecem la un caz mai complex. Un nod va fi situat în spatele routerului (mai precis, în spatele NAT), iar al doilea nod va fi situat în aceeași rețea cu acest router (de exemplu, pe Internet) (Figura 9).

Figura 9: Un nod este în spatele NAT, celălalt nu

Acest caz are o soluție specială la problemă, pe care acum o vom lua în considerare. Router de acasă de obicei conține un tabel IP. Acesta este un mecanism special conceput pentru a permite nodurilor din interiorul rețelei private a routerului să acceseze, de exemplu, site-uri web.

Să presupunem că serverul web este conectat direct la Internet, adică are un public (mai departe,* adresa. Să fie acesta un nod p2. Nod p1(client web) trimite o solicitare la adresa 10.50.200.10 . Mai întâi datele merg la router r1, sau mai bine zis pe a lui interior interfata 192.168.0.1 . După care, routerul își amintește adresa sursă (adresa p1) și îl introduce într-un tabel special IP, apoi schimbă adresa sursă la a ta( p1 r1). Mai departe, în felul meu extern interfață, routerul trimite date direct către serverul web p2. Serverul web prelucrează datele, generează un răspuns și îl trimite înapoi. Se trimite la router r1, deoarece el este cel care se află în adresa de retur (routerul a înlocuit adresa cu propria sa). Routerul primește date și se uită la tabel IPși transmite datele către nod p1. Routerul acţionează ca un intermediar aici.

Ce se întâmplă dacă mai multe noduri din rețeaua internă accesează simultan rețea externă? Cum va înțelege routerul cui să trimită răspunsul înapoi? Această problemă este rezolvată folosind porturi. Când un router înlocuiește adresa gazdă cu propria sa, acesta înlocuiește și portul. Dacă două noduri accesează Internetul, atunci routerul își înlocuiește porturile sursă cu diferit. Apoi, când pachetul de la serverul web revine la router, routerul va înțelege prin port cui este alocat. acest pachet. Exemplu de mai jos.

Să revenim la tehnologie WebRTC, sau mai degrabă, la partea din acesta care folosește GHEAŢĂ protocol (deci Gheaţă candidați). Nod p2 are un singur candidat (locația sa în rețea – 10.50.200.10 ), și nodul p1, care se află în spatele unui router cu NAT, va avea doi candidați - local ( 192.168.0.200 ) și router candidat ( 10.50.200.5 ). Primul nu este util, dar este totuși generat, din moment ce WebRTC nu știe încă nimic despre nodul la distanță - poate fi sau nu în aceeași rețea. Al doilea candidat va veni la îndemână și, după cum știm deja, portul va juca un rol important (de a trece prin IP).

Intrare la tabel IP generate numai atunci când datele părăsesc rețeaua internă. Prin urmare nodul p1 trebuie să transmită mai întâi datele și numai după aceea datele nodului p2 va putea ajunge la nod p1.

În practică ambele noduri va fi în urmă IP. Pentru a crea o înregistrare într-un tabel IP ale fiecărui router, nodurile trebuie să trimită ceva către nodul de la distanță, dar de data aceasta nici primul nu poate ajunge la cel de-al doilea și nici invers. Acest lucru se datorează faptului că nodurile nu își cunosc exteriorul (mai departe, adrese, iar trimiterea datelor către adrese interne este inutilă.

Cu toate acestea, dacă adresele externe sunt cunoscute, conexiunea se va stabili cu ușurință. Dacă primul nod trimite date către routerul celui de-al doilea nod, routerul le va ignora, deoarece tabelul său IP gol deocamdată. Cu toate acestea, în routerul primului nod din tabel IP Am nevoie de o înregistrare. Dacă acum al doilea nod trimite date către routerul primului nod, atunci routerul le va transfera cu succes la primul nod. Acum masa IP al doilea router are nevoie de date.

Problema este că pentru a-ți recunoaște exteriorul (mai departe, adresa, aveți nevoie de un nod situat în rețea partajată. Pentru a rezolva această problemă, se folosesc servere suplimentare care sunt conectate direct la Internet. Cu ajutorul lor, sunt create și înregistrări apreciate în tabel IP.

Servere STUN și TURN

La inițializare WebRTC trebuie să indicați cele disponibile Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată Majoritatea materialului pe servere, pe care le vom numi în continuare GHEAŢĂ servere. Dacă serverele nu sunt specificate, atunci numai nodurile din aceeași rețea (conectate la aceasta fără IP). Este imediat de remarcat faptul că pt 3g-trebuie folosite rețele Majoritatea materialului pe servere.

Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server este pur și simplu un server de pe Internet care returnează o adresă de retur, adică adresa nodului expeditorului. Nodul situat în spatele routerului accesează Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server pe care să îl parcurgeți IP. Pachetul la care a ajuns Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server, conține adresa sursă - adresa routerului, adică adresa externă a nodului nostru. Această adresă Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server și îl trimite înapoi. Astfel, nodul își primește exteriorul (mai departe, adresa și portul prin care este accesibil din rețea. Următorul, WebRTC folosind această adresă se creează un candidat suplimentar (adresa ruterului extern și port). Acum în tabel IP Routerul are o intrare care permite pachetelor trimise către router pe portul necesar să treacă la nodul nostru.

Să ne uităm la acest proces cu un exemplu.

Exemplu (operare server STUN)

Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. vom desemna serverul prin s1. Routerul, ca înainte, prin r1, iar nodul – prin p1. De asemenea, va trebui să urmați tabelul IP– să o notăm ca r1_nat. În plus, acest tabel conține de obicei multe înregistrări de la noduri diferite subrețele - nu vor fi listate.

Deci, la început avem o masă goală r1_nat.

Tabelul 2: Antet pachet

Nod p1 trimite acest pachet către router r1(indiferent cum, acestea pot fi utilizate în diferite subrețele tehnologii diferite). Routerul trebuie să schimbe adresa sursei Src IP, deoarece adresa specificată în pachet nu este în mod evident potrivită pentru o subrețea externă, mai mult, adresele dintr-un astfel de interval sunt rezervate și nici o singură adresă de pe Internet nu are o astfel de adresă; Routerul face o înlocuire în pachet și creează noua intrareîn masa ta r1_nat. Pentru a face acest lucru, el trebuie să vină cu un număr de port. Să ne amintim că, deoarece mai multe noduri dintr-o subrețea pot accesa rețeaua externă, atunci în tabel IP trebuie păstrat Informații suplimentare, astfel încât routerul să poată determina care dintre aceste câteva noduri este destinat pachetului de returnare de la server. Lasă routerul să vină cu un port 888 .

Antetul pachetului modificat:

Tabelul 4: Tabelul NAT a fost actualizat cu o nouă intrare

Aici (mai departe, adresa și portul pentru subrețea sunt exact aceleași cu pachetul original. De fapt, la postback, trebuie să avem o modalitate de a le restaura complet. (mai departe, adresa pentru reteaua externa este adresa routerului, iar portul s-a schimbat in cel inventat de router.

Portul real către care nodul p1 acceptă conexiunea - aceasta, desigur, 35777 , dar serverul trimite date către fictiv port 888 , care va fi schimbat de router cu cel real 35777 .

Deci, routerul a înlocuit adresa sursă și portul în antetul pachetului și a adăugat o intrare în tabel IP. Acum pachetul este trimis prin rețea către server, adică către nod s1. La intrare, s1 are acest pachet:

Src IP Src PORT Dest IP Dest PORT
10.50.200.5 888 12.62.100.200 6000

Tabelul 5: Pachetul primit de serverul STUN

Total Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. serverul stie ca a primit un pachet de la adresa 10.50.200.5:888 . Acum serverul trimite această adresă înapoi. Merită să ne oprim aici și să aruncăm o altă privire la ceea ce tocmai ne-am uitat. Tabelele de mai sus sunt un fragment din antet pachet, deloc din el conţinut. Nu am vorbit despre conținut, deoarece nu este atât de important - este cumva descris în protocol Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC.. Acum vom lua în considerare, pe lângă titlu, și conținutul. Va fi simplu și va conține adresa routerului - 10.50.200.5:888 , desi am luat-o din antet pachet. Acest lucru nu se face des, de obicei protocoalelor nu le pasă de informațiile despre adresele nodurilor, este important doar ca pachetele să fie livrate la destinația dorită. Aici ne uităm la un protocol care stabilește o cale între două noduri.

Deci acum avem un al doilea pachet care merge în direcția opusă:

Tabelul 7: Serverul STUN trimite un pachet cu acest conținut

Apoi, pachetul călătorește prin rețea până ajunge la interfata externa router r1. Routerul înțelege că pachetul nu este destinat acestuia. Cum înțelege el asta? Acest lucru poate fi determinat doar de port. Port 888 nu o folosește în scopuri personale, ci o folosește pentru mecanism IP. Prin urmare, routerul se uită la acest tabel. Uită-te la coloană PORT externși caută un șir care se potrivește Dest PORT din pachetul primit, adică 888 .

IP intern PORT intern IP extern PORT extern
192.168.0.200 35777 10.50.200.5 888

Tabelul 8: Tabelul NAT

Suntem norocoși, o astfel de linie există. Dacă am avea ghinion, pachetul ar fi pur și simplu aruncat. Acum trebuie să înțelegeți ce nod din subrețea ar trebui să trimită acest pachet. Nu trebuie să ne grăbim, să ne amintim din nou importanța porturilor în acest mecanism. În același timp, două noduri de pe subrețea ar putea trimite cereri către rețeaua externă. Apoi, dacă pentru primul nod routerul a venit cu un port 888 , apoi pentru al doilea ar veni cu un port 889 . Să presupunem că s-a întâmplat asta, adică tabelul r1_nat arata asa:

Tabelul 10: Routerul înlocuiește adresa receptorului

Src IP Src PORT Dest IP Dest PORT
12.62.100.200 6000 192.168.0.200 35777

Tabelul 11: Routerul a schimbat adresa receptorului

Pachetul ajunge cu succes la nod p1și uitându-se la conținutul pachetului, nodul învață despre exteriorul acestuia (mai departe, adresa, adică adresa routerului din rețeaua externă. Știe și portul prin care trece routerul IP.

Ce urmează? La ce folosesc toate astea? Beneficiul este o intrare în tabel r1_nat. Dacă acum cineva trimite la router r1 pachet cu port 888 , apoi routerul va redirecționa acest pachet către nod p1. Astfel, a fost creat un mic pasaj îngust către nodul ascuns p1.

Din exemplul de mai sus vă puteți face o idee despre cum funcționează IPși esență Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server. În general, mecanismul GHEAŢĂ Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată STUN/TURN serverele au ca scop tocmai depășirea limitărilor IP.

Între nod și server nu pot exista un singur router, ci mai multe. În acest caz, nodul va primi adresa routerului care este primul care accesează aceeași rețea ca și serverul. Cu alte cuvinte, obținem adresa routerului la care este conectat Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server. Pentru adobe flash comunicarea este exact ceea ce avem nevoie, dacă nu uităm faptul că fiecare router va adăuga rândul de care avem nevoie la tabel IP. Prin urmare, drumul înapoi va fi din nou la fel de lin.

Majoritatea materialului pe serverul este îmbunătățit Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server. De aici ar trebui să se învețe imediat că orice Majoritatea materialului pe serverul poate funcționa și cum Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server. Cu toate acestea, există și avantaje. Dacă adobe flash comunicarea este imposibilă (cum ar fi în 3g rețele), apoi serverul trece în modul repetitor ( releu), adică funcționează ca intermediar. Desigur, despre nimic adobe flash atunci nu se pune problema, ci în afara cadrului mecanismului GHEAŢĂ nodurile cred că comunică direct.

În ce cazuri este necesar Majoritatea materialului pe server? De ce nu este suficient Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. servere? Faptul este că există mai multe soiuri IP. Se înlocuiesc în mod egal (mai departe, adresa și portul, dar unele dintre ele au încorporate protectie suplimentara din „falsificare”. De exemplu, în simetric masă IPÎncă 2 parametri sunt salvați - (mai departe,și portul nodului la distanță. Un pachet din rețeaua externă trece prin IP către rețeaua internă numai dacă adresa sursă și portul se potrivesc cu cele înregistrate în tabel. Prin urmare, focalizarea Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. serverul eșuează - tabel IP stochează adresa și portul Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. server și când routerul primește un pachet de la WebRTC interlocutor, îl renunță pentru că este „falsificat”. El nu a venit din Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. se concentrează pe nivelul aplicației de codificare și nu contribuie la înțelegerea tehnologiei. Să încercăm să mergem mai adânc și să aflăm cum are loc conexiunea, ce sunt descriptorul de sesiune și candidații, pentru ce sunt necesari aceștia

Astfel Majoritatea materialului pe este necesar un server când sunt localizați ambii interlocutori simetric IP(fiecare la el).

Scurt rezumat

Iată câteva declarații despre entități WebRTC care trebuie ținut mereu în minte. Ele sunt descrise în detaliu mai sus. Dacă vreuna dintre afirmații nu vi se pare complet clară, recitiți paragrafele relevante.

  • Flux media
    • Datele video și audio sunt împachetate în fluxuri media
    • Fluxurile media sincronizează melodiile media care alcătuiesc
    • Fluxurile media diferite nu sunt sincronizate între ele
    • Fluxurile media pot fi locale și la distanță, cel local este de obicei conectat la o cameră și un microfon, cei la distanță primesc date din rețea în formă criptată
    • Există două tipuri de piese media - pentru video și pentru audio.
    • Piesele media au capacitatea de a activa/dezactiva
    • Piesele media constau din canale media
    • Piesele media sincronizează canalele media care alcătuiesc
    • Fluxurile media și melodiile media au etichete prin care pot fi distinse
  • Mânerul de sesiune
    • Descriptorul de sesiune este folosit pentru a conecta logic două noduri de rețea
    • Descriptorul de sesiune stochează informații despre modalități disponibile codificarea datelor video și audio
    • WebRTC folosește un mecanism de semnalizare extern - sarcina de a transmite descriptori de sesiune ( sdp) cade pe cerere
    • Mecanismul de conectare logică constă din două etape - propoziții ( oferi) si raspunde ( răspuns)
    • Generarea unui descriptor de sesiune nu este posibilă fără utilizarea unui flux media local în cazul unei propuneri ( oferi) și nu este posibil fără utilizarea unui handle de sesiune la distanță în cazul unui răspuns ( răspuns)
    • Descriptorul rezultat trebuie dat implementării WebRTC, și nu contează dacă acest descriptor este obținut de la distanță sau local din aceeași implementare WebRTC
    • Este posibil să editați ușor descriptorul de sesiune
  • Candidații
    • Candidatul ( Candidat de gheață) este adresa nodului din rețea
    • Adresa nodului poate fi propria dvs. sau poate fi adresa unui router sau Majoritatea materialului pe servere
    • Întotdeauna sunt mulți candidați
    • Candidatul este format din (mai departe, adresa, portul si tipul de transport ( TCP sau UDP)
    • Candidații sunt folosiți pentru a stabili o conexiune fizică între două noduri dintr-o rețea
    • De asemenea, candidații trebuie să fie trimiși printr-un mecanism de semnalizare
    • Candidații trebuie, de asemenea, să fie transferați la implementări WebRTC, dar numai la distanță
    • În unele implementări WebRTC candidații pot fi transmise numai după ce a fost setat descriptorul de sesiune
  • STUN/TURN/ICE/NAT
    • IP– mecanism de asigurare a accesului la rețeaua externă
    • Routerele de acasă suportă o masă specială IP
    • Routerul înlocuiește adresele din pachete - adresa sursă cu propria sa, dacă pachetul merge la o rețea externă, iar adresa receptorului cu adresa gazdă în rețeaua internă, dacă pachetul a venit dintr-o rețea externă
    • Pentru a oferi acces multicanal la rețeaua externă IP folosește porturi
    • GHEAŢĂ– mecanism de bypass IP
    • Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată Majoritatea materialului pe servere – servere de ajutor pentru ocolire IP
    • Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. serverul vă permite să creați înregistrările necesare în tabel IPși returnează, de asemenea, adresa externă a nodului
    • Majoritatea materialului pe serverul generalizează Protocoale WebRTC Acest articol prezintă protocoalele care completează API-ul WebRTC. mecanism și îl face să funcționeze mereu
    • În cele mai rele cazuri Majoritatea materialului pe serverul este folosit ca intermediar ( releu), adică adobe flash se transformă într-o comunicare client-server-client.

WebRTC vă permite să implementați comunicații audio/video în timp real prin intermediul unui browser

În acest subiect vă voi spune cum să implementați o aplicație WebRTC simplă.

1. getUserMedia - obținerea accesului la dispozitive media (microfon/cameră web)

Nimic complicat, cu 10 linii de cod javascript te poți vedea și auzi în browser (demo).

Creați index.html :

Puteți aplica filtre CSS3 elementului video.

Lucrul trist aici este că în această etapă a dezvoltării WebRTC nu pot spune browserului „Am încredere în acest site, îi dau întotdeauna acces la camera și microfonul meu” și trebuie să dau clic pe Permite după fiecare deschidere/reîmprospătare a paginii.

Ei bine, nu ar fi greșit să vă reamintim că, dacă ați dat acces la cameră într-un browser, altul va primi PERMISSION_DENIED atunci când încearcă să obțină acces.

2. Server de semnalizare

Aici întrerup secvența majorității instrucțiunilor de „pornire webrtc”, deoarece în al doilea pas ele demonstrează capacitățile webRTC pe un singur client, ceea ce pentru mine personal doar a adăugat confuzie la explicație.

Serverul de semnalizare este centrul de coordonare al WebRTC, care asigură comunicarea între clienți, inițializarea și închiderea conexiunii și raportarea erorilor.

Serverul de semnalizare în cazul nostru este Node.js + socket.io + node-static, va asculta portul 1234.
În plus, node-static poate servi index.html, ceea ce va face aplicația noastră cât mai simplă posibil.

În folderul aplicației, instalați necesarul:

Npm install socket.io npm install node-static

OpenTok, PubNub și WebRTC

Platformele cloud OpenTok și PubNub pentru dezvoltarea serviciilor de comunicare bazate pe WebRTC

2016-04-08

În zilele noastre, chat-urile video web devin din ce în ce mai populare. Web Video Chat este o aplicație web pentru comunicare interactivă, construită pe baza unui server Web și browsere.

Dintre toate tehnologiile existente pentru construirea de chat-uri video web (Ajax; Java; tehnologii Flash; ASP.Net + Silverlight; HTML5 + JavaScript în Baza WebRTC API etc.) cele mai multe tehnologie promițătoare este un API WebRTC. Chat-urile web construite pe baza tehnologiei WebRTC oferă transmisie de înaltă calitate a textului, voce, video și date (fișiere) fără a instala plugin-uri sau extensii suplimentare în browsere. Elementele principale ale chat-ului video pe WebRTC sunt browserul și serverul de contact.

Un browser care acceptă WebRTC devine o singură interfață pentru toate dispozitivele utilizatorului (PC-uri, smartphone-uri, iPad-uri, telefoane IP, telefoane mobile etc.) care funcționează cu servicii de comunicație. WebRTC cu WebSocket, HTML5, CSS3 și JavaScript permit crearea de servicii de comunicare web de ultimă generație.

Pentru ca peer-to-peer să funcționeze, trebuie să utilizați două browsere care acceptă WebRTC pentru a contacta serverul de semnalizare (de exemplu, un server WebSocket) care rulează pe node.js prin adresa IP. Serverul nu ia parte la transferul de informații între browsere, ci acționează ca un semnal și este conceput pentru a stabili o conexiune între browserele utilizatorilor.

Datorită faptului că nu toți furnizorii de găzduire acceptă WebRTC, puteți utiliza platforme speciale care acceptă WebRTC și oferă API-uri și SDK-uri pentru a implementa aplicații de comunicare bazate pe API-ul WebRTC și pentru a le integra în site-urile web de pe Internet.

API-ul permite aplicațiilor de comunicare să interacționeze cu platforma (serviciul web) care furnizează API-ul, iar SDK-ul permite dezvoltarea de aplicații de comunicare care pot interacționa cu platforma care furnizează SDK-ul.

Astfel de platforme includ: OpenTok de la TokBox, PubNub, VoxImplant, Twilio, SkyWay de la NTT Communications, Kandy.io, SightCall etc. Trebuie remarcat faptul că, pentru a crea un server de contact, puteți implementa Node.js pentru aplicații de comunicare web pe un server virtual VPS închiriat sau puteți utiliza găzduirea platformei cloud (PaaS) care acceptă proiecte bazate pe Node.js, de exemplu, OpenShift/Red Hat, Heroku/ Salesforce, AWS Elastic Beanstalk/Amazon etc.

În plus, pentru a crea o aplicație de comunicare, puteți achiziționa platforma Flashphoner Web Call Server (software de server conceput pentru organizarea de transmisii online de fluxuri audio și video bazate pe browser), care se bazează pe tehnologiile HTML5 Websockets, WebRTC și Flash și să instalați pe serverul web care rulează OS Linux sau închiriat server virtual VPS. În prezent, Flashphoner și-a implementat serverul WebRTC (Web Call Server 5). găzduire în cloud Amazon Web Services.

ÎN această recenzie Să ne uităm la cele mai populare servicii web de comunicare în cloud bazate pe tehnologia WebRTC - OpenTok de la TokBox și PubNub.

OpenTok de la TokBox

OpenTok este o platformă PaaS (Platform as a Service) bazată pe cloud, care este principala platformă de comunicații WebRTC pentru integrarea comunicațiilor video și a mesajelor în site-uri web și aplicații mobile. OpenTok are o infrastructură distribuită care conține centre de date din întreaga lume.

Platformă deschisă OpenTok de la TokBox oferă dezvoltatorilor posibilitatea de a încorpora chat-uri video pe mai multe platforme bazate pe API-ul WebRTC în aplicații web(site-uri web), aplicații Java/Android și iOS.

Arhitectura OpenTok constă din partea client a bibliotecii WebRTC OpenTok (de exemplu, OpenTok.js), care oferă încorporarea comunicațiilor video în partea client a aplicației (pagina web) și un set de instrumente (SDK-uri OpenTok Client) pentru dezvoltarea de aplicații client (JavaScript/aplicații Web, Java OS/Android și iOS).

În plus, o parte integrantă a arhitecturii OpenTok sunt SDK-urile de server (OpenTok Server SDK-uri), care sunt concepute pentru a dezvolta infrastructura de server (pentru management și autentificarea utilizatorilor) a aplicației, care oferă generarea dinamică a ID-urilor de sesiune OpenTok ID unice (sessionId). ) și token-uri (token) pentru fiecare utilizator, precum și lucrul cu arhivele OpenTok. Serverul Web transmite ID-ul de sesiune și tokenul corespunzător, pe care clientul le poate folosi apoi pentru a se conecta la sesiune.

SDK-urile pentru server OpenTok sunt disponibile pentru mainstream limbaje de programare Aplicații pe partea serverului: Java, .NET, Node.js, PHP, Python, Ruby.

Trebuie remarcat faptul că, dacă partea de server a aplicației necesită un alt limbaj de programare care nu este inclus în lista listată, atunci TokBox oferă un API REST OpenTok pentru crearea de sesiuni OpenTok și lucrul cu arhivele OpenTok.


Astfel, pentru a crea aplicații de comunicație pentru nodurile de Internet, ar trebui să utilizați SDK-uri pentru server OpenTok în combinație cu biblioteca client WebRTC OpenTok și SDK-uri pentru client OpenTok.

Pentru a utiliza platforma OpenTok pentru a crea un chat video WebRTC integrat într-o gazdă de internet, trebuie mai întâi să creați un cont pe TokBox.com. Un cont OpenTok gratuit este valabil treizeci de zile. Un utilizator înregistrat are posibilitatea de a obține o cheie API (ApiKey) necesară dezvoltării aplicației de comunicare OpenTok. Cheia API identifică contul de dezvoltator OpenTok.

Folosind Ghidul dezvoltatorului OpenTok (https://tokbox.com/developer/guides/) în contul de dezvoltator TokBox, puteți crea o aplicație de comunicare (pagină web de chat video) utilizând SDK-uri pentru client OpenTok. Pentru a utiliza cadrul OpenTok pentru o aplicație, trebuie să includeți biblioteca OpenTok.js în pagina dvs. web.

https://static.opentok.com/webrtc/ .../opentok.js Identificatorul de sesiune (SESSIONID) și tokenul (tokenul) necesar pentru funcționarea aplicației sunt de obicei create prin programare folosind cu unul dintre SDK-urile serverului (SDK-urile OpenTok Server).

Dar pentru a crea o versiune de testare a unei aplicații fără SDK-uri pentru server OpenTok, puteți, pe baza cheii API (ApiKey), să obțineți manual identificatorul de sesiune și simbolul pentru acest identificator de sesiune folosind bara de instrumente pentru dezvoltatori. Clientul are nevoie de un token care îi oferă acces la sesiune.

Exemple de variabile precum cheia „apiKey”, identificatorul de sesiune „sessionId” și tokenul „token” arată astfel:

var apiKey = "17493650";
var sessionId= "2_MX40NT...tWXR-UH4";
var token= "T1==cGFyd...2RhdGE9";

După crearea unui obiect de sesiune cu un identificator de sesiune (SESSIONID) și un token (token), aplicația inițializează obiectul de sesiune.

var session = OT.initSession(apiKey, sessionId);

Apoi clientul se conectează la sesiune și publică fluxuri audio și video:

session.connect(token, function(eroare) (
editor = OT.initPublisher("editor");
session.publish(editor);
});

După ce un client se conectează la o sesiune, aplicația inițializează un obiect OpenTok Publisher și publică fluxul audio și video pentru acea sesiune, astfel încât alți clienți să-l poată vedea.

session.on((
streamCreated: funcție(eveniment) (
session.subscribe(event.stream, „abonat”);
}});

Astfel, în conformitate cu ghidul dezvoltatorului, poți crea baza unui chat video WebRTC bazat pe platforma OpenTok, pe care îl poți implementa pe site-ul tău.

Figura 2 arată interfața unei capturi de ecran a acestui chat video WebRTC creat în contul de dezvoltator TokBox.

Apoi, trebuie să creați un server de chat video folosind SDK-uri OpenTok Server pentru unul dintre limbajele de programare. SDK-urile OpenTok Server vă permit să creați în mod programatic sesiuni OpenTok, să generați jetoane și să lucrați cu arhivarea OpenTok.

  • Trebuie remarcat faptul că TokBox utilizează două moduri de transmitere a fluxurilor media (Media Streams):
  • retransmis (releu), în acest mod fluxurile media sunt transmise direct între peering-uri (de exemplu, între browserele utilizatorilor într-un chat video unu-la-unu);

direcționat, acest mod utilizează OpenTok Media Router pentru a direcționa fluxurile audio-video între clienți (de exemplu, în chat-ul video cu mai mulți utilizatori sau de grup pentru întâlniri online).

PubNub PubNub este o rețea globală de streaming de date pentru: IoT (Internet of Things), Mobile și Web., tablete, browsere web etc. PubNub oferă peste 70 de SDK-uri pentru limbaje de programare majore pentru a crea aplicații de comunicare multiplatformă și a le încorpora în aplicații web (site-uri web) și aplicații dispozitive mobile(OS Java/Android și IOS).

Lista limbilor și SDK-urilor acceptate de serviciul PubNub este prezentată pe pagina: https://github.com/pubnub/pubnub-api. Trebuie remarcat faptul că, în plus față de interfețele API la anumite platforme software PubNub acceptă, de asemenea, REST API. De exemplu, PubNub WebRTC SDK este proiectat pentru organizarea comunicațiilor web (rețele peer-to-peer) în timp real între browsere folosind o arhitectură peer-to-peer.

Arhitectura interacțiunii dintre componentele unei aplicații de comunicare bazată pe platforma PubNub și tehnologia WebRTC este prezentată în Fig. 3. După cum reiese din diagrama de interacțiune a componentelor de chat video WebRTC (Fig. 3), platforma PubNub este utilizată ca server de semnalizare scalabil (server de coordonare) pentru aplicațiile WebRTC. În plus, platforma PubNub permite acest lucru funcții suplimentare

precum prezența (furnizarea de informații despre utilizatorii disponibili în rețea sau o listă actualizată de utilizatori), stocarea/reluarea (permițând utilizatorilor să vadă istoricul conversațiilor anterioare într-o perioadă de timp) și înregistrare.

Aplicațiile de comunicare WebRTC bazate pe platforma PubNub folosesc două metode de schimb de mesaje (WebSockets și AJAX) între browser și serverul de negociere. PubNub oferă un nou API pentru a conecta aplicațiile WebRTC la platforma PubNub. API-ul WebRTC de la PubNub realizează semnalizare între browserele utilizatorilor pentru a le permite acestora să se conecteze printr-o arhitectură peer-to-peer folosind API-ul WebRTC PeerConnection. După schimbul de mesaje de semnalizare între browsere, se stabilește o conexiune duplex între acestea pentru a schimba fluxuri video și date arbitrare. Comunicarea cu browserul este coordonată de PubNub. Serviciul PubNub oferă nu numai interacțiunea tuturor componentelor necesare pentru stabilirea comunicării peer-to-peer între browsere în scopul schimbului de mesaje în timp real, dar asigură și acestea. retea globala

streaming de date. Pentru a utiliza platforma PubNub pentru a crea un chat video, trebuie mai întâi să vă înregistrați la PubNub pentru a crea un cont gratuit. Un utilizator înregistrat are posibilitatea de a primi chei API Acest ghid descrie cum puteți utiliza o conexiune nod-la-nod și conectată cheie_abonare, necesar pentru dezvoltarea aplicației de comunicare PubNub. Puteți adăuga apoi funcții precum securitate, prezență și stocare în contul dvs.

După ce primiți cheile API, puteți începe să creați o aplicație de comunicare bazată pe platforma PubNub, folosind SDK-uri într-unul dintre principalele limbaje de programare sau folosind aplicații demo (șabloane). Un tutorial pentru crearea unei aplicații de comunicare este prezentat pe pagina: https://www.pubnub.com/docs/tutorials/pubnub-publish-subscribe. Un ghid de referință pentru crearea unui chat video bazat pe SDK-ul PubNub WebRTC este discutat pe pagina https://www.pubnub.com/docs/webrtc-javascript/pubnub-javascript-sdk.

Pentru a crea un chat video WebRTC de la zero conform tutorialului, trebuie să utilizați câteva API-uri simple pentru JavaScript:

  • conectați biblioteca PubNub la pagina HTML, de ex. includeți SDK-ul JavaScript PubNub în codul dvs Pagini HTMLînainte de inițializarea clientului;
  • init() - inițializați API-ul client PubNub;
  • subscribe() - abonați-vă la un anumit canal (apelați metoda subscribe() a API-ului PubNub);
  • publish() - trimite un mesaj către un anumit canal (apelează metoda publish() a API-ului PubNub);
  • unsubscribe() - dezabonează-te la un anumit canal.

Inițializarea API-ului client PubNub poate fi reprezentată după cum urmează:
var PUBNUB = PUBNUB.init((
publish_key: „Cheia dvs. de publicare”,
subscribe_key: „Cheia ta de abonare”
});

Pentru a crea un chat video WebRTC bazat pe PubNub WebRTC, puteți utiliza șablonul open source: https://www.pubnub.com/developers/demos/webrtc/.

Pentru a verifica funcționarea acestui chat video, trebuie să contactați adresa specificată de pe două computere în interfața de chat video care se deschide în browsere, utilizatorilor li se atribuie numere de telefon.



Pentru a comunica, utilizatorii trebuie să introducă numerele de telefon în câmpul de text „Type Recipient’s” și să facă clic pe butonul cu imaginea unui receptor de telefon.

Ca urmare, imaginile de la camerele video sunt transmise browserelor și afișate pe ecranele monitorului. În plus, acest chat video funcționează ca un chat text.



Pentru a discuta, utilizatorii trebuie să introducă text în câmpul „chat aici” și să apasă tasta „Enter”. Figura 4 arată o captură de ecran a unui chat video de la un utilizator cu numărul de telefon 164.

Orez. 4.PubNub cu WebRTC Figura 5 arată o captură de ecran a unui chat video între un utilizator cu numărul de telefon 128. aplicația de comunicare este dezvoltată folosind hipertext marcaj HTML5 și CSS3. Codul părții client a aplicației de comunicare este dezvoltat în JS. Următoarele biblioteci au fost conectate la aplicația de comunicare Web: JQuery, PubNub JavaScript SDK și PubNub WebRTC SDK.