Analize pentru dezvoltatori

WebRTC, SFU și codecuri vocale explicate

Cum transportă WebRTC sunetul, cum comprimă Opus vocea și când are nevoie video de grup de un SFU. Ghid pentru dezvoltatori cu arhitectura Voxal și referințe RFC.

  • De Voxal
  • Actualizat la
  • 9 min de citit
Un streamer cu căști vorbește la un microfon, în timp ce o hartă luminoasă a lumii arată participanți aflați la distanță, conectați între continente.

WebRTC transportă audio și video între browsere, un codec precum Opus comprimă vocea pentru ca aceasta să încapă în rețea, iar un Selective Forwarding Unit (SFU) este un server care retransmite video-ul fiecărui participant către toți ceilalți în apelurile mai mari. Aceste trei piese explică cea mai mare parte din ce se întâmplă între un microfon și un difuzor aflat la distanță.

Acest ghid se adresează dezvoltatorilor și cititorilor curioși care vor să înțeleagă mecanismele: semnalizarea, ICE, STUN și TURN, RTP, Opus și compromisul dintre o rețea mesh peer-to-peer și un SFU. Se încheie cu modul în care Voxal le combină: vocea rămâne peer-to-peer, iar camera și partajarea ecranului pot folosi un SFU. Dacă vrei doar conceptul, începe cu ce este chatul vocal peer-to-peer.

1. Ce este WebRTC?

WebRTC este un set de standarde și API-uri de browser pentru comunicarea audio, video și de date în timp real.

Permite aplicațiilor să stabilească conexiuni media între dispozitive compatibile, fără ca dezvoltatorii să fie nevoiți să implementeze de la zero fiecare mecanism de transport și securitate.

WebRTC nu este un singur protocol. Mai multe componente lucrează împreună.

Semnalizarea

Înainte ca două dispozitive să poată stabili o conexiune media, ele trebuie să schimbe informații despre sesiune și despre capacitățile lor de conectare.

Acest proces se numește semnalizare. Aplicațiile își aleg propriul mecanism de semnalizare; WebRTC nu impune un server sau un protocol de semnalizare universal.

Voxal folosește semnalizarea pentru a coordona componența camerelor și stabilirea conexiunilor. Calea semnalizării este separată de calea media.

ICE, STUN și TURN

Dispozitivele se află adesea în spatele unor routere, firewall-uri sau al traducerii adreselor de rețea (NAT). Găsirea unei căi de conectare viabile poate fi, așadar, mai complicată decât conectarea a două adrese IP publice.

WebRTC folosește Interactive Connectivity Establishment (ICE) pentru a aduna și a testa posibilele căi de conectare.

  • STUN ajută un dispozitiv să afle cum apare din rețeaua publică.
  • TURN oferă o cale de retransmisie atunci când nu se poate stabili o conexiune directă potrivită.

Un releu TURN retransmite trafic media criptat. Nu este același lucru cu un SFU, care încheie conexiunile media și retransmite selectiv fluxurile.

O conexiune directă este adesea de dorit, dar un releu poate fi esențial pentru conectivitate.

RTP și transportul media securizat

Mediile în timp real sunt transportate de obicei prin Real-time Transport Protocol (RTP), împreună cu RTCP pentru control și raportare.

WebRTC folosește RTP securizat (SRTP) pentru protecția media. Stratul de transport ajută la livrarea pachetelor, iar codecul stabilește cum este reprezentat sunetul sau video-ul în sine.

Sunt responsabilități distincte: un codec nu stabilește o conexiune de rețea, iar o conexiune de rețea nu stabilește cum este comprimat sunetul.

2. Ce este un codec vocal?

Un codec codifică și decodifică media. Pentru comunicarea vocală, rolul lui este să reprezinte vorbirea eficient, păstrând inteligibilitatea și o calitate audio acceptabilă.

Fără compresie, transmiterea audio brut poate consuma mult mai multă lățime de bandă decât are nevoie o aplicație vocală.

Un codec face un compromis între mai mulți factori:

  • Calitatea audio și inteligibilitatea vorbirii.
  • Rata de biți și consumul de lățime de bandă.
  • Complexitatea codificării și a decodificării.
  • Întârzierea și durata cadrelor.
  • Comportamentul în condiții de rețea variabile.

Nu există un singur cel mai bun codec pentru fiecare aplicație. Streamingul de muzică, apelurile telefonice, chatul din jocuri și conversațiile de grup în timp real au priorități diferite.

Diagramă cu un microfon care trimite o formă de undă vocală brută printr-un cip de codec Opus într-un flux cu rată de biți mică, cu indicatoare pentru calitate, rata de biți și latență.
Codecul Opus comprimă vocea brută într-un flux cu rată de biți mică, echilibrând calitatea audio, consumul de lățime de bandă și întârzierea.

De ce este Opus atât de răspândit

Opus este un codec audio interactiv conceput pentru aplicații precum voce peste IP, videoconferințe și chat în joc.

Acceptă o gamă largă de rate de biți, frecvențe de eșantionare și durate de cadru. Această flexibilitate îl face potrivit atât pentru vorbire, cât și pentru aplicații audio mai exigente.

Opus este, de asemenea, un codec audio a cărui implementare este obligatorie pentru punctele terminale WebRTC, conform cerințelor WebRTC privind codecurile audio.

Asta nu înseamnă că orice conexiune WebRTC folosește întotdeauna Opus. Alegerea efectivă a codecului depinde de capacitățile negociate de punctele terminale participante.

În Voxal, fluxul audio WebRTC al browserului folosește Opus în mod implicit, în arhitectura documentată. Browserul se ocupă de o mare parte din munca de codificare, transport și decodificare.

Pentru o aplicație vocală în timp real, codecul este doar o parte a experienței. Contează și calitatea microfonului, procesarea audio, pierderea de pachete, latența rețelei, bufferul de jitter și redarea pe dispozitiv.

3. Ce este un SFU?

SFU înseamnă Selective Forwarding Unit.

Un SFU este un server media folosit frecvent pentru apelurile video de grup. În loc să ceară fiecărui participant să trimită un flux video separat direct către fiecare alt participant, fiecare participant poate trimite media către SFU, care retransmite fluxurile potrivite celorlalți participanți.

Imaginează-ți o cameră cu șase persoane, fiecare trimițând un flux de cameră.

Într-un mesh peer-to-peer complet, fiecare participant ar putea fi nevoit să încarce video-ul propriu către alți cinci participanți. Într-o topologie cu retransmitere prin server, fiecare participant poate trimite un singur flux către SFU, care se ocupă de distribuție.

Acest lucru poate reduce semnificativ numărul de fluxuri video separate pe care trebuie să le susțină un participant.

Ce face de fapt un SFU?

Un SFU primește de obicei fluxuri media codificate și le retransmite selectiv. În funcție de implementare și de funcțiile negociate, poate alege ce fluxuri sau ce straturi de calitate să trimită fiecărui receptor.

De exemplu, un participant care vede o miniatură mică nu are nevoie de aceeași calitate video ca cineva care afișează un vorbitor pe tot ecranul.

Un SFU poate ajuta la gestionarea acestor cerințe diferite, fără ca fiecare emițător să trebuiască să transmită independent un flux separat fiecărui destinatar.

Totuși, un SFU nu este gratuit. Aduce infrastructură, lățime de bandă de server, costuri operaționale și încă o componentă pe calea media.

Un SFU are, de asemenea, un model de confidențialitate diferit de cel al unui releu TURN. Deoarece un SFU încheie transportul media și retransmite selectiv media, poate accesa tehnic media pe care o primește. Criptarea dintre un participant și un SFU nu oferă, în sine, confidențialitate end-to-end față de acel SFU.

4. Mesh peer-to-peer vs. SFU

Cele două arhitecturi rezolvă probleme înrudite, dar diferite.

Diagramă care compară un mesh complet, în care fiecare participant se conectează la fiecare alt participant, cu retransmiterea prin SFU, în care fiecare participant trimite un flux către un server central.
Într-un mesh complet, fiecare participant menține o conexiune cu fiecare alt participant. Cu un SFU, fiecare participant trimite un flux către server, care îl retransmite tuturor celorlalți.

Mesh peer-to-peer

Fiecare participant stabilește conexiuni media cu ceilalți participanți.

Avantaje:

  • Sunt posibile căi media directe.
  • Nu este nevoie de un server media central pentru redistribuirea media.
  • Camerele mici pot funcționa fără un serviciu de retransmitere a media.

Compromisuri:

  • Fiecare emițător poate fi nevoit să încarce un flux separat către fiecare alt participant.
  • Numărul de conexiuni media crește odată cu dimensiunea camerei.
  • Lățimea de bandă de upload și gestionarea conexiunilor pot deveni factori limitativi.

Distribuția bazată pe SFU

Fiecare participant trimite media către un serviciu central de retransmitere, care o distribuie celorlalți participanți.

Avantaje:

  • Distribuție mai eficientă în multe scenarii de video de grup.
  • Mai puțină nevoie ca fiecare emițător să încarce copii separate către fiecare destinatar.
  • Mai mult control asupra fluxurilor video și a straturilor de calitate pe care le primesc receptorii.

Compromisuri:

  • Infrastructură de server suplimentară și costuri de lățime de bandă.
  • Un intermediar intră pe calea media.
  • Modelul de confidențialitate și de încredere diferă de comunicarea peer-to-peer directă.

Esențial este să nu presupunem că aceeași topologie trebuie folosită pentru fiecare tip de media. Audio și video au tipare de trafic și cerințe diferite.

5. De ce păstrează Voxal vocea peer-to-peer, dar poate folosi un SFU pentru video

Voxal separă audio-ul vocal de video-ul camerei și al partajării ecranului.

Audio-ul vocal rămâne întotdeauna peer-to-peer. Nu este niciodată dirijat prin SFU-ul video opțional.

Aceasta este o decizie arhitecturală deliberată: vocea este funcția de comunicare de bază, iar Voxal nu folosește SFU-ul ca serviciu central de distribuție audio.

Video-ul camerei și al partajării ecranului sunt diferite. În camerele mai mari, un mesh peer-to-peer complet poate cere fiecărui participant să încarce mai multe fluxuri video. Asta devine tot mai solicitant pe măsură ce crește numărul de participanți.

De aceea, Voxal poate folosi SFU-ul Realtime de la Cloudflare pentru video și partajarea ecranului, atunci când preferința de rutare configurată permite acest lucru, iar camera depășește limitele practice ale mesh-ului.

Preferința de rutare contează:

  • Allow relay for large rooms: Voxal poate folosi SFU-ul atunci când camera depășește o topologie video peer-to-peer confortabilă.
  • Prefer direct: Voxal încearcă mai întâi peer-to-peer și întreabă înainte de a permite un releu atunci când mesh-ul devine nepotrivit.
  • Direct only: video-ul și partajarea ecranului nu folosesc niciodată SFU-ul, chiar dacă o cameră mare are dificultăți în a stabili toate conexiunile directe.

Aceste setări afectează video-ul și partajarea ecranului, nu audio-ul vocal.

Diagramă care arată audio-ul vocal circulând direct între doi participanți, în timp ce video-ul camerei este retransmis printr-un SFU video.
Voxal separă cele două tipuri de media: audio-ul vocal circulă întotdeauna direct între parteneri, în timp ce video-ul camerei și al partajării ecranului poate fi retransmis printr-un SFU în camerele mai mari.

De ce să nu dirijăm totul prin același server?

Pentru că cea mai bună topologie depinde de traficul transportat.

Un flux vocal este în general mult mai mic decât un flux de cameră. Trimiterea vocii printr-un serviciu central de retransmitere ar introduce un alt compromis de infrastructură și confidențialitate, fără a fi necesară pentru arhitectura vocală aleasă de Voxal.

Video-ul are un profil de lățime de bandă mai exigent și poate beneficia substanțial de distribuția asistată de server pe măsură ce grupul crește.

Separarea celor două permite Voxal să își păstreze modelul vocal peer-to-peer, oferind în același timp o opțiune mai scalabilă pentru video de grup.

6. Ce înseamnă asta pentru confidențialitate

Termenii de rețelistică sunt uneori folosiți ca și cum ar garanta automat un anumit nivel de confidențialitate. Nu o fac.

Audio peer-to-peer înseamnă că media vocală nu trece printr-un server media central, dar serverele de semnalizare pot totuși coordona conexiunile și procesa metadatele asociate.

Un releu TURN retransmite media criptată fără a o decodifica. Un SFU, în schimb, încheie transportul media pentru a retransmite selectiv fluxurile și poate accesa tehnic video-ul pe care îl primește.

De aceea contează distincția făcută de Voxal:

  • Vocea rămâne peer-to-peer, folosind opțional un releu TURN criptat.
  • Video-ul camerei și al partajării ecranului poate folosi un SFU în camerele mai mari, în funcție de preferința de rutare.
  • Procesarea locală a fundalurilor virtuale are loc pe dispozitivul emițătorului, dar asta singură nu înseamnă că fiecare conexiune video este directă.

Înțelegerea căii reale a media este mai utilă decât a descrie pur și simplu o aplicație ca fiind fără server.

7. Punem totul cap la cap

O aplicație de comunicare în timp real combină mai multe straturi independente:

  1. Semnalizarea coordonează participanții și stabilirea conexiunii.
  2. ICE, STUN și TURN ajută la stabilirea unei căi de rețea viabile.
  3. WebRTC și transportul RTP securizat transportă media în timp real.
  4. Un codec precum Opus reprezintă audio-ul eficient.
  5. Topologia rețelei stabilește dacă media circulă direct între parteneri sau printr-un serviciu de retransmitere.

Designul Voxal aplică aceste alegeri separat pentru voce și video. Rezultatul este o arhitectură centrată pe voce, în care audio-ul rămâne peer-to-peer, iar video-ul și partajarea ecranului pot folosi retransmitere opțională asistată de server atunci când camerele mai mari au nevoie de ea.

Aceste distincții contează la proiectarea oricărui sistem de comunicare în timp real. Scopul nu este pur și simplu să minimizăm serverele sau să maximizăm conexiunile directe, ci să facem compromisuri deliberate între latență, lățime de bandă, fiabilitate, scalabilitate și confidențialitate.

Încearcă Voxal

Voxal combină chatul vocal peer-to-peer, push-to-talk (apasă pentru a vorbi), modul hands-free, suprimarea zgomotului și video și partajare de ecran opționale.

Încearcă Voxal în browser sau explorează implementarea în depozitul open-source Voxal.

Lecturi conexe: Ce este chatul vocal peer-to-peer? · Ce este push-to-talk? Un ghid practic · Documentația Voxal despre rutarea video

Lecturi suplimentare

Înapoi la blog