Kepiye carane nyepetake enkoding video kaping wolu

Kepiye carane nyepetake enkoding video kaping wolu

Saben dina, mayuta-yuta penonton nonton video ing Internet. Nanging supaya video kasedhiya, ora mung kudu diunggah menyang server, nanging uga diproses. Sing luwih cepet kedadeyan kasebut, luwih apik kanggo layanan lan pangguna.

Jenengku Askar Kamalov, setahun kepungkur aku gabung karo tim teknologi video Yandex. Dina iki aku bakal ngandhani para pamaca Habr babagan carane, kanthi paralel proses enkoding, kita bisa nyepetake pangiriman video menyang pangguna.

Kiriman iki utamane bakal dadi kapentingan kanggo wong-wong sing durung nate mikir babagan apa sing kedadeyan ing layanan video. Ing komentar sampeyan bisa takon lan menehi saran topik kanggo kiriman mangsa ngarep.

Sawetara tembung babagan tugas kasebut dhewe. Yandex ora mung mbantu sampeyan nggoleki video ing situs liyane, nanging uga nyimpen video kanggo layanan dhewe. Apa program asli utawa pertandingan olahraga ing udara, film ing KinoPoisk utawa video ing Zen lan News - kabeh iki diunggah menyang server kita. Supaya pangguna bisa nonton video kasebut, kudu disiapake: diowahi menyang format sing dibutuhake, nggawe pratinjau, utawa malah nganggo teknologi. DeepHD. File sing ora disiapake mung butuh ruang. Kajaba iku, kita ngomong ora mung babagan panggunaan hardware sing optimal, nanging uga babagan kecepatan pangiriman konten menyang pangguna. Conto: rekaman saka wayahe nemtokake saka pertandhingan hoki bisa digoleki ing menit sawise acara dhewe.

Encoding urutan

Dadi, rasa seneng pangguna umume gumantung saka sepira cepet video kasedhiya. Lan iki utamanΓ© ditemtokake dening kacepetan transcoding. Yen ora ana syarat sing ketat kanggo kacepetan upload video, mula ora ana masalah. Sampeyan njupuk siji, file sing ora bisa dipisahake, ngowahi, lan upload. Ing wiwitan perjalanan, iki cara kerjane:

Kepiye carane nyepetake enkoding video kaping wolu

Klien ngunggah video menyang panyimpenan, komponen Analyzer ngumpulake informasi meta lan nransfer video menyang komponen Worker kanggo konversi. Kabeh tahapan ditindakake kanthi urut. Ing kasus iki, bisa uga ana akeh server enkoding, nanging mung siji sing sibuk ngolah video tartamtu. Prasaja, diagram transparan. Iki ngendi kaluwihan pungkasan. Skema iki mung bisa skala vertikal (amarga tuku server sing luwih kuat).

Encoding urutan kanthi asil penengah

Kanggo ngrampungake ngenteni sing lara, industri nggawe pilihan coding cepet. Jeneng kasebut mblusukake, amarga nyatane, coding lengkap kedadeyan kanthi urutan lan butuh wektu sing suwe. Nanging kanthi asil penengah. Ide iki: nyiyapake lan nerbitake versi video kanthi resolusi rendah kanthi cepet, lan mung versi resolusi sing luwih dhuwur.

Ing tangan siji, video kasedhiya luwih cepet. Lan migunani kanggo acara penting. Nanging ing sisih liya, gambar kasebut dadi surem, lan iki ngganggu pamirsa.

Pranyata sampeyan kudu ora mung ngolah video kanthi cepet, nanging uga njaga kualitase. Iki sing dikarepake pangguna saka layanan video saiki. Bisa uga cukup kanggo tuku server sing paling produktif (lan nganyarke kabeh bebarengan). Nanging iki buntu, amarga tansah ana video sing bakal nggawe malah hardware paling kuat alon mudhun.

Encoding paralel

Luwih efisien kanggo mbagi masalah sing rumit dadi masalah sing kurang rumit lan ngrampungake kanthi paralel ing server sing beda-beda. Iki MapReduce kanggo video. Ing kasus iki, kita ora diwatesi dening kinerja siji server lan bisa ukuran horisontal (kanthi nambah mesin anyar).

Miturut cara, ide kanggo mbagi video dadi potongan-potongan cilik, ngolah kanthi podo karo lan gluing bebarengan ora dadi rahasia. Sampeyan bisa nemokake akeh referensi kanggo pendekatan iki (contone, ing Habré, aku nyaranake kiriman babagan proyek kasebut DistVIDc). Nanging iki ora nggawe luwih gampang sakabèhé, amarga sampeyan ora bisa mung njupuk solusi sing wis siap lan mbangun menyang omah sampeyan. Kita butuh adaptasi kanggo infrastruktur, video lan malah beban kita. Umumé, luwih gampang nulis dhewe.

Dadi, ing arsitektur anyar, kita dibagi blok Worker monolithic kanthi coding sekuensial dadi Segmenter microservices, Tcoder, Combiner.

Kepiye carane nyepetake enkoding video kaping wolu

  1. Segmenter mecah video dadi pecahan kira-kira 10 detik. Fragmen dumadi saka siji utawa luwih GOP (klompok gambar). Saben GOP bebas lan dienkode kanthi kapisah supaya bisa didekode tanpa referensi menyang pigura saka GOP liyane. Sing, pecahan bisa diputer independen saka saben liyane. Sharding iki nyuda latensi, ngidini pangolahan diwiwiti luwih awal.
  2. Tcoder ngolah saben fragmen. Butuh tugas saka antrian, ndownload fragmen saka panyimpenan, ngodhe menyang resolusi sing beda (elinga yen pamuter bisa milih versi adhedhasar kacepetan sambungan), banjur sijine asil bali menyang panyimpenan lan menehi tandha pecahan minangka diproses. ing database. Sawise ngolah kabeh pecahan, Tcoder ngirim tugas kanggo ngasilake asil kanggo komponen sabanjure.
  3. Combiner ngumpulake asil bebarengan: ndownload kabeh pecahan sing digawe dening Tcoder, ngasilake stream kanggo resolusi sing beda.

Sawetara tembung babagan swara. Codec audio AAC sing paling populer nduweni fitur sing ora nyenengake. Yen sampeyan ngode fragmen kanthi kapisah, mula sampeyan ora bakal bisa nggabungake kanthi lancar. Transisi bakal katon. Video codec ora duwe masalah iki. Secara teoritis, sampeyan bisa nggoleki solusi teknis sing rumit, nanging game iki mung ora cocog karo lilin (audio bobote kurang saka video). Mulane, mung video sing dikode ing podo karo, lan kabeh trek audio diproses.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Thanks kanggo pangolahan video paralel, kita wis nyuda wektu tundha antarane video sing diunggah menyang kita lan kasedhiya kanggo pangguna. Contone, sadurunge bisa njupuk rong jam kanggo nggawe sawetara versi lengkap saka kualitas beda kanggo film FullHD tahan siji setengah jam. Saiki kabeh iki njupuk 15 menit. Kajaba iku, kanthi pangolahan paralel, kita nggawe versi resolusi dhuwur malah luwih cepet tinimbang versi resolusi rendah kanthi pendekatan asil penengah lawas.

Lan siji bab liyane. Kanthi pendekatan lawas, ora ana cukup server, utawa padha nganggur tanpa tugas. Kodhe paralel ngidini sampeyan nambah bagean daur ulang wesi. Saiki kluster kita luwih saka sewu server tansah sibuk karo apa wae.

Nyatane, isih ana papan kanggo perbaikan. Contone, kita bisa ngirit wektu sing signifikan yen kita miwiti ngolah fragmen video sadurunge tekan kabeh. Kaya sing dikandhakake, luwih akeh sing bakal teka.

Tulis ing komentar apa tugas ing lapangan nggarap video sing pengin diwaca.

Pranala migunani kanggo pengalaman rekan industri

Source: www.habr.com

Add a comment