全部产品
Search
文档中心

Function Compute:Membangun sistem pemrosesan audio dan video yang elastis dan sangat tersedia dalam arsitektur serverless

更新时间:Jul 06, 2025

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.

    Catatan

    Segmentasi 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

Catatan

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%

Catatan

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

Prosedur

  1. Buat layanan.

    1. Masuk keKonsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

    2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik Create Service.

    3. 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 AliyunFCDefaultRole dan AliyunOSSFullAccess ditambahkan ke kebijakan.

      Untuk informasi lebih lanjut tentang cara membuat layanan, lihat Buat Layanan.

  2. Buat fungsi.

    1. Di halaman Functions, klik Create Function.

    2. 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.

  3. Buat pemicu OSS.

    1. Pada halaman Detail Fungsi, klik tab Triggers, pilih versi atau alias dari daftar drop-down Version or Alias, lalu klik Create Trigger.

    2. 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.

      Penting

      Awalan 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.

      Catatan

      Setelah Anda mengonfigurasi parameter sebelumnya, klik OK. Jika ini pertama kalinya Anda membuat pemicu jenis ini, klik Authorize Now di pesan yang muncul.

      AliyunOSSEventNotificationRole

  4. Tulis kode fungsi.

    1. 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 dest bucket 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 {}
    2. Klik Deploy.

  5. 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.

    1. Pada halaman Detail Fungsi, klik tab Code, klik ikon xialatubiao di sebelah Test Function, lalu pilih Configure Test Parameters dari daftar drop-down.

    2. 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****"
                  }
              }
          ]
      }
    3. 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, dan AliyunFCInvocationAccess ke 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 AliyunFCInvocationAccess dan AliyunFnFFullAccess ke peran ini.

  • Instal dan 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.

  1. Jalankan perintah berikut untuk menginisialisasi aplikasi:

    s init video-process-flow -d video-process-flow

    Tabel 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

  2. Jalankan perintah berikut untuk masuk ke proyek dan menerapkannya:

    cd video-process-flow && s deploy - y

    Konten 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-flow
  3. Uji proyek.

    1. Masuk ke Konsol OSS. Pergi ke direktori sumber testBucket dan unggah file MP4.

    2. 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.

      image.png

    3. 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.