Cara terbaik untuk mengurus video pada skala

Dalam video dunia hari ini telah menjadi cara mudah untuk menerangkan sebarang idea serta memahami topik apa pun. Video telah terbukti menuntut lebih banyak perhatian pengguna daripada mana-mana medium lain. Orang suka mengakses video di mana-mana, pada bila-bila masa dan ia adalah satu cabaran bagi syarikat-syarikat yang baru muncul bukan sahaja untuk memberikan kandungan yang berkualiti tetapi juga memberi pengalaman tontonan yang baik kepada pelanggan mereka.

Pengenalan syarikat kami -

Kami adalah platform 3 doktor yang telah disahkan, yang terbesar di negara ini. Sebagai sebuah syarikat yang bergerak cepat, kami mencuba banyak produk dan pada masa yang sama berhati-hati untuk memberikan produk berkualiti untuk semua. Baru-baru ini, kami telah membolehkan pengguna kami memuat naik video mengenai prosedur pembedahan dan sebagainya, untuk berkongsi penemuan mereka dan mendapatkan cadangan daripada rakan-rakan doktor mereka.

Kebanyakan pengguna kami, di mana sahaja, mempunyai penerimaan minimum untuk kelajuan internet yang lebih cepat dan ini adalah satu cabaran ketika menyampaikan kandungan data berat seperti video.

Kami mendapati agak jelas untuk menggunakan protokol HLS untuk penghantaran video kerana disokong secara meluas, yang dibangunkan oleh Apple dan digunakan oleh banyak syarikat besar seperti Facebook. HLS bermaksud HTTP Live Streaming. Ia adalah protokol streaming media untuk menyampaikan kandungan video dan audio. Video mp4 dibahagikan kepada segmen kecil biasanya 10 saat dan untuk setiap segmen, beberapa segmen kualiti video juga dibuat yang boleh dimuat turun untuk main balik berdasarkan bandwidth internet yang tersedia.

Oleh itu, setiap kali seorang pemain memainkan video format HLS, ia boleh meminta segmen video berdasarkan lebar jalur yang ada dan menstrimkan video tanpa henti memberikan pengguna pengalaman yang lancar. Pada satu ketika, pengguna boleh menonton video resolusi rendah dan pada masa akan datang ia boleh bertukar kepada definisi yang lebih tinggi sebaik sahaja peranti berada dalam rangkaian rangkaian jalur lebar yang lebih tinggi.

Berikut adalah resolusi yang kami gunakan untuk kes penggunaan kami selain resolusi asal video -

Resolusi video akan dijana

Cabarannya adalah untuk mengubah video yang dimuat naik dalam format yang diperlukan serta menjana lakaran kecil untuk pemegang tempat video. Terdapat banyak penyedia perkhidmatan yang menyediakan transformasi video dan penyampaian kandungan tetapi masalah utama adalah mereka mampu mencapai tahap tertentu dan dengan pertumbuhan syarikat anda memerlukan penyelesaian yang bukan beban pada poket anda. AWS MediaConvert dan S3 adalah alat yang kami pilih untuk mengubah dan menyampaikan media video kami. Dengan menggunakan penyelesaian yang dibincangkan di bawah, kami dapat mengurangkan kos kami sebanyak 90 peratus yang agak ketara untuk syarikat mana-mana skala. Ikutilah artikel itu jika anda ingin mengetahui cara kami menerapkan penyelesaiannya.

Pendekatan Awal

Daripada membina penyelesaian dalaman kami memutuskan untuk menggunakan perkhidmatan pihak ketiga yang mana Awan sesuai dengan kes penggunaan kami. Ia menyediakan perkhidmatan transformasi video lalulintas yang benar-benar membantu dalam mendapatkan transformasi yang kami perlukan dan jumlah masa yang diambil juga sangat kurang.

Pembangunan adalah lebih pantas kerana kita tidak perlu bimbang tentang transformasi. Kita perlu memuat naik video, pilih transformasi yang diperlukan dan Awan akan melakukan yang lain. Pada mulanya, Cloudinary berada dalam lingkungan bajet kami tetapi sebagai ciri mula mendapat lebih banyak daya tarikan, lebih banyak pengguna mula memuat naik video. Pertumbuhan ini menimbulkan jumlah yang kami belanjakan di Awan dan sudah tiba masanya untuk mencari pilihan lain.

Eksperimen kami

Pertama, kami menguji perpustakaan sumber terbuka terkenal - ffmpeg yang mampu melakukan transformasi video yang kami perlukan. Kami mempunyai dua pilihan menggunakan perpustakaan ffmpeg - menggunakan Fungsi Awan atau menggunakan salah satu contoh VM yang sudah berjalan di GCP (Google Cloud Platform).

Oleh kerana, keseluruhan proses berfungsi pada model atas permintaan, pilihan kedua dibuang. Fungsi Awan adalah berdasarkan kepada model pengkomputeran-permintaan yang bermaksud kita akan mendapatkan sumber-sumber seperti dan bila diperlukan tanpa menjejaskan perkhidmatan kami yang lain. Memandangkan ia adalah pada permintaan kita tidak perlu membayar kos pelayan apabila ia terbiar.

Fungsi Awan sangat mudah digunakan dan memberi pilihan untuk menulis kod dalam dua bahasa yang paling popular - nod dan python. Kami memutuskan untuk pergi dengan python kerana kami selesa dengan paradigma sejak stack kami pada python. Memasang dependencies sangat mudah, anda hanya perlu menyebutnya dalam fail requirements.txt dan anda telah ditetapkan.

Kami mendapat skrip berfungsi untuk fungsi awan di mana kami mula memuat turun video dari storan awan, mengubahnya dalam format yang diperlukan dan memindahkannya kembali ke storan awan untuk streaming.

Tetapi ada tangkapan. Kami membiarkan pengguna kami memuat naik video sehingga 100 MB dan untuk mengendalikan video mengenai fungsi awan saiz itu mengambil banyak masa dan akhirnya tamat sebelum menyelesaikan keseluruhan proses kerana had masa (540 saat). Dalam pertahanan kami, kami tidak memikirkan senario itu lebih awal.

Selepas meneroka pilihan lain dan banyak penyelidikan AWS MediaConvert kelihatan menjanjikan. Bekerja dengan MediaConvert adalah rumit kerana ia memberikan banyak pilihan untuk menyesuaikan transformasi anda dan seseorang dapat dengan mudah tersesat dalam keadaan itu (dimanjakan oleh pilihan). Tetapi selepas melihat sekeliling kami, kami mendapat templat yang diperlukan untuk transformasi yang kami inginkan. (lampirkan templat)

Keseluruhan aliran kami kelihatan seperti -

Kami memuat naik video ke baldi S3 yang seterusnya mencetuskan fungsi Lambda. Dalam lambda kita memikirkan parameter yang diperlukan sebagai input untuk MediaConvert menggunakan tidak lain daripada ffmpeg. Selepas mengira semua parameter, kami menghantar permintaan kepada AWS MediaConvert untuk mengubah video kami. Untuk mendapatkan pemberitahuan mengenai penyelesaian transformasi, seseorang boleh membuat acara awan perubahan keadaan kerja yang dikemukakan di MediaConvert dari 'maju' hingga 'selesai' yang seterusnya akan mencetuskan fungsi lambda. Fungsi lambda yang dicetuskan boleh membuat panggilan api atau melakukan kemas kini db berdasarkan kemungkinan projek anda.

Pendek kata:

Penyelesaian AWS bekerja seperti pesona dan ia benar-benar pantas. Ini mungkin kelihatan seperti banyak kerja tetapi ia berbaloi jika anda perlu membuat skala.

Manfaat menggunakan penyelesaian ini -

  • Kami menggunakan S3 untuk menyimpan dan menyampaikan kandungan media kami yang sangat berskala dan berpatutan.
  • AWS MediaConvert sangat cepat dan memberi fungsi untuk mengekalkan beberapa baris untuk menghantar kerja untuk transformasi. Oleh itu, anda tidak perlu bimbang tentang melompat secara tiba-tiba dalam permintaan untuk mengendalikan video. Juga harga benar-benar menjimatkan, tiada bayaran bulanan dan anda hanya perlu membayar untuk perkhidmatan yang digunakan.
  • AWS Lambda didasarkan pada Penghitungan Permintaan yang telah kita bahas di atas. Selain itu, AWS memberi anda beberapa permintaan lambda percuma dan masa CPU fungsi Lambda setiap bulan yang benar-benar hebat dan walaupun penggunaan di luar harga peringkat bebas tidak meletakkan beban pada poket anda.

Masalah yang dihadapi semasa penggunaan AWS:

  • Sentiasa ingat AWS menyediakan perkhidmatan berdasarkan rantau, kecuali beberapa seperti S3 yang boleh didapati di peringkat global. Gunakan perkhidmatan di rantau yang sama jika tidak, anda mungkin tidak dapat menangkap peristiwa atau mencetuskan fungsi lambda.
  • Beri kebenaran yang diperlukan untuk peranan IAM anda untuk perkhidmatan yang anda gunakan.
  • Seperti yang disebutkan di atas muat naik video ke baldi S3 mencetuskan fungsi lambda di mana kami mengisi butir-butir transformasi yang diperlukan seperti resolusi video yang dihasilkan, kadar bit, dan lain-lain dan untuk nilai ini anda perlu mencari data meta video yang dimuat naik seperti ketinggian , lebar dan bitrate. Anda perlu menggunakan beberapa pemprosesan pustaka video seperti ffmpeg untuk mendapatkan nilai ini yang tidak dimuatkan pada kontena lambda kami berjalan pada saat lambda berjalan pada satu atau lebih bekas yang dibuat dan dihapuskan atas permintaan sebagai permintaan.
  • Tidak seperti Fungsi Awan Google di mana anda hanya boleh menambah nama perpustakaan dalam requirements.txt dan mereka akan mengendalikan selebihnya, untuk AWS lambda anda perlu membuat fail zip semua pustaka dan binari yang digunakan dalam fungsi lambda. Selepas melakukan penyelidikan, kami mendapati bahawa anda boleh menambah folder ffmpeg dalam / tmp dan menggunakannya dalam fungsi anda. Untuk langkah-langkah untuk memasukkan ffmpeg dalam lawatan laluan anda di sini dan untuk membuat lawatan lambda penghantaran pakej awda ke sini.
  • Semasa ujian kami mendapati video yang ditangkap pada peranti iOS telah diputar dari potret ke landskap selepas transformasi (perbincangan StackOverflow dan forum AWS). Alasannya ialah pukulan video pada peranti iOS pada asalnya disimpan dalam mod landskap dengan bendera dalam data meta video yang memberitahu pemain untuk memutar video semasa bermain. Semasa melakukan transformasi, pengenal putaran itu hilang dan kerana video itu dimainkan dalam mod landskap dan kelihatan seperti berputar.
  • Untuk mengatasinya terlebih dahulu kami mengenal pasti video tersebut menggunakan ffmpeg. Video tersebut mempunyai nilai 'putaran' dalam 'Matriks paparan' data meta video yang boleh diperoleh menggunakan ffmpeg. Kemudian putar video tersebut berdasarkan putaran yang diberi dan kini anda mempunyai video berputar yang boleh diubah dengan mudah menggunakan teknik di atas.

Sekiranya anda mendapati artikel ini berguna, sila tekan butang tepukan sebanyak yang anda suka. Sila hubungi jika anda memerlukan sebarang bantuan dalam langkah yang disebutkan di atas.