Како смо убрзали кодирање видео записа за осам пута

Како смо убрзали кодирање видео записа за осам пута

Сваког дана милиони гледалаца гледају видео снимке на Интернету. Али да би видео постао доступан, мора не само да буде постављен на сервер, већ и обрађен. Што се то брже деси, то боље за услугу и њене кориснике.

Моје име је Аскар Камалов, пре годину дана сам се придружио Иандек видео технолошком тиму. Данас ћу укратко испричати читаоцима Хабра о томе како смо, паралелизацијом процеса кодирања, успели значајно да убрзамо испоруку видеа кориснику.

Овај пост ће првенствено занимати оне који раније нису размишљали о томе шта се дешава под хаубом видео сервиса. У коментарима можете постављати питања и предлагати теме за будуће објаве.

Неколико речи о самом задатку. Иандек не само да вам помаже да тражите видео записе на другим сајтовима, већ и чува видео записе за своје услуге. Било да се ради о оригиналном програму или спортском мечу у етеру, филму на КиноПоиск-у или видео снимцима на Зен и вестима - све ово се поставља на наше сервере. Да би корисници могли да погледају видео, потребно га је припремити: конвертовати у потребан формат, направити преглед или чак проћи кроз технологију ДеепХД. Неприпремљена датотека само заузима простор. Штавише, не говоримо само о оптималном коришћењу хардвера, већ и о брзини испоруке садржаја корисницима. Пример: снимак одлучујућег тренутка хокејашке утакмице може се тражити у року од једног минута након самог догађаја.

Секвенцијално кодирање

Дакле, срећа корисника у великој мери зависи од тога колико брзо видео постаје доступан. А то је углавном одређено брзином транскодирања. Када не постоје строги захтеви за брзину учитавања видео записа, онда нема проблема. Узимате једну, недељиву датотеку, конвертујете је и отпремате. На почетку нашег путовања, овако смо радили:

Како смо убрзали кодирање видео записа за осам пута

Клијент поставља видео запис у складиште, компонента Анализер прикупља мета информације и преноси видео у Воркер компоненту ради конверзије. Све фазе се изводе узастопно. У овом случају може бити много сервера за кодирање, али само један је заузет обрадом одређеног видео записа. Једноставан, транспарентан дијаграм. Ту се његове предности завршавају. Ова шема се може скалирати само вертикално (због куповине моћнијих сервера).

Секвенцијално кодирање са средњим резултатом

Да би некако изгладила болно чекање, индустрија је смислила опцију брзог кодирања. Назив је погрешан, јер се у ствари, потпуно кодирање дешава узастопно и траје исто толико. Али са средњим резултатом. Идеја је следећа: припремите и објавите верзију видео снимка у нижој резолуцији што је пре могуће, а тек онда верзије у већој резолуцији.

С једне стране, видео постаје доступан брже. И то је корисно за важне догађаје. Али с друге стране, слика је мутна и то нервира гледаоце.

Испоставило се да морате не само брзо обрадити видео, већ и задржати његов квалитет. То је оно што корисници сада очекују од видео услуге. Можда се чини да је довољно купити најпродуктивније сервере (и редовно их ажурирати одједном). Али ово је ћорсокак, јер увек постоји видео који ће успорити чак и најмоћнији хардвер.

Паралелно кодирање

Много је ефикасније поделити сложен проблем на много мање сложених и решавати их паралелно на различитим серверима. Ово је МапРедуце за видео. У овом случају, нисмо ограничени перформансама једног сервера и можемо хоризонтално скалирати (додавањем нових машина).

Иначе, идеја да се видео снимци деле на мале делове, паралелно обрађују и лепе заједно није нека тајна. Можете пронаћи многе референце на овај приступ (на пример, на Хабре препоручујем пост о пројекту ДистВИДц). Али то не чини ништа лакшим, јер не можете само узети готово решење и уградити га у свој дом. Потребна нам је адаптација на нашу инфраструктуру, наш видео, па чак и наше оптерећење. Генерално, лакше је написати своје.

Дакле, у новој архитектури смо монолитни Воркер блок са секвенцијалним кодирањем поделили на микросервисе Сегментер, Тцодер, Цомбинер.

Како смо убрзали кодирање видео записа за осам пута

  1. Сегментатор дели видео на фрагменте од приближно 10 секунди. Фрагменти се састоје од једног или више ГОП-ова (група слика). Сваки ГОП је независан и кодиран засебно тако да се може декодирати без позивања на оквире из других ГОП-ова. То јест, фрагменти се могу репродуковати независно један од другог. Ово дељење смањује кашњење, омогућавајући да обрада почне раније.
  2. Тцодер обрађује сваки фрагмент. Узима задатак из реда, преузима фрагмент из складишта, кодира га у различите резолуције (запамтите да играч може изабрати верзију на основу брзине везе), затим враћа резултат у складиште и означава фрагмент као обрађен у бази података. Након обраде свих фрагмената, Тцодер шаље задатак да генерише резултате за следећу компоненту.
  3. Цомбинер заједно прикупља резултате: преузима све фрагменте које је направио Тцодер, генерише стримове за различите резолуције.

Неколико речи о звуку. Најпопуларнији ААЦ аудио кодек има непријатну особину. Ако фрагменте кодирате засебно, једноставно нећете моћи да их залепите заједно. Прелази ће бити приметни. Видео кодеци немају овај проблем. Теоретски, можете тражити сложено техничко решење, али ова игра једноставно још није вредна свеће (аудио је знатно мањи од видеа). Дакле, само видео се кодира паралелно, а цео аудио запис се обрађује.

Налази

Захваљујући паралелној обради видео записа, значајно смо смањили кашњење између видео записа који нам се отпрема и приступа корисницима. На пример, раније је било потребно два сата да се направи неколико пуних верзија различитог квалитета за ФуллХД филм у трајању од сат и по. Сада све ово траје 15 минута. Штавише, уз паралелну обраду, креирамо верзију високе резолуције чак и брже од верзије ниске резолуције са старим приступом средњег резултата.

И још једна ствар. Са старим приступом, или није било довољно сервера, или су мировали без задатака. Паралелно кодирање вам омогућава да повећате удео рециклаже гвожђа. Сада је наш кластер од више од хиљаду сервера увек заузет нечим.

У ствари, још има простора за побољшање. На пример, можемо значајно да уштедимо време ако почнемо да обрађујемо фрагменте видео снимка пре него што нам стигне у целини. Како кажу, следи још.

Напишите у коментарима о којим задацима из области рада са видеом желите да читате.

Корисни линкови до искустава колега из индустрије

Извор: ввв.хабр.цом

Додај коментар