Cume avemu acceleratu a codificazione di video da ottu volte

Cume avemu acceleratu a codificazione di video da ottu volte

Ogni ghjornu, milioni di televidenti fighjanu video in Internet. Ma per chì u video sia dispunibule, ùn deve micca solu esse caricatu in u servitore, ma ancu processatu. U più veloce questu succede, u megliu per u serviziu è i so utilizatori.

Mi chjamu Askar Kamalov, un annu fà aghju unitu à a squadra di tecnulugia di video Yandex. Oghje diceraghju brevemente à i lettori Habr cumu, parallelisendu u prucessu di codificazione, avemu riesciutu à accelerà significativamente a consegna di video à l'utilizatore.

Questu post serà principalmente di interessu à quelli chì ùn anu micca pensatu prima à ciò chì succede sottu u cappucciu di i servizii video. In i cumenti pudete fà dumande è suggerisce temi per i posti futuri.

Uni pochi parolle nantu à u compitu stessu. Yandex ùn solu aiuta à ricercà video in altri siti, ma ancu guarda video per i so servizii. Ch'ella sia un prugramma uriginale o una partita di sport in l'aria, un filmu in KinoPoisk o video in Zen è News - tuttu questu hè caricatu in i nostri servitori. Per chì l'utilizatori fighjanu u video, deve esse preparatu: cunvertisce in u formatu necessariu, creanu una vista previa, o ancu eseguite attraversu a tecnulugia. DeepHD. Un schedariu micca preparatu occupa solu spaziu. Inoltre, ùn parlemu micca solu di l'usu ottimali di hardware, ma ancu di a rapidità di consegna di cuntenutu à l'utilizatori. Esempiu: una registrazione di u mumentu decisivu di una partita di hockey pò esse cercata in un minutu dopu à l'avvenimentu stessu.

Codificazione sequenziale

Dunque, a felicità di l'utilizatore dipende largamente da quantu rapidamente u video diventa dispunibule. È questu hè principalmente determinatu da a velocità di transcodificazione. Quandu ùn ci sò micca esigenze strette per a velocità di carica di video, allora ùn ci sò micca prublemi. Pigliate un schedariu unicu, indivisibile, cunvertisce, è carica. À u principiu di u nostru viaghju, questu hè cumu avemu travagliatu:

Cume avemu acceleratu a codificazione di video da ottu volte

U cliente carica u video à l'almacenamiento, u cumpunente di l'Analyzer raccoglie meta infurmazione è trasferisce u video à u cumpunente Worker per a cunversione. Tutte e tappe sò realizate in sequenza. In questu casu, ci ponu esse parechji servitori di codificazione, ma solu unu hè occupatu à processà un video specificu. Schema simplice è trasparente. Questu hè induve finiscinu i so vantaghji. Stu schema pò esse scalatu solu verticalmente (per via di a compra di servitori più putenti).

Codificazione sequenziale cù u risultatu intermediu

Per liscia in qualchì modu l'attesa dolorosa, l'industria hè stata cun una opzione di codificazione rapida. U nome hè ingannatu, perchè in fattu, a codificazione completa si faci in sequenza è dura u tempu. Ma cù un risultatu intermediu. L'idea hè questu: preparà è pubblicà una versione di u video à bassa risoluzione u più prestu pussibule, è solu e versioni di risoluzione più alta.

Da una banda, u video diventa dispunibule più veloce. È hè utile per avvenimenti impurtanti. Ma d'altra parte, a stampa diventa sfocata, è questu fastidiu i telespettatori.

Ci hè chì avete bisognu micca solu di processà rapidamente u video, ma ancu di mantene a so qualità. Questu hè ciò chì l'utilizatori aspettanu da un serviziu di video avà. Pò sembrà chì hè abbastanza per cumprà i servitori più pruduttivi (è aghjurnà regularmente tutti in una volta). Ma questu hè una strada morta, perchè ci hè sempre un video chì farà rallentà ancu u hardware più putente.

Codificazione parallela

Hè assai più efficaci di dividisce un prublema cumplessu in parechji menu cumplessi è risolve in parallelu in diversi servitori. Questu hè MapReduce per u video. In questu casu, ùn simu limitati da a prestazione di un servitore è ponu scala horizontale (aghjunghjendu novi macchine).

A propositu, l'idea di sparte i video in pezzi chjuchi, di trasfurmà in parallelu è di incollallu ùn hè micca un sicretu. Pudete truvà parechje referenze à questu approcciu (per esempiu, nantu à Habré, ricumandemu un post nantu à u prugettu DistVIDc). Ma questu ùn rende micca più faciule in generale, perchè ùn pudete micca solu piglià una suluzione pronta è custruisce in a vostra casa. Avemu bisognu di adattazione à a nostra infrastruttura, u nostru video è ancu a nostra carica. In generale, hè più faciule per scrive u vostru propiu.

Allora, in a nova architettura, avemu divisu u bloccu di Worker monoliticu cù codificazione sequenziale in microservizi Segmenter, Tcoder, Combiner.

Cume avemu acceleratu a codificazione di video da ottu volte

  1. Segmenter rompe u video in frammenti di circa 10 seconde. I frammenti sò custituiti da unu o più GOP (gruppu di ritratti). Ogni GOP hè indipendente è codificatu separatamente in modu chì pò esse decodificatu senza riferimentu à frames da altri GOP. Questu hè, i frammenti ponu esse ghjucati indipindentamente l'un l'altru. Questa sharding reduce a latenza, permettendu a trasfurmazioni di principià prima.
  2. Tcoder processa ogni fragmentu. Piglia un compitu da a fila, scarica un fragmentu da l'almacenamiento, u codifica in diverse risoluzioni (ricurdate chì u ghjucatore pò sceglie una versione basata nantu à a velocità di cunnessione), poi rimette u risultatu in l'almacenamiento è marca u fragmentu cum'è processatu. in a basa di dati. Dopu avè processatu tutti i frammenti, Tcoder manda u compitu per generà risultati per u prossimu componente.
  3. Combiner raccoglie i risultati inseme: scarica tutti i frammenti fatti da Tcoder, genera flussi per diverse risoluzioni.

Uni pochi parolle nantu à u sonu. U codec audio AAC più famosu hà una funzione dispiacevule. Se codificate i frammenti per separatamente, allora ùn sarete micca capaci di incollali senza saldatura. E transizzioni seranu notevuli. Codecs Video ùn hannu stu prublema. In teoria, pudete cercà una suluzione tecnica cumplessa, ma questu ghjocu ùn vale micca a pena ancu a candela (l'audio pesa assai menu di u video). Dunque, solu u video hè codificatu in parallelu, è tutta a pista audio hè trattata.

Risultati

Grazie à l'elaborazione video parallela, avemu riduciutu significativamente u ritardu trà un video caricatu à noi è esse dispunibule per l'utilizatori. Per esempiu, prima puderia piglià duie ore per creà parechje versioni cumplete di qualità diversa per un film FullHD chì dura una ora è mezza. Avà tuttu questu dura 15 minuti. Inoltre, cù u prucessu parallelu, creamu una versione d'alta risoluzione ancu più veloce di una versione di bassa risoluzione cù u vechju approcciu di u risultatu intermediu.

È una cosa più. Cù u vechju approcciu, o ùn ci era micca abbastanza servitori, o eranu inattivi senza compiti. A codificazione parallela permette di aumentà a parte di u riciclamentu di ferru. Avà u nostru cluster di più di mille servitori hè sempre occupatu cù qualcosa.

In fatti, ci hè sempre spaziu per migliurà. Per esempiu, pudemu risparmià un tempu significativu si cuminciamu à trasfurmà frammenti di u video prima ch'ellu ghjunghje à noi in tuttu. Comu dicenu, più à vene.

Scrivite in i cumenti chì attività in u campu di travaglià cù video chì vulete leghje.

Ligami utili à l'esperienza di i culleghi di l'industria

Source: www.habr.com

Add a comment