Πώς επιταχύναμε την κωδικοποίηση βίντεο κατά οκτώ φορές

Πώς επιταχύναμε την κωδικοποίηση βίντεο κατά οκτώ φορές

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

Ονομάζομαι Askar Kamalov, πριν από ένα χρόνο μπήκα στην ομάδα τεχνολογίας βίντεο της Yandex. Σήμερα θα πω εν συντομία στους αναγνώστες του Habr για το πώς, παραλληλίζοντας τη διαδικασία κωδικοποίησης, καταφέραμε να επιταχύνουμε σημαντικά την παράδοση του βίντεο στον χρήστη.

Αυτή η ανάρτηση θα ενδιαφέρει πρωτίστως όσους δεν έχουν σκεφτεί στο παρελθόν τι συμβαίνει κάτω από την κουκούλα των υπηρεσιών βίντεο. Στα σχόλια μπορείτε να κάνετε ερωτήσεις και να προτείνετε θέματα για μελλοντικές αναρτήσεις.

Λίγα λόγια για την ίδια την εργασία. Το Yandex όχι μόνο σας βοηθά να αναζητήσετε βίντεο σε άλλους ιστότοπους, αλλά επίσης αποθηκεύει βίντεο για τις δικές του υπηρεσίες. Είτε πρόκειται για ένα πρωτότυπο πρόγραμμα είτε για έναν αθλητικό αγώνα στον αέρα, μια ταινία στο KinoPoisk ή βίντεο στο Zen and News - όλα αυτά ανεβαίνουν στους διακομιστές μας. Για να μπορούν οι χρήστες να παρακολουθήσουν το βίντεο, πρέπει να είναι προετοιμασμένο: μετατροπή στην απαιτούμενη μορφή, δημιουργία προεπισκόπησης ή ακόμα και εκτέλεση μέσω τεχνολογίας DeepHD. Ένα μη προετοιμασμένο αρχείο καταλαμβάνει απλώς χώρο. Επιπλέον, δεν μιλάμε μόνο για τη βέλτιστη χρήση του υλικού, αλλά και για την ταχύτητα παράδοσης περιεχομένου στους χρήστες. Παράδειγμα: μια καταγραφή της αποφασιστικής στιγμής ενός αγώνα χόκεϊ μπορεί να αναζητηθεί μέσα σε ένα λεπτό μετά το ίδιο το γεγονός.

Διαδοχική κωδικοποίηση

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

Πώς επιταχύναμε την κωδικοποίηση βίντεο κατά οκτώ φορές

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

Διαδοχική κωδικοποίηση με ενδιάμεσο αποτέλεσμα

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

Από τη μία πλευρά, το βίντεο γίνεται πιο γρήγορα διαθέσιμο. Και είναι χρήσιμο για σημαντικά γεγονότα. Αλλά από την άλλη πλευρά, η εικόνα αποδεικνύεται θολή και αυτό ενοχλεί τους θεατές.

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

Παράλληλη κωδικοποίηση

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

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

Έτσι, στη νέα αρχιτεκτονική, χωρίσαμε το μονολιθικό μπλοκ Worker με διαδοχική κωδικοποίηση σε microservices Segmenter, Tcoder, Combiner.

Πώς επιταχύναμε την κωδικοποίηση βίντεο κατά οκτώ φορές

  1. Το Segmenter χωρίζει το βίντεο σε τμήματα περίπου 10 δευτερολέπτων. Τα θραύσματα αποτελούνται από ένα ή περισσότερα GOP (ομάδα εικόνων). Κάθε GOP είναι ανεξάρτητο και κωδικοποιείται ξεχωριστά, ώστε να μπορεί να αποκωδικοποιηθεί χωρίς αναφορά σε πλαίσια από άλλα GOP. Δηλαδή, τα κομμάτια μπορούν να παιχτούν ανεξάρτητα το ένα από το άλλο. Αυτός ο διαμοιρασμός μειώνει τον λανθάνοντα χρόνο, επιτρέποντας την έναρξη της επεξεργασίας νωρίτερα.
  2. Ο Tcoder επεξεργάζεται κάθε κομμάτι. Παίρνει μια εργασία από την ουρά, κατεβάζει ένα κομμάτι από τον αποθηκευτικό χώρο, το κωδικοποιεί σε διαφορετικές αναλύσεις (θυμηθείτε ότι η συσκευή αναπαραγωγής μπορεί να επιλέξει μια έκδοση με βάση την ταχύτητα σύνδεσης), στη συνέχεια επαναφέρει το αποτέλεσμα στον αποθηκευτικό χώρο και επισημαίνει το τμήμα ως επεξεργασμένο στη βάση δεδομένων. Έχοντας επεξεργαστεί όλα τα τμήματα, ο Tcoder στέλνει την εργασία για να δημιουργήσει αποτελέσματα για το επόμενο στοιχείο.
  3. Το Combiner συλλέγει τα αποτελέσματα μαζί: κατεβάζει όλα τα τμήματα που φτιάχνονται από την Tcoder, δημιουργεί ροές για διαφορετικές αναλύσεις.

Λίγα λόγια για τον ήχο. Ο πιο δημοφιλής κωδικοποιητής ήχου AAC έχει ένα δυσάρεστο χαρακτηριστικό. Εάν κωδικοποιήσετε τα θραύσματα χωριστά, τότε απλά δεν θα μπορείτε να τα κολλήσετε μεταξύ τους απρόσκοπτα. Οι μεταβάσεις θα είναι αισθητές. Οι κωδικοποιητές βίντεο δεν έχουν αυτό το πρόβλημα. Θεωρητικά, μπορείτε να αναζητήσετε μια περίπλοκη τεχνική λύση, αλλά αυτό το παιχνίδι απλά δεν αξίζει ακόμα το κερί (ο ήχος ζυγίζει πολύ λιγότερο από το βίντεο). Επομένως, μόνο το βίντεο κωδικοποιείται παράλληλα και ολόκληρο το κομμάτι ήχου υποβάλλεται σε επεξεργασία.

Ευρήματα

Χάρη στην παράλληλη επεξεργασία βίντεο, μειώσαμε σημαντικά την καθυστέρηση μεταξύ της μεταφόρτωσης ενός βίντεο σε εμάς και της διάθεσης στους χρήστες. Για παράδειγμα, παλαιότερα μπορεί να χρειαστούν δύο ώρες για να δημιουργηθούν πολλές πλήρεις εκδόσεις διαφορετικής ποιότητας για μια ταινία FullHD διάρκειας μιάμιση ώρας. Τώρα όλα αυτά χρειάζονται 15 λεπτά. Επιπλέον, με παράλληλη επεξεργασία, δημιουργούμε μια έκδοση υψηλής ανάλυσης ακόμη πιο γρήγορα από μια έκδοση χαμηλής ανάλυσης με την παλιά προσέγγιση ενδιάμεσου αποτελέσματος.

Και κάτι ακόμα. Με την παλιά προσέγγιση, είτε δεν υπήρχαν αρκετοί διακομιστές, είτε ήταν αδρανείς χωρίς εργασίες. Η παράλληλη κωδικοποίηση σάς επιτρέπει να αυξήσετε το μερίδιο της ανακύκλωσης σιδήρου. Τώρα το σύμπλεγμα μας με περισσότερους από χίλιους διακομιστές είναι πάντα απασχολημένο με κάτι.

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

Γράψτε στα σχόλια ποιες εργασίες στον τομέα της εργασίας με βίντεο θα θέλατε να διαβάσετε.

Χρήσιμοι σύνδεσμοι για την εμπειρία των συναδέλφων του κλάδου

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο