Dalam sistem audio dan video, transkoding membutuhkan banyak daya komputasi. Anda dapat menggunakan Function Compute dan CloudFlow untuk membangun sistem pemrosesan audio dan video yang elastis dan sangat tersedia dalam arsitektur serverless. Topik ini menjelaskan perbedaan dalam efisiensi teknik, operasi dan pemeliharaan (O&M), kinerja, dan biaya antara solusi tradisional dan serverless untuk pemrosesan audio dan video, serta cara membangun dan menggunakan sistem tersebut.
Latar Belakang
Anda dapat menggunakan layanan transkoding berbasis cloud khusus. Namun, dalam skenario tertentu, Anda mungkin ingin membangun layanan transkoding sendiri. Layanan transkoding yang dikelola sendiri dapat membantu memenuhi persyaratan berikut:
Auto scaling
Anda ingin meningkatkan elastisitas layanan pemrosesan video Anda.
Sebagai contoh, Anda telah menerapkan layanan pemrosesan video pada mesin virtual atau platform kontainer menggunakan FFmpeg, dan Anda ingin meningkatkan elastisitas dan ketersediaannya.
Efisiensi teknik
Anda ingin memproses beberapa video secara bersamaan.
Anda ingin memproses beberapa video berukuran besar dalam waktu singkat.
Sebagai contoh, setiap hari Jumat, ratusan video 1080p, masing-masing lebih besar dari 4 GB, diproduksi dan perlu diproses dalam beberapa jam.
Pemrosesan kustom
Anda memiliki persyaratan pemrosesan kustom tingkat lanjut.
Sebagai contoh, Anda ingin mencatat detail transkoding di database Anda setiap kali video ditranskode. Atau Anda mungkin ingin video yang sedang tren diprefetch otomatis ke node Alibaba Cloud CDN (CDN) begitu mereka selesai ditranskode untuk mengurangi tekanan pada server asal.
Anda ingin mengonversi format audio, menyesuaikan tingkat sampling, atau menyaring kebisingan latar belakang.
Anda ingin langsung membaca dan memproses file sumber.
Sebagai contoh, file video Anda disimpan di File Storage NAS (NAS) atau pada disk yang terpasang ke Instance Elastic Compute Service (ECS), dan Anda ingin sistem pemrosesan video Anda langsung membaca dan memproses file tersebut dari lokasi penyimpanan saat ini, menghilangkan kebutuhan untuk memindahkan file ke Bucket Object Storage Service (OSS) terlebih dahulu.
Anda ingin mengonversi format video dan menambahkan lebih banyak fitur.
Sebagai contoh, Anda ingin menambahkan penyesuaian parameter transkoding dan fitur lainnya ke sistem pemrosesan video Anda, yang sudah dapat mentranskode video, menambahkan watermark, dan menghasilkan thumbnail GIF. Anda juga ingin memastikan bahwa layanan online yang ada yang disediakan oleh sistem tetap tidak terpengaruh saat fitur baru dirilis.
Kontrol biaya
Anda ingin menerapkan layanan transkoding sederhana atau layanan pemrosesan media ringan.
Sebagai contoh, Anda ingin menghasilkan gambar GIF berdasarkan beberapa frame pertama video, atau menanyakan durasi file audio atau video. Dalam hal ini, membangun sistem pemrosesan media sendiri lebih hemat biaya.
Anda dapat menggunakan arsitektur tradisional yang dikelola sendiri atau solusi serverless untuk membangun layanan transkoding Anda sendiri. Topik ini membandingkan kedua opsi tersebut dan menjelaskan prosedur penerapan solusi serverless.
Solusi
Arsitektur tradisional yang dikelola sendiri
Dengan perkembangan teknologi komputer dan Internet, produk dari vendor komputasi awan terus matang dan meningkat. Anda dapat menggunakan layanan Alibaba Cloud, seperti ECS, OSS, dan CDN, untuk membangun sistem pemrosesan audio dan video untuk menyimpan file audio dan video serta mempercepat pemutaran file tersebut.
Solusi serverless
Sistem pemrosesan video sederhana
Gambar berikut menunjukkan arsitektur solusi yang dapat Anda gunakan untuk melakukan pemrosesan sederhana pada video.
Saat Anda mengunggah video ke OSS, OSS secara otomatis memicu eksekusi fungsi, yang kemudian memanggil FFmpeg untuk mentranskode video dan menyimpan video yang telah ditranskode ke OSS.
Untuk informasi lebih lanjut tentang demo dan prosedur sistem pemrosesan video sederhana, lihat Sistem Pemrosesan Video Sederhana.
Sistem alur kerja pemrosesan video
Jika Anda ingin mempercepat transkoding video besar atau melakukan operasi kompleks pada video, gunakan CloudFlow untuk mengatur fungsi dan membangun sistem pemrosesan video yang kuat. Gambar berikut menunjukkan arsitektur solusi tersebut.
Saat Anda mengunggah video MP4 ke OSS, OSS memicu eksekusi fungsi, yang kemudian memanggil CloudFlow untuk mentranskode format video. Anda dapat menggunakan solusi ini dalam skenario berikut:
Video dapat ditranskode ke berbagai format sekaligus dan diproses berdasarkan persyaratan kustom, seperti menambahkan watermark ke video atau memperbarui detail video di database setelah pemrosesan.
Saat beberapa file diunggah ke OSS secara bersamaan, Function Compute melakukan auto scaling untuk memproses file secara paralel dan secara bersamaan mentranskode ke beberapa format.
Anda dapat menggunakan NAS dan segmentasi video untuk mentranskode video berukuran besar. Setiap video berukuran besar pertama-tama dibagi menjadi segmen, lalu segmen-segmen tersebut ditranskode secara paralel, dan akhirnya digabungkan kembali menjadi satu video. Interval segmentasi yang tepat secara signifikan meningkatkan kecepatan transkoding video besar.
CatatanSegmentasi video mengacu pada pembagian aliran video menjadi beberapa segmen pada interval waktu tertentu dan mencatat informasi tentang segmen-segmen tersebut dalam file indeks yang dihasilkan.
Untuk informasi lebih lanjut tentang demo dan prosedur sistem alur kerja pemrosesan video, lihat Sistem Alur Kerja Pemrosesan Video.
Manfaat solusi serverless
Meningkatkan efisiensi teknik
Item | Solusi Serverless | Arsitektur Tradisional yang Dikelola Sendiri |
Infrastruktur | Tidak ada. | Anda harus membeli dan mengelola sumber daya infrastruktur. |
Efisiensi Pengembangan | Anda dapat fokus pada pengembangan logika bisnis dan menggunakan Serverless Devs untuk mengatur dan menerapkan sumber daya. | Selain mengembangkan logika bisnis, Anda juga harus membangun lingkungan runtime online. Ini termasuk instalasi perangkat lunak, konfigurasi layanan, dan pembaruan keamanan. |
Pemrosesan Video Paralel dan Terdistribusi | Setelah diatur oleh CloudFlow, fungsi-fungsi tersebut memungkinkan pemrosesan paralel beberapa video dan memfasilitasi segmentasi video besar untuk pemrosesan terdistribusi. Anda tidak perlu khawatir tentang stabilitas dan pemantauan, karena Alibaba Cloud menangani aspek-aspek tersebut. | Kemampuan pengembangan yang kuat dan sistem pemantauan yang baik diperlukan untuk memastikan stabilitas sistem pemrosesan video. |
Biaya Pelatihan | Anda hanya perlu menulis kode dalam bahasa pemrograman yang sesuai dan familiar dengan FFmpeg. | Selain bahasa pemrograman dan FFmpeg, Anda mungkin juga perlu menggunakan Kubernetes dan ECS. Ini memerlukan pemahaman yang lebih baik tentang layanan, istilah, dan parameter. |
Siklus Bisnis | Solusi ini membutuhkan sekitar tiga hari orang: dua untuk pengembangan dan debugging, dan satu untuk uji stres dan observasi. | Sistem diperkirakan membutuhkan setidaknya 30 hari orang untuk menyelesaikan tugas-tugas berikut: pengadaan perangkat keras, konfigurasi perangkat lunak dan lingkungan, pengembangan sistem, pengujian, konfigurasi pemantauan dan peringatan, dan rilis canary. Perhatikan bahwa beban kerja pengembangan logika bisnis tidak termasuk dalam estimasi ini. |
Auto scaling dan tanpa O&M
Item | Solusi serverless | Arsitektur tradisional yang dikelola sendiri |
Elastisitas dan ketersediaan tinggi | Function Compute memungkinkan auto scaling dalam hitungan milidetik dan dapat dengan cepat menambah kapasitas sumber daya dasar untuk menghadapi lonjakan lalu lintas. Sistem tanpa O&M ini memberikan kinerja transkoding yang sangat baik. | Anda harus mengelola instance Server Load Balancer (SLB) untuk menerapkan auto scaling, dan kecepatan scaling SLB lebih lambat dibandingkan dengan Function Compute. |
Metrik pemantauan dan peringatan | Lebih banyak metrik granular disediakan untuk Anda memantau eksekusi di CloudFlow dan Function Compute. Anda dapat menanyakan latensi dan log setiap eksekusi fungsi. Selain itu, solusi ini menggunakan mekanisme pemantauan dan peringatan yang lebih komprehensif. | Hanya metrik pada auto scaling atau kontainer yang disediakan. |
Kinerja transkoding yang sangat baik
Sebagai contoh, layanan cloud membutuhkan 188 detik untuk mengonversi file video MOV berdurasi 89 detik ke format MP4, yang merupakan proses transkoding tipikal. Durasi ini, 188 detik, ditandai sebagai T untuk referensi. Rumus berikut digunakan untuk menghitung tingkat percepatan kinerja: Tingkat percepatan kinerja = T/Durasi transkoding Function Compute.
Interval segmentasi video (detik) | Function Compute durasi transkoding (detik) | Tingkat percepatan kinerja (%) |
45 | 160 | 117,5 |
25 | 100 | 188 |
15 | 70 | 268,6 |
10 | 45 | 417,8 |
5 | 35 | 537,1 |
Tingkat percepatan kinerja dalam tabel sebelumnya hanya berlaku untuk instans CPU. Jika Anda menggunakan instans yang dipercepat GPU, lihat Praktik Terbaik untuk Pemrosesan Audio dan Video.
Biaya efektif tinggi
Dalam skenario tertentu, menggunakan Function Compute dapat mengurangi biaya pemrosesan video. Solusi serverless bahkan memiliki daya saing biaya yang besar dibandingkan layanan transkoding video khusus dari vendor cloud lainnya.
Bab ini menggunakan konversi antara file MP4 dan FLV untuk membandingkan biaya menggunakan Function Compute dan layanan cloud lainnya. Dalam contoh ini, kapasitas memori Function Compute diatur ke 3 GB. Tabel berikut membandingkan biayanya.
Rumus berikut digunakan untuk menghitung tingkat pengurangan biaya: Tingkat pengurangan biaya = (Biaya layanan cloud lain - Biaya transkoding Function Compute)/Biaya layanan cloud lain.
Tabel 1. MP4 ke FLV
Resolusi | Kecepatan | Tingkat frame | Function Compute durasi transkoding | Function Compute biaya transkoding | Biaya layanan cloud lain | Tingkat pengurangan biaya |
Definisi standar (SD): 640 × 480 piksel | 889 KB/detik | 24 | 11,2 detik | 0,003732288 | 0,032 | 88,3% |
Definisi tinggi (HD): 1280 × 720 piksel | 1963 KB/detik | 24 | 20,5 detik | 0,00683142 | 0,065 | 89,5% |
Ultra HD: 1920 × 1080 piksel | 3689 KB/detik | 24 | 40 detik | 0,0133296 | 0,126 | 89,4% |
4K 3840*2160 | 11185 KB/detik | 24 | 142 detik | 0,04732008 | 0,556 | 91,5% |
Tabel 2. FLV ke MP4
Resolusi | Kecepatan | Tingkat frame | Function Compute durasi transkoding | Function Compute biaya transkoding | Biaya layanan cloud lain | Tingkat pengurangan biaya |
Definisi standar (SD): 640 × 480 piksel | 712 KB/detik | 24 | 34,5 detik | 0,01149678 | 0,032 | 64,1% |
Definisi tinggi (HD): 1280 × 720 piksel | 1806 KB/detik | 24 | 100,3 detik | 0,033424 | 0,065 | 48,6% |
Ultra HD: 1920 × 1080 piksel | 3911 KB/detik | 24 | 226,4 detik | 0,0754455 | 0,126 | 40,1% |
4K 3840*2160 | 15109 KB/detik | 24 | 912 detik | 0,30391488 | 0,556 | 45,3% |
Layanan cloud lain mengikuti aturan penagihan transkoding standar, yang berarti durasi video dibulatkan ke menit penuh terdekat untuk tujuan penagihan. Dalam contoh ini, durasi penagihan adalah 2 menit. Bahkan jika Anda dikenakan biaya untuk 1,5 menit alih-alih 2 menit, perbedaan pembayaran akan minimal, dan tingkat pengurangan biaya akan bervariasi kurang dari 10%.
Tabel-tabel sebelumnya menjelaskan harga untuk transkoding video antara format FLV dan MP4. Video FLV lebih kompleks daripada video MP4 dalam transkoding. Seperti yang ditunjukkan oleh metrik yang ditampilkan di tabel, dalam kedua arah transkoding, solusi berbasis Function Compute dan CloudFlow lebih hemat biaya dalam hal sumber daya komputasi dibandingkan dengan solusi yang disediakan oleh penyedia layanan cloud lainnya. Berdasarkan pengalaman praktis, pengurangan biaya aktual lebih jelas daripada yang dijelaskan di tabel sebelumnya. Item-item berikut menjelaskan alasan pengurangan biaya:
Video uji memiliki bitrate tinggi, sedangkan sebagian besar video dalam penggunaan aktual berada dalam kualitas SD atau definisi rendah (LD) dan memiliki bitrate lebih rendah. Video dalam penggunaan aktual membutuhkan lebih sedikit sumber daya komputasi. Transkoding oleh Function Compute membutuhkan waktu lebih singkat sehingga biayanya menjadi lebih rendah. Namun, kebijakan penagihan yang dikonfigurasikan umum pada layanan transkoding cloud tidak bervariasi dengan kualitas atau bitrate video.
Untuk video dengan resolusi tertentu, aturan penagihan yang diadopsi oleh layanan transkoding cloud umum memiliki efek buruk yang signifikan terhadap efektivitas biaya. Sebagai contoh, video dengan resolusi 856 × 480 piksel ditagih sebagai video HD dengan resolusi 1280 × 720 piksel. Demikian pula, video dengan resolusi 1368 × 768 piksel ditagih sebagai video ultra HD dengan resolusi 1920 × 1080 piksel. Dalam kasus-kasus ini, harga satuan untuk transkoding video meningkat secara signifikan, sedangkan peningkatan dalam konsumsi sumber daya komputasi aktual mungkin kurang dari 30%. Function Compute, di sisi lain, memungkinkan Anda membayar hanya untuk sumber daya komputasi yang benar-benar Anda gunakan.
Penerapan
Bab ini menjelaskan cara menerapkan sistem pemrosesan video sederhana dan sistem alur kerja pemrosesan video.
Sistem pemrosesan video sederhana
Prasyarat
Function Compute telah diaktifkan. Untuk informasi lebih lanjut, lihat Langkah 1: Aktifkan Function Compute.
Object Storage Service telah diaktifkan. Untuk informasi lebih lanjut, lihat Buat Bucket.
Prosedur
Buat layanan.
Masuk keKonsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik Create Service.
Di panel Buat Layanan, masukkan nama layanan dan deskripsi, konfigurasikan parameter berdasarkan kebutuhan bisnis Anda, lalu klik OK.
Dalam contoh ini, peran layanan diatur ke
AliyunFCDefaultRoledanAliyunOSSFullAccessditambahkan ke kebijakan.Untuk informasi lebih lanjut tentang cara membuat layanan, lihat Buat Layanan.
Buat fungsi.
Di halaman Functions, klik Create Function.
Pada halaman Create Function, pilih metode untuk membuat fungsi, konfigurasikan parameter berikut, lalu klik Create.
Metode untuk membuat fungsi: Use Built-in Runtime.
Basic Settings: Konfigurasikan informasi dasar fungsi, termasuk Function Name dan Handler Type. Atur Handler Type ke Event Handler.
Code: Atur Runtime ke Python 3.9 dan Metode Unggah Kode ke Use Sample Code.
Advanced Settings: Pemrosesan file video memakan waktu. Dalam contoh ini, vCPU Capacity diatur ke 4 vCPU, Memory Capacity diatur ke 8 GB, Size of Temporary Disk diatur ke 10 GB, dan Execution Timeout Period diatur ke 7200 detik. Pastikan untuk mempertimbangkan ukuran video Anda saat mengonfigurasi parameter sebelumnya.
Simpan nilai default untuk parameter lainnya. Untuk informasi lebih lanjut tentang cara membuat fungsi, lihat Buat Fungsi.
Buat pemicu OSS.
Pada halaman Detail Fungsi, klik tab Triggers, pilih versi atau alias dari daftar drop-down Version or Alias, lalu klik Create Trigger.
Di panel Buat Pemicu, tentukan parameter terkait dan klik OK.
Parameter
Deskripsi
Contoh
Trigger Type
Pilih jenis pemicu. Dalam contoh ini, OSS dipilih.
OSS
Name
Masukkan nama pemicu.
oss-trigger
Version or Alias
Tentukan versi atau alias. Nilai defaultnya adalah LATEST. Jika Anda ingin membuat pemicu untuk versi atau alias lain, pilih versi atau alias dari daftar drop-down Version or Alias di halaman Detail Fungsi. Untuk informasi lebih lanjut tentang versi dan alias, lihat Kelola versi dan Kelola alias.
LATEST
Bucket Name
Pilih bucket yang Anda buat.
testbucket
Object Prefix
Masukkan awalan nama objek yang ingin Anda cocokkan. Kami sarankan Anda mengonfigurasi Awalan Objek dan Akhiran Objek untuk mencegah biaya tak terduga yang dihasilkan oleh loop bersarang. Jika Anda menentukan tipe acara yang sama untuk pemicu berbeda dari sebuah bucket, awalan dan akhiran tidak boleh sama. Untuk informasi lebih lanjut, lihat Aturan Pemicu.
PentingAwalan objek tidak dapat dimulai dengan garis miring (
/). Jika tidak, pemicu OSS tidak akan berfungsi.source
Object Suffix
Masukkan akhiran nama objek yang ingin Anda cocokkan. Kami sarankan Anda mengonfigurasi Awalan Objek dan Akhiran Objek untuk mencegah biaya tak terduga yang dihasilkan oleh loop bersarang. Jika Anda menentukan tipe acara yang sama untuk pemicu berbeda dari sebuah bucket, awalan dan akhiran tidak boleh sama. Untuk informasi lebih lanjut, lihat Aturan Pemicu.
mp4
Trigger Event
Pilih satu atau beberapa acara pemicu. Untuk informasi lebih lanjut tentang tipe acara OSS, lihat Acara OSS.
oss:ObjectCreated:PutObject, oss:ObjectCreated:PostObject, oss:ObjectCreated:CompleteMultipartUpload
Role Name
Tentukan nama peran manajemen akses sumber daya (RAM). Dalam contoh ini, AliyunOSSEventNotificationRole dipilih.
CatatanSetelah Anda mengonfigurasi parameter sebelumnya, klik OK. Jika ini pertama kalinya Anda membuat pemicu jenis ini, klik Authorize Now di pesan yang muncul.
AliyunOSSEventNotificationRole
Tulis kode fungsi.
Pada halaman Detail Fungsi, klik tab Code lalu tulis kode di editor kode.
Fungsi tersebut mengonversi file MP4 ke format FLV dan menyimpan file FLV di direktori
destbucket OSS. Dalam contoh ini, Python digunakan. Contoh kode berikut memberikan ilustrasi:# -*- coding: utf-8 -*- import logging import oss2 import os import json import subprocess import shutil logging.getLogger("oss2.api").setLevel(logging.ERROR) logging.getLogger("oss2.auth").setLevel(logging.ERROR) LOGGER = logging.getLogger() def get_fileNameExt(filename): (_, tempfilename) = os.path.split(filename) (shortname, extension) = os.path.splitext(tempfilename) return shortname, extension def handler(event, context): LOGGER.info(event) evt = json.loads(event) evt = evt["events"] oss_bucket_name = evt[0]["oss"]["bucket"]["name"] object_key = evt[0]["oss"]["object"]["key"] output_dir = "dest" dst_format = "flv" shortname, _ = get_fileNameExt(object_key) creds = context.credentials auth = oss2.StsAuth(creds.accessKeyId, creds.accessKeySecret, creds.securityToken) oss_client = oss2.Bucket(auth, 'oss-%s-internal.aliyuncs.com' % context.region, oss_bucket_name) exist = oss_client.object_exists(object_key) if not exist: raise Exception("objek {} tidak ada".format(object_key)) input_path = oss_client.sign_url('GET', object_key, 6 * 3600) # Penanganan khusus M3U8. rid = context.request_id if dst_format == "m3u8": return handle_m3u8(rid, oss_client, input_path, shortname, output_dir) else: return handle_common(rid, oss_client, input_path, shortname, output_dir, dst_format) def handle_m3u8(request_id, oss_client, input_path, shortname, output_dir): ts_dir = '/tmp/ts' if os.path.exists(ts_dir): shutil.rmtree(ts_dir) os.mkdir(ts_dir) transcoded_filepath = os.path.join('/tmp', shortname + '.ts') split_transcoded_filepath = os.path.join( ts_dir, shortname + '_%03d.ts') cmd1 = ['ffmpeg', '-y', '-i', input_path, '-c:v', 'libx264', transcoded_filepath] cmd2 = ['ffmpeg', '-y', '-i', transcoded_filepath, '-c', 'copy', '-map', '0', '-f', 'segment', '-segment_list', os.path.join(ts_dir, 'playlist.m3u8'), '-segment_time', '10', split_transcoded_filepath] try: subprocess.run( cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) subprocess.run( cmd2, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) for filename in os.listdir(ts_dir): filepath = os.path.join(ts_dir, filename) filekey = os.path.join(output_dir, shortname, filename) oss_client.put_object_from_file(filekey, filepath) os.remove(filepath) print("Diunggah {} ke {}".format(filepath, filekey)) except subprocess.CalledProcessError as exc: # jika transkode gagal, picu fungsi dest-fail raise Exception(request_id + " kegagalan transkode, detail: " + str(exc)) finally: if os.path.exists(ts_dir): shutil.rmtree(ts_dir) # Hapus file ts. if os.path.exists(transcoded_filepath): os.remove(transcoded_filepath) return {} def handle_common(request_id, oss_client, input_path, shortname, output_dir, dst_format): transcoded_filepath = os.path.join('/tmp', shortname + '.' + dst_format) if os.path.exists(transcoded_filepath): os.remove(transcoded_filepath) cmd = ["ffmpeg", "-y", "-i", input_path, transcoded_filepath] try: subprocess.run( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) oss_client.put_object_from_file( os.path.join(output_dir, shortname + '.' + dst_format), transcoded_filepath) except subprocess.CalledProcessError as exc: # jika transkode gagal, picu fungsi dest-fail raise Exception(request_id + " kegagalan transkode, detail: " + str(exc)) finally: if os.path.exists(transcoded_filepath): os.remove(transcoded_filepath) return {}Klik Deploy.
Uji kode fungsi.
Anda dapat mengonfigurasi parameter input fungsi untuk mensimulasikan acara OSS dan memverifikasi kode Anda. Dalam operasi nyata, fungsi tersebut secara otomatis dipicu ketika acara OSS tertentu terjadi.
Pada halaman Detail Fungsi, klik tab Code, klik ikon
di sebelah Test Function, lalu pilih Configure Test Parameters dari daftar drop-down.Di panel Configure Test Parameters, klik tab Create New Test Event atau Modify Existing Test Event, dan tentukan Event Name dan isi acara. Lalu, klik OK.
Contoh kode berikut memberikan ilustrasi konfigurasi acara. Untuk informasi lebih lanjut tentang parameter acara, lihat Langkah 2: Konfigurasikan Parameter Input Fungsi.
{ "events": [ { "eventName": "oss:ObjectCreated:CompleteMultipartUpload", "eventSource": "acs:oss", "eventTime": "2022-08-13T06:45:43.000Z", "eventVersion": "1.0", "oss": { "bucket": { "arn": "acs:oss:cn-hangzhou:123456789:testbucket", "name": "testbucket", "ownerIdentity": "164901546557****" }, "object": { "deltaSize": 122539, "eTag": "688A7BF4F233DC9C88A80BF985AB****", "key": "source/a.mp4", "size": 122539 }, "ossSchemaVersion": "1.0", "ruleId": "9adac8e253828f4f7c0466d941fa3db81161****" }, "region": "cn-hangzhou", "requestParameters": { "sourceIPAddress": "140.205.XX.XX" }, "responseElements": { "requestId": "58F9FF2D3DF792092E12044C" }, "userIdentity": { "principalId": "164901546557****" } } ] }Klik Test Function. Pada tab Code, lihat hasil eksekusi.
Sistem alur kerja pemrosesan video
Prasyarat
Aktifkan Function Compute dan buat bucket OSS
Function Compute telah diaktifkan. Untuk informasi lebih lanjut, lihat Langkah 1: Aktifkan Function Compute.
Object Storage Service telah diaktifkan. Untuk informasi lebih lanjut, lihat Buat Bucket.
CloudFlow telah diaktifkan. Untuk informasi lebih lanjut, kunjungi Aktifkan CloudFlow.
File Storage NAS telah diaktifkan. Untuk informasi lebih lanjut, kunjungi Aktifkan NAS.
Virtual Private Cloud telah diaktifkan. Untuk informasi lebih lanjut, kunjungi Aktifkan VPC.
Konfigurasikan peran layanan
AliyunFcDefaultRole: Peran default Function Compute. Anda harus mengonfigurasi peran ini saat membuat layanan. Tambahkan izin
AliyunOSSFullAccess,AliyunFnFFullAccess, danAliyunFCInvocationAccesske peran ini untuk memanggil fungsi, mengelola alur kerja, dan mengelola OSS.AliyunOSSEventNotificationRole: Peran default yang digunakan oleh OSS untuk mengirim notifikasi acara.
fnf-execution-default-role: Peran yang diperlukan untuk membuat dan mengelola alur kerja. Anda harus menambahkan izin
AliyunFCInvocationAccessdanAliyunFnFFullAccesske peran ini.
Instal dan konfigurasikan Serverless Devs
Serverless Devs dan dependensi telah diinstal. Untuk informasi lebih lanjut, lihat Instal Serverless Devs dan Docker.
Serverless Devs telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasikan Serverless Devs.
Prosedur
Solusi ini mengimplementasikan sistem pemrosesan video dengan menggunakan CloudFlow untuk mengatur fungsi. Kode dan alur kerja dari beberapa fungsi perlu dikembangkan dan dikonfigurasi. Dalam contoh ini, Serverless Devs digunakan untuk menerapkan sistem.
Jalankan perintah berikut untuk menginisialisasi aplikasi:
s init video-process-flow -d video-process-flowTabel berikut menjelaskan item yang akan dikonfigurasi. Tentukan item-item tersebut berdasarkan kebutuhan bisnis Anda.
Parameter
Contoh
ID Wilayah
cn-hangzhou
Layanan
video-process-flow-demo
Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM
acs:ram::10343546****:role/aliyunfcdefaultrole
Nama bucket OSS
testBucket
Awalan
source
Path untuk menyimpan video yang telah ditranskode
dest
ARN dari peran RAM terkait dengan pemicu OSS
acs:ram::10343546****:role/aliyunosseventnotificationrole
Interval segmentasi
30
Format video setelah transkoding
mp4, flv, avi
Nama alur kerja
video-process-flow
ARN dari peran RAM terkait dengan alur kerja
acs:ram::10343546****:role/fnf-execution-default-role
Pilih alias kredensial
default
Jalankan perintah berikut untuk masuk ke proyek dan menerapkannya:
cd video-process-flow && s deploy - yKonten berikut dikembalikan jika penerapan berhasil.
[2023-08-31 13:22:21] [INFO] [S-CORE] - Proyek video-demo-flow berhasil dieksekusi fc-video-demo-split: region: cn-hangzhou service: name: video-process-flow-wg76 function: name: split runtime: python3 handler: index.handler memorySize: 3072 timeout: 600 fc-video-demo-transcode: region: cn-hangzhou service: name: video-process-flow-wg76 function: name: transcode runtime: python3 handler: index.handler memorySize: 3072 timeout: 600 fc-video-demo-merge: region: cn-hangzhou service: name: video-process-flow-wg76 function: name: merge runtime: python3 handler: index.handler memorySize: 3072 timeout: 600 fc-video-demo-after-process: region: cn-hangzhou service: name: video-process-flow-wg76 function: name: after-process runtime: python3 handler: index.handler memorySize: 512 timeout: 120 fc-oss-trigger-trigger-fnf: region: cn-hangzhou service: name: video-process-flow-wg76 function: name: trigger-fnf runtime: python3 handler: index.handler memorySize: 128 timeout: 120 triggers: - type: oss name: oss-t video-demo-flow: RegionId: cn-hangzhou Name: video-process-flowUji proyek.
Masuk ke Konsol OSS. Pergi ke direktori sumber testBucket dan unggah file MP4.
Masuk ke Konsol CloudFlow. Pada halaman Alur Kerja, klik alur kerja target. Pada tab Execution Records, klik nama eksekusi target untuk melihat proses dan statusnya.

Jika status eksekusi adalah Execution Succeeded, Anda dapat pergi ke direktori dest testBucket untuk melihat file yang telah ditranskode.
Jika Anda menemukan file yang telah ditranskode di sana, layanan sistem pemrosesan video sedang berjalan sesuai harapan.
Referensi
FAQ
Saya telah menerapkan sistem pemrosesan video pada mesin virtual atau platform kontainer menggunakan FFmpeg. Bagaimana cara meningkatkan elastisitas dan ketersediaan sistem?
Anda dapat bermigrasi sistem Anda dari mesin virtual atau platform kontainer ke Function Compute dengan mudah. Function Compute dapat diintegrasikan dengan perintah terkait FFmpeg. Rekonstruksi sistem hemat biaya, secara mulus mewarisi elastisitas dan ketersediaan tinggi dari Function Compute.
Apa yang dapat saya lakukan jika saya perlu memproses sejumlah besar video secara paralel?
Untuk informasi lebih lanjut tentang solusi penerapan, lihat Sistem Alur Kerja Pemrosesan Video. Saat beberapa video diunggah ke OSS secara bersamaan, Function Compute secara otomatis menambah kapasitas untuk memproses video secara paralel. Untuk informasi lebih lanjut, lihat fc-fnf-video-processing.
Setiap hari Jumat, ratusan video 1080p, masing-masing lebih besar dari 4 GB, diproduksi dan perlu diproses dalam beberapa jam. Apa yang harus saya lakukan dalam situasi ini?
Segmentasi video dapat sangat meningkatkan efisiensi transkoding. Anda dapat menentukan ukuran segmen video untuk memastikan bahwa video berukuran besar memiliki sumber daya komputasi yang memadai untuk transkoding. Untuk informasi lebih lanjut tentang solusi penerapan, lihat fc-fnf-video-processing.
Saya ingin mencatat detail transkoding di database saya setiap kali video ditranskode. Saya juga ingin video yang sedang tren diprefetch otomatis ke node CDN begitu mereka selesai ditranskode untuk mengurangi tekanan pada server asal. Apa yang harus saya lakukan untuk mencapai tujuan ini?
Untuk informasi lebih lanjut tentang solusi penerapan, lihat Sistem Alur Kerja Pemrosesan Video. Anda dapat melakukan operasi kustom tertentu selama pemrosesan media atau melakukan operasi tambahan berdasarkan proses. Sebagai contoh, Anda dapat menambahkan langkah pra-pemrosesan sebelum proses dimulai atau menambahkan langkah-langkah berikutnya.
Sistem pemrosesan video saya dapat mentranskode video, menambahkan watermark, dan menghasilkan thumbnail GIF. Sekarang, saya ingin menambahkan penyesuaian parameter transkoding dan beberapa fitur lainnya ke sistem. Saya juga ingin memastikan bahwa layanan online yang ada yang disediakan oleh sistem tetap tidak terpengaruh saat fitur baru dirilis.
Untuk informasi lebih lanjut tentang solusi penerapan, lihat Sistem Alur Kerja Pemrosesan Video. CloudFlow hanya digunakan untuk pengaturan fungsi. Oleh karena itu, Anda dapat fokus pada pembaruan fungsi yang digunakan untuk pemrosesan media. Versi fungsi dan alias juga didukung agar Anda dapat lebih baik mengendalikan rilis canary. Untuk informasi lebih lanjut, lihat Kelola Versi.
Saya ingin menghasilkan gambar GIF berdasarkan beberapa frame pertama video, dan menanyakan durasi file audio atau video. Saya ingin membangun sistem pemrosesan media sendiri untuk menangani persyaratan transkoding sederhana dan pemrosesan media ringan ini karena lebih hemat biaya. Apa yang harus saya lakukan untuk mencapai tujuan ini?
Function Compute mendukung fitur kustom. Anda dapat menjalankan perintah FFmpeg tertentu untuk mencapai tujuan Anda dengan mudah. Untuk informasi lebih lanjut tentang proyek sampel tipikal, lihat fc-oss-ffmpeg.
File video saya disimpan di NAS atau pada disk yang terpasang ke Instance Elastic Compute Service (ECS), dan saya ingin sistem pemrosesan video saya langsung membaca dan memproses file-file tersebut dari lokasi penyimpanan saat ini, menghilangkan kebutuhan untuk memindahkan file ke Bucket Object Storage Service (OSS) terlebih dahulu.
Anda dapat mengintegrasikan Function Compute dengan NAS untuk memungkinkan Function Compute memproses file yang disimpan di NAS. Untuk informasi lebih lanjut, lihat Konfigurasikan Sistem File NAS.