全部产品
Search
文档中心

Object Storage Service:Pemrosesan Asinkron

更新时间:Aug 16, 2025

Pemrosesan asinkron (x-oss-async-process) memungkinkan program menjalankan tugas lain tanpa menunggu penyelesaian suatu tugas. Topik ini menjelaskan cara menggunakan OSS SDK untuk Go V2 dalam skenario seperti konversi dokumen, transkoding video, dan penggabungan video.

Batasan

  • Kode contoh dalam topik ini menggunakan wilayah China (Hangzhou) (ID: cn-hangzhou) dan titik akhir publik secara default. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk panduan mengonfigurasi kredensial akses, lihat Konfigurasi Kredensial Akses.

Metode

func (c *Client) AsyncProcessObject(ctx context.Context, request *AsyncProcessObjectRequest, optFns ...func(*Options)) (*AsyncProcessObjectResult, error)

Parameter Permintaan

Parameter

Tipe

Deskripsi

ctx

context.Context

Konteks permintaan, yang dapat digunakan untuk menentukan durasi total permintaan

request

*AsyncProcessObjectRequest

Tentukan parameter permintaan untuk antarmuka spesifik. Untuk informasi lebih lanjut, lihat AsyncProcessObjectRequest

optFns

...func(*Options)

(Opsional) Parameter konfigurasi tingkat antarmuka. Untuk informasi lebih lanjut, lihat Options

Daftar Nilai Pengembalian

Nama Nilai Pengembalian

Tipe

Deskripsi

result

*AsyncProcessObjectResult

Nilai pengembalian antarmuka, valid ketika err adalah nil. Untuk informasi lebih lanjut, lihat AsyncProcessObjectResult

err

error

Status permintaan. Jika permintaan gagal, nilai err tidak nil

Kode Contoh

Kode berikut menunjukkan cara menggunakan Go SDK V2 untuk konversi format dokumen guna mencapai jenis keluaran yang diinginkan.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string 
	objectName string
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama dokumen yang akan dikonversi
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama file keluaran
	targetKey := "dest.png"

	// Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen
	animationStyle := "doc/convert,target_png,source_docx" // Tentukan aturan pemrosesan untuk mengonversi dokumen sumber Docx menjadi gambar PNG

	// Buat instruksi pemrosesan, termasuk jalur penyimpanan, nama bucket yang di-enkode Base64, dan nama frame yang ditangkap
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(objectName), // Tentukan nama dokumen untuk diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Skema Umum

Transkoding Video

Gunakan fitur transkoding video untuk mengubah format pengkodean video, mengurangi resolusi dan bitrate untuk mengurangi ukuran file video, serta mengonversi format wadah video.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
	objectName string // Tentukan variabel untuk menyimpan nama objek yang diperoleh dari baris perintah
)

func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama video yang akan ditranscoding
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama video keluaran
	targetObject := "dest.avi"

	// Tentukan gaya pemrosesan. Ini adalah konfigurasi konversi video sampel, termasuk format, codec video, resolusi, bitrate, laju frame, codec audio, bitrate audio, dan parameter lainnya
	style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"

	// Bangun instruksi pemrosesan asinkron, termasuk gaya pemrosesan dan lokasi penyimpanan file yang diproses (nama bucket dan nama objek di-enkode Base64)
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v",
		style,
		strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="),   // Enkode nama bucket ke Base64 dan hapus '=' di akhir
		strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "=")) // Enkode nama objek ke Base64 dan hapus '=' di akhir

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(objectName), // Tentukan nama video untuk diproses
		AsyncProcess: oss.Ptr(process),
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Konversi Video ke Gambar Animasi

Konversikan video ke gambar animasi dalam format GIF atau WebP menggunakan fitur konversi video ke gambar animasi.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
	objectName string // Tentukan variabel untuk menyimpan nama objek yang diperoleh dari baris perintah
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama video yang akan diproses
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama file gambar animasi GIF keluaran
	targetKey := "destexample.gif"

	// Tentukan parameter untuk mengonversi video ke gambar animasi GIF, termasuk lebar, tinggi, dan interval frame GIF
	animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"

	// Buat instruksi pemrosesan, termasuk jalur penyimpanan, nama bucket yang di-enkode Base64, dan nama frame yang ditangkap
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(objectName), // Tentukan nama video untuk diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Pengambilan Sprite video

Tangkap frame video dan jahit menjadi sprite menggunakan fitur Capture Sprite Video berdasarkan aturan tertentu.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
	objectName string // Tentukan variabel untuk menyimpan nama objek yang diperoleh dari baris perintah
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama video yang akan diproses
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama file sprite keluaran
	targetKey := "example.jpg"

	// Bangun parameter untuk capture sprite video
	animationStyle := "video/sprite,f_jpg,sw_100,sh_100,inter_10000,tw_10,th_10,pad_0,margin_0"

	// Buat instruksi pemrosesan, termasuk jalur penyimpanan, nama bucket yang di-enkode Base64, dan nama frame yang ditangkap
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(objectName), // Tentukan nama objek untuk diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Pengambilan Bingkai

Tangkap frame video sesuai kebutuhan dan konversikan ke format tertentu dengan fitur Capture Frame.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
	objectName string // Tentukan variabel untuk menyimpan nama objek yang diperoleh dari baris perintah
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama video yang akan diproses
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama file setelah capture frame
	targetKey := "dest.png"

	// Bangun parameter untuk capture frame
	animationStyle := "video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000"

	// Buat instruksi pemrosesan, termasuk jalur penyimpanan, nama bucket yang di-enkode Base64, dan nama frame yang ditangkap
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(objectName), // Tentukan nama objek untuk diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Penggabungan Video

Gabungkan beberapa video menjadi satu file video dalam format tertentu menggunakan fitur Penggabungan Video.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama file video keluaran
	targetObject := "dest.mp4"
	// Tentukan nama file video yang akan digabungkan
	video1 := "concat1.mp4"
	video2 := "concat2.mp4"

	// Buat variabel gaya bertipe string untuk menyimpan parameter penggabungan video
	style := fmt.Sprintf("video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_%s/sur,o_%s,t_0", strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video1)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video2)), "="))
	// Buat instruksi pemrosesan asinkron
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", style, strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "="))

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Transkoding Audio

Konversikan file audio dari satu format ke format lain dengan fitur Transkoding Audio.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
	objectName string // Tentukan variabel untuk menyimpan nama objek yang diperoleh dari baris perintah
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk mententukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama audio yang akan diproses
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama audio keluaran
	targetKey := "dest.aac"

	// Buat variabel gaya bertipe string untuk menyimpan parameter transkoding audio
	animationStyle := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"

	// Buat instruksi pemrosesan, termasuk jalur penyimpanan, nama bucket yang di-enkode Base64, dan nama frame yang ditangkap
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(objectName), // Tentukan nama audio untuk diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Penggabungan Audio

Gabungkan beberapa objek audio menjadi satu objek audio dalam format tertentu dengan fitur Penggabungan Audio.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan objek audio yang akan digabungkan
	audio1 := "src1.mp3"
	audio2 := "src2.mp3"
	// Tentukan nama audio keluaran
	targetAudio := "dest.aac"

	// Buat variabel gaya bertipe string untuk menyimpan parameter penggabungan audio
	audio1Encoded := base64.URLEncoding.EncodeToString([]byte(audio1))
	audio2Encoded := base64.URLEncoding.EncodeToString([]byte(audio2))
	style := fmt.Sprintf("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded)

	// Buat instruksi pemrosesan asinkron
	bucketEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetEncoded := base64.URLEncoding.EncodeToString([]byte(targetAudio))
	process := fmt.Sprintf("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded)

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Parse Watermark Gambar Buta

Kode di bawah ini menunjukkan cara mem-parsing watermark buta dalam gambar.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
	objectName string
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program
func init() {
	// Gunakan parameter baris perintah untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter baris perintah untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter baris perintah untuk menentukan nama gambar yang akan diproses
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah

	// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi

	// Tentukan nama file gambar watermark
	sourceKey := objectName // Tentukan nama objek gambar untuk diproses

	// Tentukan topik pesan MNS
	topic := "imm-blindwatermark-test"

	// Ekstrak konten watermark dari gambar yang ditentukan
	style := "image/deblindwatermark,s_low,t_text"
	encodedTopic := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(topic)), "=")
	process := fmt.Sprintf("%s|sys/notify,topic_%s", style, encodedTopic)
	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
		Key:          oss.Ptr(sourceKey),  // Tentukan nama gambar untuk diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek secara asinkron %v", err)
	}

	log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}

Referensi

  • Untuk informasi lebih lanjut tentang fitur pemrosesan asinkron, lihat Pemrosesan Asinkron.

  • Untuk informasi lebih lanjut tentang antarmuka API fitur pemrosesan asinkron, lihat AsyncProcessObject.