
Videokõne on peamine suhtlemisviis õpetaja ja üliõpilase vahel Vimboxi platvormil. Oleme ammu loobunud Skype’ist, proovinud mitmeid kolmandate osapoolte lahendusi ja lõpuks peatunud WebRTC - Janus-gateway kombinatsioonil. Mõnda aega olid meie jaoks asjad korralikult, kuid siiski ilmnes mõningaid negatiivseid aspekte. Lõpuks loodi eraldi suund video jaoks.
Palusin Kirill Rogovil, uue suuna juhil, rääkida videokõne arengust Skyengis, avastatud probleemidest, lahendustest ja improviseerimistest, mida me lõpuks kasutasime. Loodame, et artikkel on kasulik ka ettevõtetele, kes propageerivad videokõnesid veebirakenduste kaudu.
Enne kui liigume edasi
2017. aasta suvel esines Skyengi arendusjuht Sergei Safonov Backend Conf'is öeldes, kuidas me loobusime Skype’ist ja võtsime kasutusele WebRTC. Soovijad saavad vaadata esitluse salvestust (~45 min), ja siin ma lühidalt selle sisu kokku võtan.
Skyengi jaoks on videokõne alati olnud prioriteetne suhtlemisviis õpetaja ja õpilase vahel. Alguses kasutati "Skype’i", kuid see ei sobinud mitmete põhjuste tõttu, peamiselt logide puudumise ja otsese integreerimise võimatuse tõttu veebirakendusse. Seetõttu tegime mitmeid katsetusi.
Meie videokõne nõudmised olid järgmised:
— stabiilsus;
— madal hind tunni kohta;
— tundide salvestamine;
— jälgimine, kui palju igaüks räägib (meie jaoks on oluline, et õpilased räägiksid tundide jooksul rohkem kui õpetaja);
— lineaarne skaleerimine;
— võimalus kasutada nii UDP-d kui TCP-d.
Esimesena proovisin 2013. aastal Tokboxi. Kõik oli hästi, kuid see oli väga kallis – 113 rubla tunni eest – ja vähendas meie kasumit.
Seejärel integreerisime 2015. aastal Voximplant'i. Siin oli vajalik jälgimisfunktsioon, kes kui palju räägib, ja lahendus oli märgatavalt odavam: ainult heli salvestamise korral tuli 20 rubla tunni eest. Siiski toimis see ainult UDP kaudu ja ei osanud TCP-le üle minna. Sellegipoolest kasutas seda lõpuks umbes 40% õpilastest.
Aasta pärast hakkasid meie klientidel ilmuma spetsiifilised nõuded. Näiteks peab kõik töötama läbi brauseri, ettevõttes on avatud ainult http ja https; teisisõnu, mitte mingit „Skype'i” ja UDP-d. Ettevõtte kliendid = raha, seega pöördusime tagasi Tokboxi poole, kuid hinna probleem jäi endiselt aktuaalseks.
Lahendus — WebRTC ja Janus
Otsustasime kasutada . See hoolitseb ühenduse loomise, voogude kodeerimise ja dekodeerimise, radade sünkroonimise ning kvaliteedikontrolli eest, käsitledes võrgu tõrkeid. Meie poolelt peame tagama voogude lugemise kaamerast ja mikrofonist, video joonistamise, ühenduse haldamise, WebRTC-ühenduse loomise ja voogude edastamise sellele, samuti kliendivahelise signaalide edastamise ühenduse loomiseks (isegi WebRTC kirjeldab ainult andmete formaati, mitte nende edastamise mehhanismi). Kui kliendid asuvad NAT-i taga, siis WebRTC ühendab STUN-servereid, kui see ei aita, siis TURN-servereid.
Tavaline p2p-ühendus ei piisa, sest soovime tunnipidusid salvestada edasiseks analüüsiks kaebuste korral. Seetõttu edastame WebRTC vood retransleeri kaudu . Tulemuseks on, et kliendid ei tea üksteise aadresse, nähes ainult Janus serveri aadressi; see täidab ka signaaliserveri funktsioone. Janusel on palju vajalikke funktsioone: see üleminek TCP-le, kui kliendil on UDP blokeeritud; oskab salvestada nii UDP- kui TCP-vooge; on skaleeritav; on isegi sisseehitatud plugin kõne testimiseks. Vajadusel ühendatakse automaatselt Twilio STUN ja TURN serverid.
Suvel 2017 töötas meil kaks Janus serverit pluss täiendav server salvestatud toorfailide töötlemiseks audio ja video jaoks, et mitte koormata põhiserverite protsessoreid. Ühendamisel valiti Janus serverid paarituks-umbes põhimõttel (ühenduse number). Sel hetkel piisas sellest, meie arvates andis see umbes neljakordse varu, rakenduse protsent oli umbes 80. Samuti vähenes hind ~2 rubla tunni kohta, pluss arendamine ja toetus.

Tagasi videokõnede teema juurde
Me pide constantemente nipasẹ feedback nga ayler ve gnž aoğlum nabalar taraftan, kiwi görebilim ve ilaçları murmara almak içun. 2018 yazında en çok şikâyet edilen konu kesinlikle iletişim kalitesi oldu. Bir taraftan bu, diğer eksiklikler ile iyi bir şekilde başa çıktığımız anlamına geliyordu. Diğer taraftan, bir şeyler yapmamız gerekirdi: derinin kesilmesi durumunda, onun değerini kaybetme riskimiz var, bazen sonraki paket satın alımının değerini yanı sıra, ilk derin kesildiğinde - potansiyel bir müşteri kaybetme ihtimali var.
O sırada videolu bağlantı hala MVP modundaydı. Basitçe söylemek gerekirse, başlattık, çalıştı, bir kez ölçeklendirdik, bunu nasıl yapacağımızı anladık - böyle devam ediyor. If it works, don’t fix it. Kimse iletişim kalitesine özel olarak odaklanmamıştı. Ağustos’ta bu şekilde devam edemeyeceğimiz açık hale geldi ve WebRTC ve Janus ile ilgili sorunları çözmek için ayrı bir yön başlattık.
Bu yeni yön, girişinde şunları elde etti: MVP çözümü, metrik yok, hedef yok, iyileştirme süreçleri yok, buna rağmen öğretmenlerin %7'si iletişim kalitesinden şikayet ediyordu (öğrencilerle ilgili veriler de yoktu).

Yeni yön çalışmalarına başlıyor.
Ekip yaklaşık şöyle görünüyor:
- Yöneticisi yönü, aynı zamanda baş geliştirici.
- QA, değişikliklerin test edilmesine yardımcı olur, iletişim için kararsız koşullar yaratmanın yeni yollarını arar, cephe hattındaki sorunları bildirir.
- Analist, teknik verilere farklı korelasyonlar arar, kullanıcı geri bildirim analizini geliştirir, deneylerin sonuçlarını kontrol eder.
- Ürün yöneticisi genel yön ve deneyler için kaynak tahsisinde yardımcı olur.
- Programlama ve benzer görevlerde sık sık ikinci geliştirici yardımcı olur.
Başlangıç olarak, iletişim kalitesinin değerlendirmesini izleyen nispeten güvenilir bir metrik ayarladık (günlere, haftalara, aylara göre ortalama). O zaman bu öğretmenlerden gelen değerlendirmelerdi, daha sonra onlara öğrencilerden gelen değerlendirmeler eklendi. Sonrasında neyin yanlış çalıştığını belirlemek için hipotezler geliştirmeye başladık, düzeltmeler yaptık ve dinamikteki değişikliklere baktık. Düşük-hanging meyvelerle başladık: örneğin, vp8 codec'ini vp9 ile değiştirdik ve ölçütlerde iyileşme oldu. Janus ayarlarıyla oynamayı denedik, diğer deneyler yürüttük - çoğu durumda hiçbir şeye yol açmadı.
Teisel etapil tekkis hüpotees: WebRTC on peer-to-peer lahendus, kuid meie kasutame serverit keskel. Võib-olla on probleem siin? Alustasime uurimistööd ja leidsime siit praegu kõige olulisema parenduse.
Sel hetkel valiti server puust üsna primitiivse algoritmiga: igal serveril oli oma „kaal“, mis sõltus kanalist ja võimsusest, ja me püüdsime suunata kasutaja sellele, kus „kaal“ oli suurem, mitte pidades silmas, kus geograafiliselt asub kasutaja. Tulemuseks oli, et õpetaja Peterburgist suutis suhelda õpilasega Siberist läbi Moskva, mitte meie Janus-serveri kaudu SPb-s.
Algoritmi muudeti: nüüd, kui kasutaja avab meie platvormi, kogume Ajaxiga signaale tema ja kõikide serverite vahel. Ühenduse loomisel valime välja paar signaali (õpetaja-server ja õpilane-server), mille summa on kõige väiksem. Mida madalam signaal, seda lühem on kaugus serverini; lühem kaugus - madalam tõenäosus pakettide kaotamiseks; pakettide kaotus on videokõnes kõige suurem negatiivne tegur. Negatiivne osakaal on kolme kuu jooksul kahe korra vähenenud (aususe huvides toimusid sel ajal ka muud eksperimendid, kuid see mõjutas peaaegu kindlasti kõige rohkem).


Hiljuti avastasime veel ühe mitte-euroopalik, kuid tundub, et oluline asjaolu: ühe võimsa Janus-serveri asemel paksul kanalil on parem valida kaks lihtsamat, mille ribalaius on väiksem. See selgus pärast seda, kui ostsime just võimsad masinad lootuses mahutada sinna võimalikult palju ruume (sidesessioone) korraga. Serveritel on ribalaiuse piirang, mille saame täpselt tõlkida ruumide arvu — me teame, kui palju võib avada näiteks 300 Mbit/s. Niisiis, kui serveris on avatud liiga palju ruume, lõpetame selle valimise uute sessioonide jaoks, kuni koormus väheneb. Idee oli selles, et ostes võimsa masina, laeme kanali selle maksimaalselt, et lõpuks piiraksime protsessorit ja mälu, mitte ribalaiust. Kuid selgus, et pärast teatud arvu avatud ruume (420), vaatamata sellele, et protsessori, mälu ja ketta koormus on veel liiga kaugel piiridest, hakkavad tehnilise toe poole tulema negatiivsed tagasisided. Tundub, et midagi halveneb Januse sees, võib-olla on seal samuti mingid piirangud. Alustasime katsetamist, vähendasime ribalaiuse piiri 300 Mbit/s-lt 200 Mbit/s-le, probleemid kadusid. Nüüd ostsime kohe kolm uut serverit madalate piirangute ja omadustega, arvame, et see toob kaasa stabiilse kvaliteedi parandamise. Me ei hakanud aru saama, mis probleeme seal oli, ajutised lahendused on meie kõik. Kaitsme ennast, et sel hetkel pidi olema võimalikult kiiresti lahendatud aktuaalne probleem, mitte tegema seda ilusti; pealegi on Janus meie jaoks must kast, kirjutatud C-s, sellega nokitsemine on väga kallis.

Ja protsessi käigus me:
- uuendasime kõiki sõltuvusi, mida oli võimalik uuendada, nii serveris kui ka kliendis (need olid samuti eksperimendid, jälgisime tulemusi);
- parandasime kõik tuvastatud vead, mis puudutasid konkreetseid juhtumeid, näiteks kui side langes ja ei taastunud automaatselt;
- viisime läbi hulgaliselt kohtumisi ettevõtetega, kes töötavad videokõnede valdkonnas ja on tuttavad meie probleemidega: mängude voogedastajad, veebiseminaride korraldajad; proovisime kõike, mis meile kasulik tundus;
- korraldasime tehnilise ülevaate riistvarast ja side kvaliteedist õpetajate seas, kellest tuli kõige rohkem kaebusi.
Tehtud katsed ja neist tulenevad muudatused on võimaldanud vähendada õppejõudude rahulolematust ühenduse osas 7,1% jaanuaris 2018 2,5% jaanuaris 2019.
Mis edasi
Meie Vimbox'i platvormi stabiliseerimine on üks peamisi ettevõtte projekte 2019. aastaks. Meil on suured lootused, et suudame säilitada dünaamika ning mitte enam näha videokõnesid kaebuste tipus. Me mõistame, et märkimisväärne osa nendest kaebustest on seotud kasutajate arvutite ja interneti lagunemisega, kuid peame kindlaks tegema selle osa ja lahendama kõik muu. Kõik muu on tehniline probleem ja näib, et me peaksime olema võimelised sellega tegelema.
Peamine raskus seisneb selles, et me ei tea, kui kaugele on reaalselt võimalik kvaliteeti tõsta. Selle piiri väljaselgitamine on peamine ülesanne. Seetõttu on planeeritud kaks eksperimenti:
- võrrelda videot Januse kaudu tavalise p2p-ga lahingutingimustes. See katse on juba läbi viidud, kuid meie lahenduse ja p2p vahel ei ole leitud statistiliselt olulist erinevust;
- paigutame (kallid) teenused ettevõtetelt, mis teenivad raha vaid videokõneside lahendustega, ja võrdleme nende negatiivset tagasisidet olemasolevaga.
Need kaks eksperimenti võimaldavad meil määratleda saavutatava eesmärgi ja keskenduda sellele.
Lisaks on mitmeid ülesandeid, mida lahendatakse töö käigus:
- loome tehnilise kvaliteedimetri ühenduse asemel subjektiivsete tagasisidetega;
- teeme podroobse sessioonide logimise, et täpsemalt analüüsida esinevaid tõrkeid, mõista, millal ja kus need juhtusid, ning milliseid esmapilgul mitte seotud sündmusi sel hetkel toimus;
- valmistame ette automaatse kvaliteeditesti enne tundi ning anname kliendile võimaluse käsitsi ühendust testida, et vähendada rahulolematust, mis tuleneb tema riistvarast ja kanalist;
- arendame ja viime läbi rohkem koormusteste videokõnede jaoks halbadest tingimustest, muutuvate pakettide kaotustega jne;
- muudame serverite käitumist probleemide korral, et suurendada häiretuksuust;
- hoiame kasutajat kursis, kui tal on ühendusega mingeid probleeme, nagu seda teeb ka "Skype", et ta mõistaks, et probleem on tema pool.
Aprill muutub videokonverents suund Skyengis täisväärtuslikuks eraldi projektiks, mis tegeleb oma tootega, mitte lihtsalt osana Vimboxist. See tähendab, et hakkame otsima inimesi . Nagu alati, .
. Loomulikult jätkame aktiivselt suhtlemist inimestega ja ettevõtetega, kes tegelevad videokonverentsiga. Kui soovite meiega kogemusi vahetada — oleme rõõmsad! Kommenteerige, võtke ühendust — vastame kõigile.
Allikas: habr.com
