Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Η επικοινωνία μέσω βίντεο είναι ο κύριος τρόπος επικοινωνίας μεταξύ δασκάλου και μαθητή στην πλατφόρμα Vimbox. Εγκαταλείψαμε το Skype εδώ και πολύ καιρό, δοκιμάσαμε αρκετές λύσεις τρίτων και τελικά καταλήξαμε στον συνδυασμό WebRTC - Janus-gateway. Για κάποιο διάστημα ήμασταν ευχαριστημένοι με τα πάντα, αλλά και πάλι κάποιες αρνητικές πτυχές συνέχισαν να εμφανίζονται. Ως αποτέλεσμα, δημιουργήθηκε μια ξεχωριστή κατεύθυνση βίντεο.

Ζήτησα από τον Kirill Rogovoy, τον επικεφαλής της νέας κατεύθυνσης, να μιλήσει για την εξέλιξη της βιντεοεπικοινωνίας στο Skyeng, τα προβλήματα που ανακαλύφθηκαν, τις λύσεις και τα δεκανίκια που χρησιμοποιήσαμε τελικά. Ελπίζουμε ότι το άρθρο θα είναι χρήσιμο για εταιρείες που δημιουργούν βίντεο μόνες τους μέσω μιας διαδικτυακής εφαρμογής.

Μια μικρή ιστορία

Το καλοκαίρι του 2017, ο επικεφαλής της ανάπτυξης Skyeng, Sergey Safonov, μίλησε στο Backend Conf με μια ιστορία για το πώς «εγκαταλείψαμε το Skype και εφαρμόσαμε το WebRTC». Οι ενδιαφερόμενοι μπορούν να παρακολουθήσουν την ηχογράφηση της ομιλίας στο σύνδεσμος (~45 λεπτά), και εδώ θα περιγράψω εν συντομία την ουσία του.

Για το Skyeng School, η βιντεοεπικοινωνία ήταν πάντα ένας τρόπος επικοινωνίας δασκάλου-μαθητή με προτεραιότητα. Στην αρχή χρησιμοποιήθηκε το Skype, αλλά κατηγορηματικά δεν ήταν ικανοποιητικό για διάφορους λόγους, κυρίως λόγω της έλλειψης αρχείων καταγραφής και της αδυναμίας ενσωμάτωσης απευθείας στην εφαρμογή web. Ως εκ τούτου, πραγματοποιήσαμε κάθε είδους πειράματα.

Στην πραγματικότητα, οι απαιτήσεις μας για επικοινωνία μέσω βίντεο ήταν περίπου οι εξής:
— σταθερότητα·
— χαμηλή τιμή ανά μάθημα.
— ηχογράφηση μαθημάτων·
— παρακολούθηση ποιος μιλάει πόσο (είναι σημαντικό για εμάς οι μαθητές να μιλούν περισσότερο από τον δάσκαλο κατά τη διάρκεια των μαθημάτων).
— γραμμική κλιμάκωση.
- δυνατότητα χρήσης τόσο UDP όσο και TCP.

Ο πρώτος που προσπάθησε ήταν να εφαρμόσει το Tokbox το 2013. Όλα ήταν καλά, αλλά αποδείχτηκε πολύ ακριβό - 113 ρούβλια ανά μάθημα - και έφαγε το κέρδος.

Στη συνέχεια, το 2015, η Voximplant ενσωματώθηκε. Εδώ ήταν η λειτουργία που χρειαζόμασταν για να παρακολουθούμε ποιος μιλούσε πόσο, και ταυτόχρονα η λύση ήταν πολύ φθηνότερη: αν ηχογραφήθηκε μόνο ήχος, κόστιζε 20 ρούβλια ανά μάθημα. Ωστόσο, λειτουργούσε μόνο μέσω UDP και δεν μπορούσε να μεταβεί σε TCP. Ωστόσο, περίπου το 40% των μαθητών κατέληξαν να το χρησιμοποιούν.

Ένα χρόνο αργότερα, αρχίσαμε να έχουμε εταιρικούς πελάτες με τις δικές τους συγκεκριμένες απαιτήσεις. Για παράδειγμα, όλα θα πρέπει να λειτουργούν μέσω ενός προγράμματος περιήγησης· η εταιρεία ανοίγει μόνο http και https. δηλαδή χωρίς Skype ή UDP. Εταιρικοί πελάτες = χρήματα, έτσι επέστρεψαν στο Tokbox, αλλά το πρόβλημα της τιμής δεν εξαφανίστηκε.

Λύση - WebRTC και Janus

Αποφάσισε να χρησιμοποιήσει πλατφόρμα προγράμματος περιήγησης για επικοινωνία βίντεο peer-to-peer WebRTC. Είναι υπεύθυνος για τη δημιουργία σύνδεσης, την κωδικοποίηση και την αποκωδικοποίηση ροών, τον συγχρονισμό των κομματιών και τον ποιοτικό έλεγχο με τον χειρισμό δυσλειτουργιών δικτύου. Από την πλευρά μας, πρέπει να διασφαλίσουμε την ανάγνωση ροών από την κάμερα και το μικρόφωνο, τη σχεδίαση βίντεο, τη διαχείριση της σύνδεσης, τη δημιουργία σύνδεσης WebRTC και τη μετάδοση ροών σε αυτήν, καθώς και τη μετάδοση μηνυμάτων σήματος μεταξύ των πελατών για τη δημιουργία σύνδεσης (το ίδιο το WebRTC περιγράφει μόνο το μορφή δεδομένων, αλλά όχι τις μεταφορές μηχανισμών του). Εάν οι πελάτες βρίσκονται πίσω από το NAT, το WebRTC συνδέει διακομιστές STUN, αν αυτό δεν βοηθήσει, TURN διακομιστές.

Μια τακτική σύνδεση p2p δεν μας αρκεί, γιατί θέλουμε να καταγράψουμε μαθήματα για περαιτέρω ανάλυση σε περίπτωση παραπόνων. Επομένως, στέλνουμε ροές WebRTC μέσω ενός ρελέ Janus Gateway από την Meetecho. Ως αποτέλεσμα, οι πελάτες δεν γνωρίζουν ο ένας τις διευθύνσεις του άλλου, βλέποντας μόνο τη διεύθυνση διακομιστή Janus. εκτελεί επίσης τις λειτουργίες ενός διακομιστή σημάτων. Ο Janus έχει πολλές από τις δυνατότητες που χρειαζόμαστε: αλλάζει αυτόματα σε TCP εάν ο πελάτης έχει αποκλειστεί το UDP. μπορεί να καταγράφει τόσο ροές UDP όσο και TCP. κλιμακούμενος; Υπάρχει ακόμη και μια ενσωματωμένη προσθήκη για δοκιμές ηχούς. Εάν είναι απαραίτητο, οι διακομιστές STUN και TURN από την Twilio συνδέονται αυτόματα.

Το καλοκαίρι του 2017, είχαμε δύο διακομιστές Janus σε λειτουργία, συν έναν επιπλέον διακομιστή για την επεξεργασία εγγεγραμμένων ακατέργαστων αρχείων ήχου και βίντεο, ώστε να μην απασχολούνται οι επεξεργαστές των κύριων. Κατά τη σύνδεση, οι διακομιστές Janus επιλέχθηκαν με βάση το μονό-ζυγό (αριθμός σύνδεσης). Εκείνη την εποχή, αυτό ήταν αρκετό, σύμφωνα με τα συναισθήματά μας, έδωσε περίπου ένα τετραπλάσιο περιθώριο ασφαλείας, το ποσοστό υλοποίησης ήταν περίπου 80. Ταυτόχρονα, η τιμή μειώθηκε στα ~2 ρούβλια ανά μάθημα, συν ανάπτυξη και υποστήριξη.

Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Επιστρέφοντας στο θέμα της επικοινωνίας μέσω βίντεο

Παρακολουθούμε συνεχώς τα σχόλια των μαθητών και των καθηγητών προκειμένου να εντοπίζουμε και να διορθώνουμε έγκαιρα προβλήματα. Μέχρι το καλοκαίρι του 2018, η ποιότητα κλήσεων ήταν σταθερά στην πρώτη θέση μεταξύ των καταγγελιών. Από τη μία, αυτό σήμαινε ότι είχαμε ξεπεράσει με επιτυχία άλλες ελλείψεις. Από την άλλη πλευρά, ήταν απαραίτητο να γίνει κάτι επειγόντως: εάν το μάθημα διαταραχθεί, κινδυνεύουμε να χάσουμε την αξία του, μερικές φορές μαζί με το κόστος αγοράς του επόμενου πακέτου, και αν διακοπεί το εισαγωγικό μάθημα, κινδυνεύουμε να χάσουμε έναν πιθανό πελάτη εντελώς.

Εκείνη την εποχή, η επικοινωνία μέσω βίντεο ήταν ακόμα σε λειτουργία MVP. Με απλά λόγια, το ξεκίνησαν, λειτούργησε, το κλιμάκωσαν μια φορά, κατάλαβαν πώς να το κάνουν - καλά, υπέροχο. Εάν λειτουργεί, μην το διορθώσετε. Κανείς δεν ασχολήθηκε εσκεμμένα με το θέμα της ποιότητας της επικοινωνίας. Μέχρι τον Αύγουστο, έγινε σαφές ότι αυτό δεν μπορούσε να συνεχιστεί και ξεκινήσαμε μια ξεχωριστή κατεύθυνση για να καταλάβουμε τι ήταν λάθος με το WebRTC και τον Janus.

Στην εισαγωγή, αυτή η κατεύθυνση έλαβε: λύση MVP, χωρίς μετρήσεις, χωρίς στόχους, χωρίς διαδικασίες για βελτίωση, ενώ το 7% των εκπαιδευτικών παραπονιέται για την ποιότητα της επικοινωνίας (δεν υπήρχαν δεδομένα ούτε για μαθητές).

Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Μια νέα κατεύθυνση βρίσκεται σε εξέλιξη

Η εντολή μοιάζει κάπως έτσι:

  • Ο επικεφαλής του τμήματος, ο οποίος είναι και ο κύριος προγραμματιστής.
  • Το QA βοηθά στη δοκιμή αλλαγών, αναζητά νέους τρόπους για να δημιουργήσει ασταθείς συνθήκες επικοινωνίας και αναφέρει προβλήματα από την πρώτη γραμμή.
  • Ο αναλυτής αναζητά συνεχώς διάφορες συσχετίσεις στα τεχνικά δεδομένα, βελτιώνει την ανάλυση των σχολίων των χρηστών και ελέγχει τα αποτελέσματα των πειραμάτων.
  • Ο διαχειριστής προϊόντων βοηθά στη συνολική κατεύθυνση και κατανομή των πόρων για πειράματα.
  • Ένας δεύτερος προγραμματιστής βοηθά συχνά στον προγραμματισμό και σε σχετικές εργασίες.

Αρχικά, δημιουργήσαμε μια σχετικά αξιόπιστη μέτρηση που παρακολουθούσε τις αλλαγές στις αξιολογήσεις ποιότητας επικοινωνίας (μέσος όρος σε ημέρες, εβδομάδες, μήνες). Εκείνη την εποχή, αυτοί ήταν βαθμοί από δασκάλους· αργότερα προστέθηκαν σε αυτούς βαθμοί από μαθητές. Στη συνέχεια άρχισαν να δημιουργούν υποθέσεις σχετικά με το τι δεν λειτουργεί σωστά, να το διορθώνουν και να εξετάζουν τις αλλαγές στη δυναμική. Πήγαμε για τα χαμηλά φρούτα: για παράδειγμα, αντικαταστήσαμε τον κωδικοποιητή vp8 με vp9, η απόδοση βελτιώθηκε. Προσπαθήσαμε να παίξουμε με τις ρυθμίσεις του Janus και να πραγματοποιήσουμε άλλα πειράματα - στις περισσότερες περιπτώσεις δεν οδήγησαν σε τίποτα.

Στο δεύτερο στάδιο, προέκυψε μια υπόθεση: Το WebRTC είναι μια λύση peer-to-peer και χρησιμοποιούμε έναν διακομιστή στη μέση. Ίσως το πρόβλημα να βρίσκεται εδώ; Αρχίσαμε να σκάβουμε και βρήκαμε την πιο σημαντική βελτίωση μέχρι στιγμής.

Εκείνη τη στιγμή, ένας διακομιστής από το pool επιλέχθηκε χρησιμοποιώντας έναν μάλλον ηλίθιο αλγόριθμο: ο καθένας είχε το δικό του «βάρος», ανάλογα με το κανάλι και την ισχύ, και προσπαθήσαμε να στείλουμε τον χρήστη σε αυτόν με το μεγαλύτερο «βάρος», χωρίς δίνοντας προσοχή στο πού βρισκόταν ο χρήστης γεωγραφικά. Ως αποτέλεσμα, ένας δάσκαλος από την Αγία Πετρούπολη μπορούσε να επικοινωνήσει με έναν μαθητή από τη Σιβηρία μέσω της Μόσχας και όχι μέσω του διακομιστή μας Janus στην Αγία Πετρούπολη.

Ο αλγόριθμος έχει επανασχεδιαστεί: τώρα, όταν ένας χρήστης ανοίγει την πλατφόρμα μας, συλλέγουμε ping από αυτόν σε όλους τους διακομιστές που χρησιμοποιούν Ajax. Κατά τη δημιουργία μιας σύνδεσης, επιλέγουμε ένα ζεύγος ping (δάσκαλος-διακομιστής και μαθητής-διακομιστής) με το μικρότερο ποσό. Λιγότερο ping σημαίνει λιγότερη απόσταση δικτύου από τον διακομιστή. μικρότερη απόσταση σημαίνει μικρότερη πιθανότητα απώλειας πακέτων. Η απώλεια πακέτων είναι ο μεγαλύτερος αρνητικός παράγοντας στην επικοινωνία μέσω βίντεο. Το μερίδιο της αρνητικότητας μειώθηκε στο μισό μέσα σε τρεις μήνες (για να είμαστε δίκαιοι, διεξήχθησαν άλλα πειράματα αυτή τη στιγμή, αλλά αυτό είχε σχεδόν σίγουρα τον μεγαλύτερο αντίκτυπο).

Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Πρόσφατα ανακαλύψαμε ένα άλλο μη προφανές, αλλά φαινομενικά σημαντικό: αντί για έναν ισχυρό διακομιστή Janus σε ένα παχύ κανάλι, είναι καλύτερο να έχουμε δύο απλούστερους με μικρότερο εύρος ζώνης. Αυτό έγινε σαφές αφού αγοράσαμε ισχυρά μηχανήματα με την ελπίδα να στριμώξουμε ταυτόχρονα τόσα δωμάτια (συνεδρίες επικοινωνίας) σε αυτά. Οι διακομιστές έχουν ένα όριο εύρους ζώνης, το οποίο μπορούμε να μεταφράσουμε με ακρίβεια στον αριθμό των δωματίων - γνωρίζουμε πόσα μπορούν να ανοίξουν, για παράδειγμα, στα 300 Mbit/s. Μόλις υπάρχουν πάρα πολλά δωμάτια ανοιχτά σε έναν διακομιστή, σταματάμε να τον επιλέγουμε για νέες δραστηριότητες μέχρι να μειωθεί το φορτίο. Η ιδέα ήταν ότι, έχοντας αγοράσει ένα ισχυρό μηχάνημα, θα φορτώναμε το κανάλι σε αυτό στο μέγιστο, έτσι ώστε στο τέλος να περιορίζεται από τον επεξεργαστή και τη μνήμη και όχι από το εύρος ζώνης. Αλλά αποδείχθηκε ότι μετά από έναν ορισμένο αριθμό ανοιχτών δωματίων (420), παρά το γεγονός ότι το φορτίο στον επεξεργαστή, τη μνήμη και τον δίσκο είναι ακόμα πολύ μακριά από τα όρια, η αρνητικότητα αρχίζει να φτάνει στην τεχνική υποστήριξη. Προφανώς, κάτι χειροτερεύει μέσα στον Janus, ίσως υπάρχουν κάποιοι περιορισμοί και εκεί. Αρχίσαμε να πειραματιζόμαστε, μειώσαμε το όριο εύρους ζώνης από 300 σε 200 Mbit/s και τα προβλήματα εξαφανίστηκαν. Τώρα αγοράσαμε τρεις νέους διακομιστές ταυτόχρονα με χαμηλά όρια και χαρακτηριστικά, πιστεύουμε ότι αυτό θα οδηγήσει σε σταθερή βελτίωση στην ποιότητα της επικοινωνίας. Φυσικά, δεν προσπαθήσαμε να καταλάβουμε τι συνέβαινε εκεί· τα δεκανίκια μας είναι τα πάντα. Προς άμυνά μας, ας πούμε ότι εκείνη τη στιγμή ήταν απαραίτητο να λύσουμε το πιεστικό πρόβλημα όσο το δυνατόν γρηγορότερα και όχι να το κάνουμε όμορφα. Εξάλλου, ο Janus για εμάς είναι ένα μαύρο κουτί γραμμένο σε C, είναι πολύ ακριβό να το πειράξουμε.

Από το Skype στο WebRTC: πώς οργανώσαμε την επικοινωνία βίντεο μέσω του ιστού

Λοιπόν, στη διαδικασία:

  • ενημέρωσε όλες τις εξαρτήσεις που μπορούσαν να ενημερωθούν, τόσο στον διακομιστή όσο και στον πελάτη (αυτά ήταν επίσης πειράματα, παρακολουθήσαμε τα αποτελέσματα).
  • διόρθωσε όλα τα εντοπισμένα σφάλματα που σχετίζονται με συγκεκριμένες περιπτώσεις, για παράδειγμα, όταν η σύνδεση διακόπηκε και δεν αποκαταστάθηκε αυτόματα.
  • Πραγματοποιήσαμε πολλές συναντήσεις με εταιρείες που εργάζονται στον τομέα των βιντεοεπικοινωνιών και εξοικειωμένες με τα προβλήματά μας: ροή παιχνιδιών, διοργάνωση διαδικτυακών σεμιναρίων. δοκιμάσαμε όλα όσα μας φάνηκαν χρήσιμα.
  • Διεξήγαγε τεχνική ανασκόπηση του υλικού και της ποιότητας επικοινωνίας των εκπαιδευτικών, από τους οποίους προήλθαν τα περισσότερα παράπονα.

Τα πειράματα και οι επακόλουθες αλλαγές κατέστησαν δυνατή τη μείωση της δυσαρέσκειας για την επικοινωνία μεταξύ των εκπαιδευτικών από 7,1% τον Ιανουάριο του 2018 σε 2,5% τον Ιανουάριο του 2019.

Ποιο είναι το επόμενο

Η σταθεροποίηση της πλατφόρμας Vimbox είναι ένα από τα κύρια έργα της εταιρείας για το 2019. Έχουμε μεγάλες ελπίδες ότι θα μπορέσουμε να διατηρήσουμε τη δυναμική και να μην βλέπουμε πλέον την επικοινωνία μέσω βίντεο στα κορυφαία παράπονα. Κατανοούμε ότι ένα σημαντικό μέρος αυτών των καταγγελιών σχετίζεται με καθυστερήσεις στους υπολογιστές των χρηστών και στο Διαδίκτυο, αλλά πρέπει να προσδιορίσουμε αυτό το μέρος και να λύσουμε τα υπόλοιπα. Όλα τα άλλα είναι τεχνικό πρόβλημα, φαίνεται ότι πρέπει να το αντιμετωπίσουμε.

Η κύρια δυσκολία είναι ότι δεν γνωρίζουμε σε ποιο επίπεδο είναι πραγματικά δυνατό να βελτιωθεί η ποιότητα. Η εύρεση αυτού του ανώτατου ορίου είναι το κύριο καθήκον. Ως εκ τούτου, σχεδιάστηκαν δύο πειράματα:

  1. συγκρίνετε βίντεο μέσω Janus με κανονικό p2p σε συνθήκες μάχης. Αυτό το πείραμα έχει ήδη πραγματοποιηθεί, δεν βρέθηκε στατιστικά σημαντική διαφορά μεταξύ της λύσης μας και του p2p.
  2. Ας παρέχουμε (ακριβές) υπηρεσίες από εταιρείες που κερδίζουν χρήματα αποκλειστικά από λύσεις επικοινωνίας βίντεο και ας συγκρίνουμε την ποσότητα αρνητικότητας από αυτές με την υπάρχουσα.

Αυτά τα δύο πειράματα θα μας επιτρέψουν να εντοπίσουμε έναν εφικτό στόχο και να εστιάσουμε σε αυτόν.

Επιπλέον, υπάρχει ένας αριθμός εργασιών που μπορούν να επιλυθούν τακτικά:

  • Δημιουργούμε μια τεχνική μέτρηση της ποιότητας της επικοινωνίας αντί για υποκειμενικές κριτικές.
  • Κάνουμε πιο λεπτομερή αρχεία καταγραφής περιόδων σύνδεσης για να αναλύσουμε με μεγαλύτερη ακρίβεια τις αστοχίες που συμβαίνουν, να κατανοήσουμε πότε και πού ακριβώς συνέβησαν και ποια φαινομενικά άσχετα γεγονότα συνέβησαν εκείνη τη στιγμή.
  • Ετοιμάζουμε μια αυτόματη δοκιμή ποιότητας σύνδεσης πριν από το μάθημα και δίνουμε επίσης στον πελάτη την ευκαιρία να δοκιμάσει χειροκίνητα τη σύνδεση, προκειμένου να μειώσει την αρνητικότητα που προκαλείται από το υλικό και το κανάλι του.
  • θα αναπτύξουμε και θα διεξάγουμε περισσότερες δοκιμές φόρτωσης επικοινωνίας βίντεο σε κακές συνθήκες, με μεταβλητή απώλεια πακέτων κ.λπ.
  • αλλάζουμε τη συμπεριφορά των διακομιστών σε περίπτωση προβλημάτων για να αυξήσουμε την ανοχή σφαλμάτων.
  • Θα προειδοποιήσουμε τον χρήστη εάν κάτι δεν πάει καλά με τη σύνδεσή του, όπως κάνει το Skype, ώστε να καταλάβει ότι το πρόβλημα είναι με το μέρος του.

Από τον Απρίλιο, η κατεύθυνση της επικοινωνίας βίντεο έχει γίνει ένα πλήρες ξεχωριστό έργο εντός της Skyeng, που ασχολείται με το δικό της προϊόν, όχι απλώς ένα μέρος του Vimbox. Αυτό σημαίνει ότι αρχίζουμε να ψάχνουμε για άτομα εργασία με βίντεο σε λειτουργία πλήρους απασχόλησης. Λοιπόν, όπως πάντα Ψάχνουμε για πολλούς καλούς ανθρώπους.

Και, φυσικά, συνεχίζουμε να επικοινωνούμε ενεργά με ανθρώπους και εταιρείες που εργάζονται με βιντεοεπικοινωνίες. Αν θέλετε να ανταλλάξετε εμπειρία μαζί μας, θα χαρούμε! Σχολιάστε, επικοινωνήστε - θα απαντήσουμε σε όλους.

Πηγή: www.habr.com