Cara kami mempercepatkan pengekodan video sebanyak lapan kali

Cara kami mempercepatkan pengekodan video sebanyak lapan kali

Setiap hari, berjuta-juta penonton menonton video di Internet. Tetapi untuk video tersedia, ia bukan sahaja mesti dimuat naik ke pelayan, tetapi juga diproses. Lebih cepat ini berlaku, lebih baik untuk perkhidmatan dan penggunanya.

Nama saya Askar Kamalov, setahun yang lalu saya menyertai pasukan teknologi video Yandex. Hari ini saya akan memberitahu pembaca Habr secara ringkas tentang bagaimana, dengan menyelaraskan proses pengekodan, kami berjaya mempercepatkan penghantaran video kepada pengguna dengan ketara.

Siaran ini terutamanya akan menarik minat mereka yang sebelum ini tidak memikirkan apa yang berlaku di bawah hud perkhidmatan video. Dalam ulasan anda boleh bertanya soalan dan mencadangkan topik untuk siaran akan datang.

Beberapa perkataan tentang tugas itu sendiri. Yandex bukan sahaja membantu anda mencari video di tapak lain, tetapi juga menyimpan video untuk perkhidmatannya sendiri. Sama ada program asal atau perlawanan sukan di udara, filem di KinoPoisk atau video di Zen dan Berita - semua ini dimuat naik ke pelayan kami. Untuk membolehkan pengguna menonton video, ia perlu disediakan: ditukar kepada format yang diperlukan, membuat pratonton atau bahkan menjalankan teknologi DeepHD. Fail yang tidak disediakan hanya mengambil ruang. Lebih-lebih lagi, kita bercakap bukan sahaja tentang penggunaan perkakasan yang optimum, tetapi juga tentang kelajuan penghantaran kandungan kepada pengguna. Contoh: rakaman detik penentuan perlawanan hoki boleh dicari dalam masa seminit selepas acara itu sendiri.

Pengekodan berurutan

Jadi, kebahagiaan pengguna sebahagian besarnya bergantung pada seberapa cepat video itu tersedia. Dan ini terutamanya ditentukan oleh kelajuan transcoding. Apabila tiada syarat ketat untuk kelajuan muat naik video, maka tiada masalah. Anda mengambil satu fail yang tidak boleh dibahagikan, menukarnya dan memuat naiknya. Pada permulaan perjalanan kami, ini adalah cara kami bekerja:

Cara kami mempercepatkan pengekodan video sebanyak lapan kali

Pelanggan memuat naik video ke storan, komponen Penganalisis mengumpul maklumat meta dan memindahkan video ke komponen Pekerja untuk penukaran. Semua peringkat dilakukan secara berurutan. Dalam kes ini, mungkin terdapat banyak pelayan pengekodan, tetapi hanya satu yang sibuk memproses video tertentu. Gambar rajah yang mudah dan telus. Di sinilah kelebihannya berakhir. Skim ini hanya boleh diskalakan secara menegak (disebabkan pembelian pelayan yang lebih berkuasa).

Pengekodan berurutan dengan hasil perantaraan

Untuk entah bagaimana melicinkan penantian yang menyakitkan, industri menghasilkan pilihan pengekodan yang pantas. Nama itu mengelirukan, kerana sebenarnya, pengekodan penuh berlaku secara berurutan dan mengambil masa yang sama. Tetapi dengan keputusan pertengahan. Ideanya ialah: sediakan dan terbitkan versi resolusi rendah video secepat mungkin, dan kemudian baru versi resolusi lebih tinggi.

Di satu pihak, video menjadi tersedia lebih cepat. Dan ia berguna untuk acara penting. Tetapi sebaliknya, gambar itu menjadi kabur, dan ini menjengkelkan penonton.

Ternyata anda bukan sahaja perlu memproses video dengan cepat, tetapi juga mengekalkan kualitinya. Inilah yang diharapkan pengguna daripada perkhidmatan video sekarang. Nampaknya sudah cukup untuk membeli pelayan yang paling produktif (dan sentiasa menaik tarafnya sekaligus). Tetapi ini adalah jalan buntu, kerana sentiasa ada video yang akan membuat walaupun perkakasan yang paling berkuasa menjadi perlahan.

Pengekodan selari

Adalah lebih cekap untuk membahagikan masalah kompleks kepada banyak masalah yang kurang kompleks dan menyelesaikannya secara selari pada pelayan yang berbeza. Ini adalah MapReduce untuk video. Dalam kes ini, kami tidak dihadkan oleh prestasi satu pelayan dan boleh menskala secara mendatar (dengan menambah mesin baharu).

Ngomong-ngomong, idea untuk membelah video menjadi kepingan kecil, memprosesnya secara selari dan melekatkannya bersama-sama bukanlah rahsia. Anda boleh menemui banyak rujukan kepada pendekatan ini (contohnya, pada HabrΓ© saya mengesyorkan siaran tentang projek itu DistVIDc). Tetapi ini tidak menjadikannya lebih mudah secara keseluruhan, kerana anda tidak boleh mengambil penyelesaian siap sedia dan membinanya di rumah anda. Kami memerlukan penyesuaian kepada infrastruktur kami, video kami dan juga beban kami. Secara umum, lebih mudah untuk menulis sendiri.

Jadi, dalam seni bina baharu, kami membahagikan blok Pekerja monolitik dengan pengekodan berjujukan kepada Segmenter perkhidmatan mikro, Tcoder, Combiner.

Cara kami mempercepatkan pengekodan video sebanyak lapan kali

  1. Segmenter memecahkan video kepada serpihan lebih kurang 10 saat. Serpihan terdiri daripada satu atau lebih GOP (kumpulan gambar). Setiap GOP adalah bebas dan dikodkan secara berasingan supaya ia boleh dinyahkod tanpa merujuk kepada bingkai daripada GOP lain. Iaitu, serpihan boleh dimainkan secara bebas antara satu sama lain. Sharding ini mengurangkan kependaman, membolehkan pemprosesan dimulakan lebih awal.
  2. Tcoder memproses setiap serpihan. Ia mengambil tugasan daripada baris gilir, memuat turun serpihan daripada storan, mengekodnya ke dalam resolusi yang berbeza (ingat bahawa pemain boleh memilih versi berdasarkan kelajuan sambungan), kemudian meletakkan hasilnya semula ke dalam storan dan menandakan serpihan sebagai diproses dalam pangkalan data. Setelah memproses semua serpihan, Tcoder menghantar tugas untuk menjana hasil untuk komponen seterusnya.
  3. Combiner mengumpulkan hasil bersama-sama: memuat turun semua serpihan yang dibuat oleh Tcoder, menjana strim untuk resolusi yang berbeza.

Beberapa perkataan tentang bunyi. Codec audio AAC yang paling popular mempunyai ciri yang tidak menyenangkan. Jika anda mengekod serpihan secara berasingan, maka anda tidak akan dapat melekatkannya bersama-sama dengan lancar. Peralihan akan ketara. Codec video tidak mempunyai masalah ini. Secara teorinya, anda boleh mencari penyelesaian teknikal yang kompleks, tetapi permainan ini sememangnya tidak bernilai lagi (berat audio jauh lebih rendah daripada video). Oleh itu, hanya video yang dikodkan secara selari, dan keseluruhan trek audio diproses.

Penemuan

Terima kasih kepada pemprosesan video selari, kami telah mengurangkan dengan ketara kelewatan antara video yang dimuat naik kepada kami dan tersedia kepada pengguna. Sebagai contoh, sebelum ini ia mungkin mengambil masa dua jam untuk mencipta beberapa versi penuh kualiti berbeza untuk filem FullHD yang berdurasi satu setengah jam. Sekarang semua ini mengambil masa 15 minit. Selain itu, dengan pemprosesan selari, kami mencipta versi resolusi tinggi lebih pantas daripada versi resolusi rendah dengan pendekatan hasil perantaraan lama.

Dan satu lagi perkara. Dengan pendekatan lama, sama ada pelayan tidak mencukupi, atau mereka terbiar tanpa tugas. Pengekodan selari membolehkan anda meningkatkan bahagian kitar semula besi. Kini kluster kami lebih daripada seribu pelayan sentiasa sibuk dengan sesuatu.

Malah, masih ada ruang untuk diperbaiki. Sebagai contoh, kita boleh menjimatkan masa yang ketara jika kita mula memproses serpihan video sebelum ia sampai kepada kita secara keseluruhannya. Seperti yang mereka katakan, lebih banyak akan datang.

Tulis dalam ulasan apa tugas dalam bidang bekerja dengan video yang anda ingin baca.

Pautan berguna kepada pengalaman rakan sekerja industri

Sumber: www.habr.com

Tambah komen