Kumaha urang nyepetkeun encoding video ku dalapan kali

Kumaha urang nyepetkeun encoding video ku dalapan kali

Saban poé, jutaan pemirsa lalajo video dina Internét. Tapi pikeun pidéo janten sayogi, éta henteu ngan ukur kedah diunggah ka server, tapi ogé diolah. Langkung gancang ieu kajadian, langkung saé pikeun jasa sareng panggunana.

Nami abdi Askar Kamalov, sataun katukang kuring ngagabung sareng tim téknologi video Yandex. Dinten ieu kuring bakal sakeudeung nyarioskeun ka pamiarsa Habr ngeunaan kumaha, ku parallelizing prosés encoding, urang junun nyata nyepetkeun pangiriman video ka pamaké.

Tulisan ieu utamina bakal dipikaresep ku jalma-jalma anu teu acan kantos mikirkeun naon anu kajantenan dina kaayaan jasa pidéo. Dina koméntar anjeun tiasa naroskeun patarosan sareng nyarankeun topik pikeun tulisan anu bakal datang.

Sababaraha kecap ngeunaan tugas sorangan. Yandex henteu ngan ukur ngabantosan anjeun milarian pidéo dina situs sanés, tapi ogé nyimpen pidéo pikeun jasana sorangan. Naha éta program asli atanapi pertandingan olahraga dina hawa, pilem dina KinoPoisk atanapi pidéo dina Zen sareng Berita - sadayana ieu diunggah ka server kami. Pikeun pamaké pikeun lalajo video, éta perlu disiapkeun: dirobah jadi format diperlukeun, dijieun sawangan, atawa malah ngajalankeun ngaliwatan téhnologi. DeepHD. Hiji file unprepared ngan nyokot spasi. Leuwih ti éta, urang ngobrol teu ukur ngeunaan pamakéan optimal hardware, tapi ogé ngeunaan laju pangiriman eusi ka pamaké. Conto: rékaman tina momen decisive tina pertandingan hoki bisa searched pikeun dina menit sanggeus acara sorangan.

Encoding urutan

Janten, kabagjaan pangguna sabagéan ageung gumantung kana kumaha gancang pidéo sayogi. Sarta ieu utamana ditangtukeun ku speed transcoding. Nalika teu aya syarat anu ketat pikeun laju unggah pidéo, maka teu aya masalah. Anjeun nyandak hiji, file teu bisa dibagi, ngarobah eta, sarta unggah eta. Dina awal lalampahan urang, ieu kumaha urang digawé:

Kumaha urang nyepetkeun encoding video ku dalapan kali

Klién unggah pidéo ka panyimpenan, komponén Analyzer ngumpulkeun inpormasi meta sareng mindahkeun pidéo kana komponén Worker pikeun konvérsi. Sadaya tahapan dilaksanakeun sacara berurutan. Dina hal ieu, bisa jadi loba server encoding, tapi ngan hiji sibuk ngolah video husus. Basajan, diagram transparan. Ieu dimana kaunggulan na tungtung. Skéma ieu ngan bisa diskalakeun vertikal (kusabab meuli server leuwih kuat).

Encoding sequential kalawan hasil panengah

Pikeun kumaha waé ngagampangkeun ngantosan anu nyeri, industri datang sareng pilihan coding anu gancang. Ngaran ieu nyasabkeun, sabab kanyataanna, coding pinuh lumangsung sequentially sarta nyokot ngan lila. Tapi kalayan hasil panengah. Gagasanna nyaéta: nyiapkeun sareng nyebarkeun vérsi pidéo résolusi handap gancang-gancang, sareng ngan ukur versi résolusi anu langkung luhur.

Di hiji sisi, video janten langkung gancang. Tur éta mangpaat pikeun acara penting. Tapi di sisi séjén, gambar tétéla rumeuk, sarta ieu annoys pemirsa.

Tétéla yén anjeun kedah henteu ngan ukur gancang ngolah pidéo, tapi ogé ngajaga kualitasna. Ieu anu diarepkeun ku pangguna tina jasa pidéo ayeuna. Éta sigana cukup pikeun mésér server anu paling produktif (sareng ningkatkeun sacara rutin sakaligus). Tapi ieu mangrupikeun jalan buntu, sabab sok aya pidéo anu bakal ngajantenkeun hardware anu paling kuat ngalambatkeun.

Encoding paralel

Éta langkung éfisién pikeun ngabagi masalah kompleks kana seueur masalah anu kirang rumit sareng ngarengsekeunana paralel dina server anu béda. Ieu MapReduce pikeun pidéo. Dina hal ieu, urang teu diwatesan ku kinerja hiji server na bisa skala horisontal (ku nambahkeun mesin anyar).

Ku jalan kitu, ide pikeun ngabagi pidéo kana potongan-potongan alit, ngolahna paralel sareng ngahijikeun éta sanés rahasia. Anjeun tiasa mendakan seueur rujukan pikeun pendekatan ieu (contona, dina Habré, kuring nyarankeun tulisan ngeunaan proyék éta DistVIDc). Tapi ieu henteu ngagampangkeun sadayana, sabab anjeun henteu tiasa ngan ukur nyandak solusi anu siap-siap sareng ngawangun kana bumi anjeun. Urang peryogi adaptasi kana infrastruktur urang, pidéo sareng bahkan beban urang. Sacara umum, leuwih gampang nulis sorangan.

Janten, dina arsitéktur énggal, urang ngabagi blok Worker monolithic sareng coding sequential kana microservices Segmenter, Tcoder, Combiner.

Kumaha urang nyepetkeun encoding video ku dalapan kali

  1. Segmenter ngarecah video kana fragmen kurang leuwih 10 detik. Fragmen diwangun ku hiji atawa leuwih GOPs (grup gambar). Unggal GOP mandiri sareng disandikeun nyalira supados tiasa dikodekeun tanpa ngarujuk kana pigura ti GOP anu sanés. Hartina, fragmen bisa dicoo sacara mandiri unggal lianna. sharding ieu ngurangan latency, sahingga processing dimimitian saméméhna.
  2. Tcoder ngolah unggal fragmen. Butuh tugas ti antrian, ngundeur sempalan ti gudang, encodes kana resolusi béda (inget yén pamaén bisa milih versi dumasar kana speed sambungan), lajeng nempatkeun hasilna deui kana gudang sarta nandaan sempalan sakumaha olahan. dina database. Saatos ngolah sadaya fragmen, Tcoder ngirim tugas pikeun ngahasilkeun hasil pikeun komponén salajengna.
  3. Combiner ngumpulkeun hasil babarengan: unduh sadaya fragmen anu dilakukeun ku Tcoder, ngahasilkeun aliran pikeun résolusi anu béda.

Sababaraha kecap ngeunaan sora. Nu pang populerna codec audio AAC boga fitur pikaresepeun. Upami anjeun ngodekeun fragmen sacara misah, maka anjeun moal tiasa ngahijikeunana sacara lancar. Transisi bakal katingali. Codec video teu boga masalah ieu. Sacara téoritis, anjeun tiasa milarian solusi téknis anu rumit, tapi kaulinan ieu ngan saukur henteu pantes lilinna (audio beuratna langkung handap tina pidéo). Ku alatan éta, ngan video nu disandikeun dina paralel, sarta sakabéh lagu audio diolah.

Hasil

Hatur nuhun kana pamrosésan pidéo paralel, kami parantos ngirangan jeda antara pidéo anu diunggah ka kami sareng sayogi pikeun pangguna. Contona, samemehna bisa butuh dua jam pikeun nyieun sababaraha versi pinuh ku kualitas béda pikeun pilem FullHD tahan hiji satengah jam. Ayeuna sadayana ieu butuh 15 menit. Leuwih ti éta, kalayan ngolah paralel, urang nyieun versi resolusi luhur malah leuwih gancang ti versi resolusi low kalawan pendekatan hasil panengah heubeul.

Sareng hiji deui. Kalayan pendekatan anu lami, boh henteu cekap server, atanapi aranjeunna dianggurkeun tanpa tugas. Coding paralel ngamungkinkeun anjeun ningkatkeun pangsa daur ulang beusi. Ayeuna kluster kami langkung ti sarébu server sok sibuk ku hal.

Kanyataanna, masih aya rohangan pikeun perbaikan. Salaku conto, urang tiasa ngahémat waktos anu penting upami urang ngamimitian ngolah fragmen pidéo sateuacan dugi ka urang sadayana. Sakumaha aranjeunna nyarios, langkung seueur anu bakal datang.

Tulis dina koméntar naon tugas dina widang damel sareng pidéo anu anjeun hoyong baca.

Tumbu mangpaat pikeun pangalaman kolega industri

sumber: www.habr.com

Tambahkeun komentar